My personal site. Writing, notes, photography, and a few other things.
Built with Astro, TypeScript, and Tailwind CSS. Hosted on Cloudflare Pages.
Posts and notes are Markdown files. The content CLI creates them with the frontmatter the site needs, and Astro builds the pages and RSS feeds.
I also manage photos in Capture One. Photo sync reads my collections and JPEG exports, generates images for the site, and stores the metadata in SQLite. Astro builds the photo pages from that database. The images are served from R2, or from local files during development.
Photo pages are currently disabled while I cull and re-edit photos after moving from Lightroom.
The CLI can also publish notes to Bluesky from the same Markdown files. It compares them with existing posts so I can review changes before publishing. There’s a record planner for Refrakt too, though publishing photos there isn’t implemented yet.
Bluesky publishing uses an app password for now. I might add OAuth later.
For the Markdown readers and writers, see notes.ts and posts.ts. The loaders connect those functions to Astro.
With a current version of Node.js and pnpm:
pnpm install
pnpm devpnpm content # Content tools
pnpm build # Static build
pnpm test # Tests
pnpm lint # Lint and type checksSettings are in src/site.config.ts. Photo pages need a local catalog and exported images; see the photo setup.