First commit. ff48ab39a Milestone
"first commit." An Express server, a package.json, and a hope. The repository starts.
Every entry below corresponds to a real commit, a real infrastructure event, or a real incident. The dates aren't rounded. If you want the narrative version, read Our Story. This page is for skimmers.
"first commit." An Express server, a package.json, and a hope. The repository starts.
RS256-signed JWT tokens injected into HLS playlist segment URLs. The first video frame ever served by TinyGuard was secure by construction — no hot-link-able URLs, no exposed camera credentials, no IP whitelisting drama.
By the end of day two, the system accepted push-based camera registration and ran behind Caddy. The push-camera path is what eventually became the device-setup one-line installer.
The six cameras in Laura's daycare came online in MediaMTX, paths prefixed with the tenant ID. Laura could see her own classrooms on a phone for the first time without going to a closet.
Care entries with photo capture; parent-facing portal with tokenized clip-sharing; first version of Stripe-based tuition billing. The "six tools Laura was juggling" problem starts collapsing into one screen.
The 5 GB/mo data-transfer cap on Neon's free tier capped HTTP 402 on every database query. Whole API went down. Upgraded to the Launch plan ($19/mo, 50 GB cap) within the hour. Followup discipline: no agent runs pg_dump or full-table reads against prod outside the backup workflow.
The Neon staging branch — used by api-vitest CI shards — quietly consumed 30+ GB of data transfer in the first half of May, pushing us over the 50 GB Launch cap. C601 deleted the staging branch on May 18 after Larry C542 moved api-vitest to per-job postgres containers. Forward velocity now projects ~19 GB/mo with comfortable headroom.
The Ryzen test rig in Del's office pinned a CPU core at 100% for three days during a libsvtav1 calibration sweep. Heatsink discolored. Fans had been at supersonic the whole time. We tuned the encoder preset, replaced the heatsink paste, and added a CPU watchdog daemon (tinyguard-cpu-watchdog.sh) that demotes cameras to H.264 passthrough under sustained load.
The Pi originally reached the API through a WireGuard VPN running on EC2. Cloudflare Tunnel does the same job with zero servers, zero attack surface, and zero dollars. We cut the Pi over and shut WireGuard down. (We miss WireGuard. It was a good piece of software. We don't miss running it.)
Row-Level Security forced on 398 facility-scoped tables. Application code touches the database through the app role, which is subject to tenant_isolation policies — a stray WHERE clause cannot leak across tenants. Cross-tenant reads go through an explicit BYPASSRLS admin role used only by auth / device / super-admin paths.
Cameras pump native H.264. MediaMTX takes the feed once. Live goes out as H.264 passthrough through Cloudflare Calls' WebRTC SFU — Pi sees one viewer per camera no matter how many parents watch. Record forks off and AV1-encodes per camera (av1_nvenc on the Ryzen rig, libsvtav1 preset 13 on the Pi) and segments to R2 every hour. ~1/3 the storage of H.264 for the same quality.
The production API moved fully to Cloudflare Workers. The prod EC2 instance — which had been running Hono on Bun behind ALB — was terminated. AMI retained for 30 days as a panic-button revert. We never pressed it.
The staging EC2 instance was used as a self-hosted GitHub Actions builder. RunsOn ephemeral runners (and later philips-labs JIT runners on demand) replaced it. The instance was terminated. AMI retained 30 days, then deleted (S278). All retained AMIs gone by May 15.
The CF Worker + Pages staging project, the staging DNS, the staging Git branch, the staging workflow, and the staging block in wrangler.toml all removed in one commit per Del's directive. Main now ships direct to prod. CI runs against per-job Postgres containers instead of a shared staging branch.
The 12 dev agents (Billy, Frank, Tim, Sam, Doug, Chris, Larry, Bob, Magenta, Luther, Al, Maya) move off git-only coordination onto a Cloudflare Durable Object with native SSE fanout. Sprint-number allocation becomes atomic. Cross-machine claim latency drops from multi-minute git-pull/push lag to sub-second.
2,325 API routes across 1,762 unique paths. 91+ database tables. 1,225 regression sentinel files containing 35,537 individual assertions. 12 specialized AI dev agents. 6 cameras in our living room, still. Sunshine Day Care has stopped using five of its six legacy tools.
0 paying customers. By design. Five founding-partner spots open. Price locked for as long as you're a founding partner. Pi 5 hardware $299 one-time. Cancel anytime.
If something on this page reads like spin, the commit SHA is right there. Look it up. The git log is public.
If you want the part of the story that doesn't have a commit attached — Laura, the daycare, the parent who asked for the footage — read Our Story.