03Case study

Independent Engineering

Building products, tools, and infrastructure to test ideas firsthand.

Where
Self-directed
When
Ongoing
Scope
iOS · Web · Infrastructure
Written
8 of 8 sections

Context

Products built outside the day job, end to end: design, code, infrastructure, distribution, and support. Nobody to escalate to and no one else to blame.

Problem

Leading engineers is easier when you still know what the work costs. Independent products are where that knowledge stays current, and where ideas get tested before they are recommended to anyone else.

Constraints

Evenings and weekends. One engineer. Real users who notice when something breaks, and in Stagger's case a tournament date that does not move.

Role and responsibilities

Everything: product, design, engineering, operations.

Technical approach

  • collect.A personal cataloging app for iPhone and iPad. No accounts and no servers: the catalog lives on the device and syncs through the owner's iCloud.
  • StaggerA private golf tournament PWA: live scoring, an append-only drinks ledger, and an offline queue for a back nine with no signal.
  • zckr.devThe AI engineering playground: what is being built now, what shipped, and what died trying.
  • acker.cloudThis site. Static Next.js, a validated content snapshot synced from Notion, and a contrast gate that blocks the build.
  • Homegrown infrastructureProxmox, RAID arrays, Linux containers, and enterprise networking at home. The test bench behind everything else.

Key decisions and tradeoffs

Offline is the normal caseStagger
Every score save tries the server first and parks in IndexedDB when that fails. The queue separates transient failures from permanent ones, so a rejected write surfaces instead of retrying forever.
The balance is never storedStagger
Purchases and consumptions are an append-only log and a balance is a fold over it. The audit trail is free and the rule that matters is a database constraint, not application code.
Privacy by architecturecollect.
No account and no servers of ours. Data that never reaches a backend cannot leak from one.
Numbers are derived, never typedacker.cloud
Every count this site prints is computed from the published snapshot, so a figure cannot outlive the content that justified it.
Accessibility blocks the buildacker.cloud
Every colour pair is measured against WCAG thresholds before the build runs. A failing ramp does not ship.

Outcomes

collect. is in public beta on TestFlight. Stagger runs the tournament every year. acker.cloud ships as fully static HTML with every route prerendered.

Lessons learned

A real deadline is the best architecture review there is. The weekend happens on its date whether or not the sync works, and there is no rolling back a tournament.

Stack

  • Swift
  • Next.js
  • TypeScript
  • Supabase
  • Postgres
  • Proxmox