Personal site and blog built with Astro.
- Framework: Astro 5 (static output)
- Styling: Tailwind CSS 4
- Content: MDX with Astro Content Collections
- Linting: Biome
- Deployment: Vercel
- Bun (v1.0+)
- Node.js 18+ (for Astro compatibility)
# Install dependencies
bun install
# Start development server
bun run dev
# Build for production
bun run build
# Preview production build
bun run previewsrc/
├── components/ # Astro components
├── content/
│ └── posts/ # Blog posts (MDX)
├── fonts/ # Custom fonts for OG images
├── layouts/ # Page layouts
├── lib/ # Utilities and constants
├── pages/ # Routes
│ ├── og/ # Dynamic OG image generation
│ └── *.md.ts # Markdown routes for CLI access
├── styles/ # Global CSS
└── themes/ # Syntax highlighting themes
| Command | Description |
|---|---|
bun run dev |
Start development server |
bun run build |
Build for production |
bun run preview |
Preview production build locally |
bun run lint |
Run all linters (Astro, Biome, TypeScript) |
bun run fix |
Auto-fix linting issues |
- Zero JavaScript runtime (static HTML)
- Custom OG images per post
- RSS feed at
/rss.xml - Automatic sitemap
- View Transitions
- Dark/light theme support
- Markdown routes for CLI access (
/index.md,/blog.md,/[slug].md)
Create a new .mdx file in src/content/posts/:
---
title: "Post Title"
date: 2024-01-15
description: "Optional description"
image: "/images/cover.jpg"
categories: ["category"]
---
Post content here...MIT