Daniel Kim's personal site & blog — a bilingual (EN/KO) Astro static site and public digital garden for AI-for-knowledge-work, automation, and media-tech / OTT / DRM topics.
- Live: https://danielkimdev.com
- Stack: Astro (static output) · TypeScript · content
collections (Markdown/MDX + Zod) · self-hosted fonts via
astro:assets· Shiki code highlighting · deployed to Cloudflare Pages. - Full brief:
dev-references/astro-site-prd.md(goals, IA, i18n model, design system, schemas). Design tokens:dev-references/DESIGN-minimax.md.
Requires Node >=22.12.0 (see .nvmrc).
pnpm install
pnpm run dev # local dev server at http://localhost:4321
pnpm run build # static build → ./dist
pnpm run preview # serve the production build locally
pnpm exec astro check # type-check + content schema validationsrc/
components/ UI + page components (Header, Footer, Card, Tag, TOC, …;
shared page bodies HomePage/AboutPage/PortfolioPage/BlogIndexPage)
layouts/ BaseLayout (canonical shell), BlogPost (post layout)
pages/ routes — EN at root, KO under /ko/ (+ rss.xml, ko/rss.xml)
content/ blog/{en,ko}, portfolio/{en,ko}, timeline/ (content collections)
data/ non-collection content (home hero, about bio/skills)
i18n/ dictionaries (en.json/ko.json) + utils (t(), localized paths)
styles/ tokens.css (design tokens, light + dark) + global.css
utils/ blog routing, reading time, SEO/JSON-LD, RSS
public/ static assets (_headers, favicon, og-default.png, /images)
English is the default locale served at the root (no /en/ prefix); Korean
is served under /ko/. Every page exists in both locales. UI strings live in
src/i18n/{en,ko}.json (key parity is compile-enforced); content strings live in
the collections / src/data. See the PRD §7 for the full model.
The site is a static build deployed to Cloudflare Pages at the apex domain
danielkimdev.com (Cloudflare Registrar), no base path.
- Git integration (recommended): connect the repo in the Cloudflare dashboard,
framework preset Astro — build command
pnpm run build, output dirdist. Pushes to the default branch deploy automatically. - Direct (manual):
pnpm run build && pnpm exec wrangler pages deploy ./dist(requireswrangler login).
Config lives in wrangler.toml (pages_build_output_dir = "./dist").
Security headers + long-cache for hashed assets are in
public/_headers.
See AUTHORING.md for how to add a blog post, portfolio item,
or timeline entry (frontmatter templates + the EN/KO translation-pairing convention).
HANDOFF.md holds the current state and next steps;
WORKLOG.md is the append-only history. The build was executed in
the staged plan under dev-references/plans/.