A personal blog built with Astro using Notion as a headless CMS. Static site generation with React islands for interactivity.
Live Site: brennanmoore.com
- Astro 5 – Static site generation
- React 19 – Interactive components (islands)
- Tailwind CSS 4 – Styling
- Notion API – Content management
- Cloudflare Pages – Deployment
- Node.js 24.x
- Notion integration token (setup guide)
Create a .env file:
NOTION_TOKEN=secret_xxx
NOTION_DATA_SOURCE_ID=xxx
NOTION_PHOTOS_DATA_SOURCE_ID=xxx
SITE_URL=https://your-site.comnpm install
npm run dev # Start dev server at localhost:4321npm run build # Build static site to dist/
npm run preview # Preview build locally| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run preview |
Preview production build |
npm test |
Run tests |
npm run lint |
Run ESLint |
npm run check |
Astro type checking |