A fast, beautiful personal blog about building software by directing AI models and agents.
Live demo: bragibytes.com
- Astro 6 — Content-first framework with islands architecture
- MDX + Content Collections — Type-safe Markdown/MDX with excellent DX
- Tailwind CSS v4 — Utility-first styling with beautiful prose defaults
- Shiki — Best-in-class syntax highlighting (dual light/dark themes)
- Pagefind — Instant, zero-backend static search (Cmd/Ctrl+K)
- TypeScript (strict)
The site itself was largely built by directing an AI (see the first post).
Everything is deliberately small and understandable. The entire interesting part of the codebase is a few thousand lines.
See the live site right now (recommended first step):
npm start
# or: npm run previewTo edit the blog / develop:
npm run devBecause this blog is built around AI-assisted development, the fastest way to publish is:
Just open this project in your AI coding environment (Cursor, Claude, Aider, or even this Grok session) and say:
"Create a new post about [topic]. Title: [optional title]"
I will generate the file with proper frontmatter and good structure. Then you review, edit, and push.
npm run new-post "Your Post Title"
# or with draft mode:
npm run new-post "Draft Idea" -- --draftThis creates a properly scaffolded file in src/content/blog/.
Create src/content/blog/your-slug-here.mdx and add frontmatter:
---
title: "Your Excellent Title"
description: "A single-sentence summary that appears in cards and meta tags."
pubDate: 2026-06-01
tags: ["ai", "workflow"]
draft: false
---Draft posts (draft: true) are hidden in production builds.
| Field | Required | Notes |
|---|---|---|
title |
Yes | Post title |
description |
Yes | ≤ 200 chars recommended for SEO |
pubDate |
Yes | YYYY-MM-DD or full date |
updatedDate |
No | Shows "Updated ..." on the post |
tags |
No | Array of strings (e.g. ["ai", "workflow"]) |
draft |
No | true hides from production builds |
- Exceptional reading experience — 72ch measure, beautiful typography, excellent dark mode
- Copy code buttons on every code block
- Table of Contents (auto-generated for posts with 3+ headings)
- Reading time calculated at build
- Powerful search — Press
⌘Kor click the search icon. Powered by Pagefind (static index) - Tag browsing —
/tagsand/tags/[tag] - Full RSS feed at
/rss.xml - Sitemap auto-generated
- View Transitions for smooth page navigation
- Mobile-first with excellent responsive behavior
- Print styles (great for saving articles as PDF)
All identity and branding lives in one place:
src/config.ts
Change the site name, description, social links, URL, accent colors (via CSS variables in global.css), etc.
Before deploying, complete these items:
- Create a free account at buttondown.email
- Copy your Buttondown username (visible in your dashboard URL)
- Open
src/config.ts - Replace the placeholder:
newsletter: { buttondown: "your-username", // ← change this },
- Commit + push the change.
- Create a free account at vercel.com if you don’t have one yet.
- Connect your GitHub account.
- Make sure your latest code is pushed to GitHub (
bragibytes/devblog). - Go to vercel.com → New Project → Import the
bragibytes/devblogrepo. - Vercel should auto-detect it as an Astro project. Click Deploy.
After the first successful deploy:
- (Optional) Update
urlinsrc/config.tsto your Vercel URL if you want. - Later, when you’re ready, add your custom domain
bragibytes.comin Vercel settings.
You can also deploy from the CLI:
npm i -g vercel
vercelnpm run dev— Local development with hot reloadnpm run build— Production build + Pagefind indexingnpm run preview— Preview the production build locally
src/
├── components/ # Reusable UI (PostCard, Header, Footer, SearchModal, TOC...)
├── content/
│ ├── blog/ # Your posts go here (.md or .mdx)
│ └── config.ts # Content Collections schema (Zod)
├── layouts/ # BaseLayout + BlogPostLayout (the reading experience)
├── pages/ # Routing (index, blog/, tags/, rss.xml.ts, etc.)
├── styles/global.css # Tailwind + custom design tokens + prose styles
└── config.ts # Site-wide branding & metadata
This blog was built with three priorities, in order:
- The reader — Fast, calm, beautiful long-form reading on every device
- The writer — Frictionless to publish. One file, one command, done.
- The maintainer — Tiny, boring, obvious code. No magic you’ll be afraid to touch in six months.
This is a personal site, but if you spot a bug or have a strong opinion about the reading experience, feel free to open an issue or PR.
MIT — do whatever you want with the code.
Built with care in 2026. Go write something great.