Loudly is a personal stream. One feed, every content type — short notes, long writings, images, audio, video. No algorithm, no platform, no middle man. Just you, publishing loud.
| Type | What it is | Analogue |
|---|---|---|
note |
Short thoughts, links, quick observations | X / Twitter |
writing |
Essays, articles, long-form posts | Blog |
image |
Photos, artwork, visuals | |
audio |
Tracks, recordings, podcasts | SoundCloud |
video |
Clips, films, recordings | YouTube |
Everything lands in the same stream, in reverse chronological order. Domain tags (tech, art, music, personal) let readers filter to what they care about.
Your content lives in a plain-text GitHub repository — the vault — that you fully own. Loudly reads it and renders the stream. The site is just a reader; the vault is the source of truth.
Content is fetched at request time from the GitHub API (with 60-second ISR revalidation). No build step is needed when you publish — push a file with status: public to the public branch and it appears in the stream.
Every publishing platform either owns your content or forces you into a single format. Loudly treats your vault as a first-class artifact: plain markdown files, versioned in git, readable without any tooling, forever.
- One stream, every type. Notes and essays and images coexist in the same feed rather than being spread across different platforms.
- Publishing is a branch. The
publicbranch is what gets served. Drafts stay on other branches, never exposed. - No database, no CMS. The GitHub API is the backend. There's nothing to maintain.
- Private content stays private. Use a private repo — only posts with
status: publicin their frontmatter are rendered.
Each post is a markdown file with YAML frontmatter:
---
title: My post # optional for notes
date: 2026-04-27
type: writing # note | writing | image | audio | video
domain: tech # tech | art | music | personal
status: public # only "public" posts appear in the stream
tags: [optional, tags]
cover: https://... # image URL (image type)
url: https://... # external media URL (audio/video type)
og:
description: Optional OG description override
---
Your content here.npm install
cp loudly.config.js.example loudly.config.js
# edit loudly.config.js with your repo and site detailsSet your GitHub token (required for private repos, recommended to avoid rate limits):
cp .env.local.example .env.local
# add GITHUB_TOKEN=your_token// loudly.config.js
export default {
content: {
repo: "your-username/your-vault",
branch: "public",
path: "/content",
},
site: {
title: "Your Name",
description: "Your description",
url: "https://yoursite.com",
defaultOgImage: "/og-default.png",
},
};Then:
npm run devOpen http://localhost:3000.
Deploy to Vercel and add GITHUB_TOKEN as an environment variable. No other infrastructure needed.