Kunthawat Greethong 18d65aaf57 fix: add content binding to Base for live editing navigation
Pass content={{ collection: "homepage", id: homepage.data.id, slug: "main" }}
to Base layout — same pattern as posts and pages. This enables the live
editor to navigate to the correct admin panel entry instead of jumping.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-30 11:48:48 +07:00
2026-04-29 12:41:59 +07:00
2026-04-29 12:41:59 +07:00
2026-04-29 12:41:59 +07:00

EmDash Blog Template

A clean, minimal blog built with EmDash. Runs on any Node.js server with SQLite and local file storage.

Blog template homepage

What's Included

  • 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
  • Audit log plugin

Pages

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

Screenshots

Desktop Mobile
Light homepage light desktop homepage light mobile
Dark homepage dark desktop homepage dark mobile

Infrastructure

  • Runtime: Node.js
  • Database: SQLite (local file)
  • Storage: Local filesystem
  • Framework: Astro with @astrojs/node

Getting Started

pnpm install
pnpm bootstrap
pnpm dev

Open http://localhost:4321 for the site and http://localhost:4321/_emdash/admin for the CMS.

Want Cloudflare Instead?

See the Cloudflare variant for a version that deploys to Cloudflare Workers with D1 and R2.

Deploy to Cloudflare

See Also

Description
No description provided
Readme 672 KiB
Languages
Astro 86.6%
TypeScript 5.6%
CSS 3.1%
Dockerfile 2.8%
JavaScript 1%
Other 0.9%