Unbounded
Headlines and my name on the home page. Bold and Black.
© 2022 The Unbounded Project AuthorsSIL Open Font License 1.1
Colophon · How this site is made
I wrote the plan, designed every page on a canvas, and built the site with Claude Code as my pair. It runs on Astro and Node, reads its content live from MariaDB, and takes its look from Ryvanse, the design system I made for my streaming brand.
This page lists the parts, how they fit together, and who made the pieces I didn't.
The stack
Every page is built on the server when you ask for it, so a note I post shows up within half a minute, with no deploy.
The browser gets HTML, one stylesheet and a few small scripts: the theme switch, the ⌘K palette and the rearrangeable tiles on the home page.
How it was built
This site went from a written plan to a live server in about a day. AI did a lot of the typing. The decisions, and the review of every change, were mine.
I wrote the implementation plan in the Claude app: the pages, the stack, the design register and the launch date. Everything after it worked from that plan.
The home page, About and Writing were each laid out on a Claude Design canvas in the Ryvanse system, in both themes, before any markup existed.
Claude Code drafted the pages, the database layer, the publishing API and the deploy script. I checked each change against the plan and sent it back until it matched.
My house rules live in an Obsidian vault the AI reads before each session and adds to after: US English, nothing touches production without me, and nothing is committed until I say so.
Build log · from git, Central Time
Design system
Ryvanse is the identity I built for my gaming and streaming brand: a night ground, a five-color spectrum, hard offset shadows and a streak of terminal. Here it runs in a quieter register. The big display type appears once a page, pink marks the main action, and tiles only get the sticker shadow on hover.
The site never copies a color by hand. A small script turns the design system's token files into CSS before every build.
ryvanse.tokens.jsonA copy of the Ryvanse tokens, untouched: colors, type, spacing, radii and shadows.
ry-bealey.tokens.jsonThe work register: semantic roles, each with a light and a dark value, plus long-form type.
scripts/build-tokens.mjsRuns before every dev server and build. Resolves each role to a Ryvanse color and fails loudly on a name it doesn't know.
src/styles/tokens.cssCustom properties in their own cascade layer. Light is the default; dark swaps the semantic roles. Never edited by hand.
#ff3d9aPrimary action#ff8f2eWarnings#c8ff3cHUD and billing#33e3e8Links and web#a77bffSupport and AIIn light mode the fills stay the same, and text in an accent switches to a darker ink that passes 4.5:1 on white.
Type
Self-hosted as WOFF2, so no font request leaves this site. The share cards use WOFF copies of the same faces, because satori can't read WOFF2.
Headlines and my name on the home page. Bold and Black.
© 2022 The Unbounded Project AuthorsSIL Open Font License 1.1
Everything you read. Drawn by the Braille Institute so letters stay distinct at small sizes. Regular, Italic and Bold.
© 2020 Braille Institute of AmericaSIL Open Font License 1.1
Labels, readouts and code blocks. Medium and Bold.
© 2020 The JetBrains Mono Project AuthorsSIL Open Font License 1.1
Shipping
Changing how the site works and posting to it are separate paths, so writing a note never needs a deploy, and a bad build never takes the site down.
SafeA failed build stops before the swap, so the live site stays as it was.
No deployNothing in the repository changes when I post.
Companion app
There's no web admin on this site. I publish from Publisher, a native SwiftUI app that talks to the site's publishing API. It lists, edits and creates notes and case studies, previews Markdown the way the site renders it, and uploads images.
An iPhone app for posting notes on the go joins it next, in the same Xcode project.
Credits
Source
The code for this site is public, README and all.