/ home  ›  apps  ›  platform

Platform & Infrastructure

The substrate under everything on this page: a Go identity core, native app shells, a self-hosted server fleet, a Cloudflare edge — and deploy gates that verify what actually shipped, not what was intended.

Build the boring parts once.

Every product on this site — and the private client work behind it — stands on the same substrate, built the way I'd build it at work rather than the way side-projects usually get built. The core is a shared Go platform library: authentication and identity, session management, storage, migrations, and mail, written once, hardened once, and consumed by MemberDex, the PlayProtocol / LAXProtocol backend, and a private client portal.

Around the library sit matching client shells: a SwiftUI app shell that gives every iOS app the same login, biometric unlock, and 2FA flows; a React admin shell for the web consoles; and native Kotlin / Jetpack Compose counterparts on Android. The payoff is compounding: each new product starts with identity, storage, admin, and ops already solved — the marginal product costs a fraction of the first one.

Authentication is the platform's spine.

🔑

Passkeys / WebAuthn

Phishing-resistant, passwordless sign-in with discoverable credentials — Face ID, Touch ID, Windows Hello, hardware keys. Signature-counter regressions (a cloned authenticator's tell) are refused and audited.

🏢

Enterprise SSO

OIDC (Okta, Entra, Google Workspace, Auth0) and SAML 2.0, configured per organization against a verified email domain, with just-in-time provisioning that can never escalate a role.

📱

TOTP & JWT Sessions

Per-account TOTP 2FA with brute-force lockout. JWT session tokens with the parser pinned to one algorithm — no algorithm-confusion surface.

🗄️

Embedded SQLite

A pure-Go SQLite driver — no CGO, single-binary deploys, and databases that back up and restore as ordinary files. Boring on purpose.

📦

S3-Compatible Blob Store

One storage interface over S3-compatible object storage, serving user files and drill video alike through time-limited signed URLs minted only after an entitlement check.

📜

Audit Everything

Every privileged action lands in an audit log. Idempotent migrations, security tests, and rate limits ship in the library, so every consumer inherits them.

Every engagement gets a front door.

Client work runs through a portal built on the same platform core — no shared passphrases, no email-attachment archaeology. Each engagement gets its own branded workspace: a dashboard of project updates, file exchange, tools, and scheduling, behind per-user accounts with magic-link sign-in for clients and the full identity stack underneath.

🗂️

Project Feed & Files

A running feed of updates with threaded replies, and file exchange backed by object storage — metadata in SQLite, bytes in R2, everything scoped to the engagement.

📅

Meetings, Self-Hosted

Booked calls open as video rooms on the fleet's own Jitsi — a client meeting never routes through a third-party conferencing vendor.

🎛️

Per-Client Dashboards

Each workspace carries its own arrangement of tools and links — the portal is one product wearing a different face per engagement.

🧪

760 Checks, Counted

A Playwright end-to-end suite drives the real UI — and its check count is pinned in a manifest, so a truncated run can never read as a pass.

Two layers: a fleet I run, an edge I rent.

Application backends run on a small self-hosted fleet — Linux servers behind a Caddy reverse proxy, services managed by systemd, scheduled work under launchd on the build side. The fleet also carries its own developer infrastructure: self-hosted Git hosting (Forgejo) for every private repo, and self-hosted Jitsi video conferencing for client calls, so meetings don't route through a third party.

Static marketing sites live on the Cloudflare edge: Pages for the sites themselves, Pages Functions for the small pieces that need code at the edge, KV and R2 where client tooling needs state and file storage. Every site ships a hashed Content-Security-Policy — no unsafe-inline — and CSP violations report to a first-party collector running as an edge function, because shipping visitor-adjacent data to a third-party collector would sit badly next to the privacy pages.

The same principle runs all the way down to the type. Every typeface is self-hosted — the font files are vendored into the origin and served from it, so no page load fetches type from anywhere else: no Google Fonts, no font CDN, nobody learning a visitor's IP address from a request that visitor never chose to make. The vendoring step discovers which families a site actually uses from its own markup rather than from a hand-kept list, because the hand-kept list is the part that goes stale — the first measurement of this site found three families and the true answer was five, two of them loaded only by pages deeper in.

Backups are age-encrypted and verified by restoring them — a nightly round-trip with a checksum compare, because a backup that has never been restored is a hope, not a backup.

The toolchain itself is pinned the same way: a Nix flake provides the identical Go compiler and analysis tools on every host — the dev machines, the CI runner's Linux VM, and the deploy cross-compile target — so "works on my machine" isn't a category of bug that exists here.

Checks that can actually fail.

The habit that ties the whole estate together: a claim isn't done until a check enforces it — and a check isn't trusted until it has been watched failing. The same discipline applies to the code, the deploys, and the marketing copy.

Privacy claims are rendered, not recited

Headless-browser gates re-render every marketing page the way a real visitor's browser would — catching what no static check can see, like scripts injected at the edge — and fail if a third-party origin appears that the site's published privacy claims don't declare, or if a promise on the page has quietly stopped being true.

Headless Chrome Python harnesses

Deploys verify the destination

Every site deploy ends by fetching the live origin and comparing it against what was built — because "the upload succeeded" and "visitors get the new bytes" are different facts. Deploy bundles are gated by an allowlist: any file not explicitly declared public fails the deploy instead of shipping by accident.

Live-origin verification Bundle allowlists

Guards are tested by mutation

A new guard isn't believed until the suite has been run against a deliberately broken version and gone red — for the predicted reason. A check that has never failed is indistinguishable from a check that can't.

Mutation testing Positive controls

Releases are proven at the artifact

Mobile release lanes inspect the actual signed bundle — its manifest, its compiled bytes — before promotion, and store-listing copy is checked against the served product so marketing can't drift from reality.

The full toolbox.

Languages

  • Go — backends, platform library, tooling
  • Swift / SwiftUI — iOS, watchOS, macOS
  • Kotlin / Jetpack Compose — Android, Wear OS
  • TypeScript / React — admin consoles
  • Python — verification harnesses, build tooling
  • Rust — systems & graphics work off the clock

Platform Library

  • WebAuthn / passkeys, SAML 2.0, OIDC
  • TOTP 2FA, JWT sessions, audit log
  • Embedded SQLite (pure Go, no CGO)
  • S3-compatible blob storage, signed URLs
  • Stripe billing integration

Fleet & Edge

  • Linux + systemd, Caddy reverse proxy
  • Self-hosted Forgejo git hosting
  • Self-hosted Jitsi video conferencing
  • Cloudflare Pages, Pages Functions, KV, R2
  • Hashed CSPs, first-party violation collector
  • age-encrypted, restore-verified backups
  • Nix flake — one pinned Go toolchain across dev, CI, and deploy

Further Afield

  • Rust + Bevy — including maintaining vendored tvOS ports of the windowing and platform crates underneath it
  • Go + Ebiten for 2-D work, bridged to Apple platforms with gomobile
  • Swift QuickLook extension for CAD file preview