Posts & projects
Write-ups from the desk and the workbench! Dev projects, physical builds, and notes in between!
Introducing HeadsUp: invite pages that get everyone there
I'm starting a second project. HeadsUp turns any plan into a beautiful invite page, sent by text, with RSVPs that take care of themselves. Coming to Australia first.
One schema, two jobs: generating runtime validation from your types
The schema is the source of truth at runtime too: the field definitions that infer your TypeScript types also generate the Zod validator that guards every write.
The authorizer I didn’t have to write (yet): guarding Scaffy’s admin routes with Cognito
The router post left every route public. Here’s how Scaffy locks down the admin writes: a single Cognito authorizer that runs before the Lambda does, the custom Lambda authorizer I expected to write and didn’t, and the one case that will make me write it after all.
Why a catch-all API Gateway route made me write my own router
Scaffy sends every request through a single API Gateway proxy route into one Lambda, which means the Lambda has to route itself. Here’s the sixty-line router I wrote instead of reaching for a framework, and the precedence problem that made me do it.
One config, two lifecycles: making Scaffy’s AWS adapters swappable
Every Scaffy adapter is really two programs that never call each other and run hours apart. Here’s the deploy-time / request-time split that makes the whole CMS pluggable.
Introducing Scaffy: a headless CMS that costs cents to run
I'm building a serverless, developer-first CMS you self-host on your own AWS account. Define your content in TypeScript, deploy once, pay almost nothing.