A clean, minimal blog built with EmDash and deployed on Cloudflare Workers with D1 and R2.
- Featured post hero on the homepage
- Post archive with reading time estimates
- Category and tag archives
- Full-text search
- RSS feed
- SEO metadata and JSON-LD
- Dark/light mode
| Page | Route |
|---|---|
| Homepage | / |
| All posts | /posts |
| Single post | /posts/:slug |
| Category archive | /category/:slug |
| Tag archive | /tag/:slug |
| Search | /search |
| Static pages | /pages/:slug |
| 404 | fallback |
| Desktop | Mobile | |
|---|---|---|
| Light | ![]() |
![]() |
| Dark | ![]() |
![]() |
- Runtime: Cloudflare Workers
- Database: D1
- Storage: R2
- Framework: Astro with
@astrojs/cloudflare
pnpm install
pnpm devOpen http://localhost:4321/_emdash/admin and complete the setup wizard. EmDash runs database migrations and applies the blog seed during setup. The site is available at http://localhost:4321.
pnpm wrangler login
pnpm deployThe first deployment provisions the named D1 database and R2 bucket from wrangler.jsonc. See Deploy to Cloudflare for production setup, or use the deploy button above.
- Node.js variant -- same template using SQLite and local file storage
- All templates
- EmDash documentation



