Skip to content
All work
Unannounced productWork in progressJune 14, 2026

A platform build in progress, and the stack under it

A substantial product we are building right now. It is not announced, so there is nothing here about what it does or who it is for - only the engineering: the stack, the services it runs on, and how the build is run.

In progress
Status
Not announced, not launched
iOS, Android, web
Platforms
One TypeScript codebase
Docker on Hetzner
Runtime
Caddy, automatic TLS
Push to main
Deploys
Typecheck and tests in CI first

The challenge

The product has not been announced, so this is not a case study and does not pretend to be one. No description of what it does, no screenshots, no launch date.

What is worth publishing is the shape of the work, because the stack and the practices are the part a prospective client is actually assessing when they read a page like this.

What we did

One TypeScript codebase covers iOS, Android and web, built with React Native and Expo and shipped through EAS. State and data fetching sit on TanStack Query and Zustand, with the animation and drawing work handled by Reanimated and Skia. Platform-specific code exists only at the native seams, behind an adapter contract, so the interface layer never branches on which device it is running on.

The API is Fastify on Node with Prisma over PostgreSQL, Redis for fan-out and ephemeral state, and Zod validating every boundary. Real-time features run over WebRTC through a mediasoup SFU. There is a server-rendered admin console for the operational side.

The supporting services are deliberately boring and bought rather than built: Clerk for authentication, Stripe for payments on the web with RevenueCat handling app-store billing, Resend for transactional email, and web push for notifications. Each one is a problem we would rather not be maintaining.

It runs as Docker Compose on a single Hetzner box behind Caddy, which handles automatic TLS through Let's Encrypt. Push to main and GitHub Actions typechecks, tests against a real Postgres service container, then deploys. Mobile builds go out through EAS.

The outcome

In progress, and honest about it. The system is deployed, exercised daily and not launched: payments are wired but still in test mode, it is one box with no redundancy, and the hardening a public launch needs is on the list rather than in the code.

When it ships we will write it up properly. Until then this entry exists so the work is not invisible, not so it can be claimed as a result.

Ready to build something that lasts?

Tell us what you are trying to ship. We will tell you how we would approach it - scope, stack, and timeline - before you commit to anything.