Personal site built with Astro 5, content collections, and a custom UI layer.
- Astro 5
- Tailwind CSS v4
- DaisyUI
- Pagefind for on-site search
src/
content/ # Collection content (markdown + local assets)
blog/
notes/
talks/
now/
uses/
photography/
home/
about/
contact/
homelab/
changelog/
content.config.ts # Astro content collection schemas/loaders
pages/
index.astro
blog.astro
notes.astro
talks.astro
photography.astro
changelog.astro
now/index.astro
uses/index.astro
[page].astro
[collection]/[slug].astro
layouts/
BaseLayout.astro
MarkdownLayout.astro
TimelineLayout.astro
components/
styles/global.css
scripts/
sync-obsidian.mjs
public/
favicon.svg
robots.txt
resume.pdf
npm install
npm run devnpm run build
npm run previewnpm run build generates the Astro output and runs Pagefind against dist/.
Pagefind needs a built index. To test search while running dev server:
npm run build:search
npm run devThis writes the index to public/pagefind/ (git-ignored).
- Markdown content lives under
src/content/<collection>/. - Collection schemas and frontmatter validation live in
src/content.config.ts. - Use
scripts/sync-obsidian.mjsto sync from an Obsidian vault (requiresOBSIDIAN_PATHin.env).
- Put assets in
src/content/...when you want Astro/Vite optimization. - Put assets in
public/when you need exact, unprocessed files (for example PDFs or files that should bypass optimization).
- Code: MIT (
LICENSE) - Content: CC BY-NC 4.0 (
src/content/LICENSE)