a personal space — journal, work, and things in between.
- Astro (SSR via @astrojs/cloudflare) - pages and routing
- Notion API - headless CMS for blog posts and work/project entries
- GitHub REST + GraphQL API - recent activity feed and contribution stats
- Cloudflare KV - a
key-valuestore used here as a server-side cache layer for both Notion and GitHub data
Each get* function in notion.ts/github.ts checks KV first, falls back to a live API call on a miss, then writes the result back to KV (1hr TTL).
NOTE:
getWork/getBlogPostsare pinned to"Notion-Version": "2022-06-28".getBlogPostMarkdownuses the/v1/pages/:id/markdownendpoint, which uses"Notion-Version": "2026-03-11"
cp .env.example .env # fill in your values
pnpm install
pnpm dev