Control
Control is a web-based digital production app: a freehand environment for real-world web production, where designers place elements by eye rather than by layout rules. It is my biggest project to date. I work across both halves of it — the geometry engine that makes freehand editing feel precise, and the server that turns a finished project into a live site on its own domain.
The editor
I designed and built the geometry engine — shape manipulation, coordinate-space transformations, snapping and intersection detection, and the other primitives that make freehand editing feel precise instead of approximate. On top of it sits a custom SDK, so a published site renders editor output independently of the editor itself.
Architecture — clean architecture and SOLID, enforced by structure
The server is organised in four layers, and the dependency rule is enforced by directory rather than by convention. Use cases depend on narrow interfaces they declare themselves; they never learn which database or cloud provider is on the other side.
export interface UploadFrameFilePort {
uploadFrameFile(key: string, buffer: Buffer, contentType: string): Promise<void>;
}Ports are narrow and single-purpose. The video decoding worker takes UploadFrameFilePort & DownloadAssetToFilePort in its constructor and never learns that S3 exists — which is the whole of dependency inversion and interface segregation, stated in one signature.
Publishing infrastructure
Publishing a Control site to a custom domain provisions real infrastructure automatically. ACM issues the TLS certificate, CloudFront serves the site with edge configuration in a key-value store, CodeBuild runs the build and distribute jobs, and S3 holds assets and build artifacts. Domain ownership and DNS propagation are verified before cutover, so a site never goes live pointing at nothing.
Async and realtime
Commerce and integrations
I own the payment and accounting layer: Stripe subscriptions, plans and quota usage. Around it sit Auth0 for identity, a GitHub App for exporting a project to a repository, esbuild for bundling custom components, and Sentry with structured logging for observability.
