The source for Kaylee Williams' personal site. I'm a founding engineer at Inth, part of YC P26. I also co-author c15t, the open-source consent layer.
The live site shows what I build. This README explains how the site itself works.
- The site sets no tracking cookies, so it needs no cookie banner. If it did, it would use c15t.
- Astro renders every page. Svelte only hydrates the record crate on
/records. - Data from GitHub, npm, and Discogs comes from their APIs. Checked-in snapshots take over when a token is missing or an API is unavailable.
- The main pages have Markdown mirrors.
/llms.txtand/llms-full.txtindex that content for agents. - Lighthouse results live in
bench/.
- Astro 7 produces the server build. The Vercel adapter handles deployment, and the Node adapter supports self-hosting.
- Svelte 5 powers the record crate on
/records. - Tailwind CSS 4 runs through its Vite plugin.
- The application is written in TypeScript.
- Biome, using the Ultracite preset, handles linting and formatting.
- Bun installs packages and runs scripts.
- Vercel Analytics and Speed Insights collect site and performance metrics.
Install Bun and Node.js 24 or newer. The .nvmrc file pins the Node version.
bun install
bun run devOpen http://localhost:4321. You do not need environment variables. The data loaders use checked-in snapshots when credentials are absent.
| Command | Description |
|---|---|
bun run dev |
Start the Astro dev server. |
bun run build |
Create the production build with the Vercel adapter. |
bun run build:node |
Production build with the standalone Node adapter. |
bun run start |
Build with the Node adapter and serve on 127.0.0.1:4321. |
bun run fmt |
Lint and format with Biome. |
Both variables are optional. Without them, the data loaders use the checked-in snapshots.
| Variable | Used for |
|---|---|
GH_TOKEN or GITHUB_TOKEN |
Higher GitHub API rate limits for OSS activity, stars, and the contribution graph. |
DISCOGS_TOKEN |
A higher Discogs rate limit and access to the private record collection on /records. |
For local development, add them to the gitignored .env file. In production, set them as Vercel project environment variables.
content/ Markdown and JSON content collections
experience/ Roles at Inth and Everfund
projects/ Featured work
site/ Hero, profile, socials, person schema
lib/ API clients, caching, Markdown helpers, and SEO
src/
components/ Astro UI and the Svelte record crate
layouts/ BaseLayout
pages/ Routes, Markdown mirrors, and agent endpoints
styles/ Global CSS and Tailwind layer
public/ Static assets and AGENTS.md
bench/ Isolated Lighthouse benchmark runner
| Route | Page |
|---|---|
/ |
Home with current work, OSS activity, and stats |
/about |
About |
/projects |
Featured projects |
/experience/[slug] |
Permanent redirect to /about |
/connect |
Contact links. /contact redirects here. |
/connect/share |
Shareable QR code |
/records |
Discogs record collection powered by Svelte |
The site publishes its page copy as Markdown for LLMs and answer engines. public/AGENTS.md tells agents where to start.
/llms.txt: concise index in the llmstxt.org format./llms-full.txt: the full profile, including live OSS activity./index.md,/about.md,/projects.md, and/connect.md: mirrors of the main pages with YAML frontmatter./records.md: the live Discogs collection in Markdown./sitemap.xmland/sitemap.md: site indexes for crawlers and agents.
The four mirrored main pages return Markdown when a request sends Accept: text/markdown or uses a recognized crawler user agent.
curl https://www.kaylee.dev/llms.txt
curl -H "Accept: text/markdown" https://www.kaylee.dev/aboutbench/ has its own package file, so its Lighthouse dependencies do not ship with the site. It measures cold build time, output size, and per-page scores. Comparisons live in bench/results/.
cd bench && bun install && cd ..
node bench/bench.mjs <label> # writes bench/results/<label>.jsonVercel deploys main. Run bun run build:node to produce a standalone server for self-hosting.
This is a personal project. All rights reserved. Read the code for ideas, but please do not ship it as your own personal site.