The blog
The Henners.io blog

HeadsUp, three months on: from a waitlist to open beta
In July HeadsUp was a coming-soon page. Now anyone in Australia can sign up and send their first invite. Here's what got built, what I changed my mind about, and where it goes next.

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.