Auckland · Building Syscribe · CPO at BettrData · Open to investor conversations.

Log

Everything I write, build, read, and ship. Reverse chronological, no categories that aren't earned.

····

Filtered to Syscribe · show all

Jun 30, 2026
Build· Syscribe

A Greenfield Education

I've brought many products from idea to market across multiple segments and have been close to every part of launch: prioritization, GTM strategy, late nights polishing features. But this is the first time I've done the actual greenfield environment setup and deployment. I'd assumed it would be relatively straightforward since I'd seen it done so many times, so I knew what the process should look like. While that's true, the doing is another matter. It's the BJJ version of watching a veteran black belt roll: the sequence looks smooth until you're the one on the mat, and you find out how much detail and technique you hadn't even registered. The gap between what I assumed and what's real is humbling, and the part I find most compelling.

I'm comfortable with local development for fast feedback and full-stack control; with prototyping tools such as Replit, Claude Code Artifacts, etc.; and with existing production systems that are stable and well-instrumented. Syscribe is in none of those states right now, and this is an education. Bugs that stayed silent on my machine only surface once the services are split across environments, environment variables that lined up locally stop lining up, and several of these go wrong at once, so a single symptom rarely points to a single cause. Most of the work is figuring out which failures are real and which are just downstream of the others.

Staging is nearly there. If the pace holds, I should have full production running within a week or so.

May 30, 2026
Build· Syscribe

Four bugs wearing the same error message

Syscribe staging is now web-hosted—something I can open in a browser and click around, instead of running only on my laptop. Getting there cost the better part of a few days, and the lesson wasn't in any single fix. It was that one symptom can sit on top of a stack of unrelated causes, each masquerading as the last.

Every failure looked identical from the outside: something that should have had a value was reading as undefined. A sensitive flag on a public key. A production auth instance refusing to run on a preview domain. An API verifying tokens against the wrong secret. And the worst one—a web app that, missing its API URL at build time, quietly fell back to localhost:3001, so the deployed site was cheerfully trying to reach a server on my laptop. That one failed by succeeding at the wrong thing.

Four distinct bugs, one symptom. Each time I fixed one, the next surfaced looking the same, and the tempting read was "my fix didn't work" rather than "I've peeled off a layer and found another."

What actually closed it wasn't the four patches. Underneath them were a couple of decisions we'd made for simplicity that turned out to be directly opposed to what the services require. We'd run a single auth tenant across every environment; Clerk's production instances flatly refuse to operate on a preview domain. We'd leaned on a localhost default so local dev needed no extra config; a deployed build has no localhost to fall back to. Neither conflict was visible until we'd dug past the identical symptoms to the root—the sameness of the failures is what kept the architectural problem hidden.

The fix was structural: split the auth tenants by environment, and make the build refuse to run without a real API URL instead of guessing one. The boring artifact that records it—a short doc saying which secret lives where—turns "why is staging down again" into a lookup instead of an investigation.

May 22, 2026
Note· Syscribe

Railway, GCP, and the cost of managed everything

While verifying Syscribe's staging deployment on Railway last week, Google Cloud blocked Railway's entire account mid-debug. The platform went down for hours and left our staging environment in a half-broken state we couldn't fix because the dashboard itself was degraded. The proximate issues on our side were small (an unset env var, a hardcoded port mismatched against the routing config), but they were hard to diagnose against a flaky control plane. Six hours on what was probably thirty minutes of actual fixable work.

Managed services like Railway, Vercel, and Neon let a solo founder ship at a pace self-hosted infrastructure can't match. The cost is that when one degrades, you lose the observability and recovery options you'd have if you owned the substrate. A single-vendor PaaS built on a single cloud creates concentration risk that compounds in exactly the moments you need the platform most.

Longer-term, Syscribe should be portable enough to fall back to another cloud when a single provider goes down. Not today, not at this stage, but it belongs on the list.

May 15, 2026
Build· Syscribe

Syscribe · Phase 5

Currently working through the actual deployment of the product to live production and staging environments instead of just local development. There have been a lot of decisions about when to build versus when to use services. For the most part, I've decided to use existing SaaS/PaaS services since the free tiers are often sufficient for the current state, and every layer except the product itself is already a commodity. One might think this would be the easiest part (how hard could it be to set up a Railway or Neon?), but it's proven to be pretty brutal for two reasons:

  1. There is a lot of infrastructure required to get Syscribe to actually work as a product; I think I'm at 10 distinct services for infrastructure between web hosting, worker management, data persistence, etc.

  2. Getting all of that infrastructure to work together is an education in credential management and surgical code changes.

All this has me thinking that there's another business opportunity here: something less all-inclusive than Replit or Bolt, but more comprehensive than the one-business-per-service experience that I'm using. This may be worth exploring after Syscribe.