I build production systems end to end: a 300-table ERP monorepo, self-hosted security tooling, WebGL showcases, and MCP servers that drive Adobe apps.
Selected Projects

A registry of AI-generated interface designs, stored as files and served as a shadcn registry so any of them installs into another project with one command. Each design carries the brief that produced it, and the whole set exports to standalone HTML.

The most complex system I have built. A Turborepo ERP monorepo (staff app, customer portal, mobile, docs) over a 300+ table PostgreSQL/Drizzle schema, with end-to-end tRPC, type-safe drizzle-zod validation, auth, i18n, and Playwright E2E coverage.

Brand, storefront and catalog tooling for a Soweto-made Shweshwe passport holder. A live Shopify theme, a scripted catalog pipeline in Python, and a deployable pitch site used to settle the design direction before any of it was built.

Self-hosted attack-surface monitor. Continuous asset discovery and nuclei vulnerability scanning behind a dashboard, as an own-your-data alternative to ProjectDiscovery Cloud.

A local-first reading of your own communication exports: who you actually give time to, which threads drift, and which patterns a model thinks it found. Every finding carries a measured error rate and a human verdict that overrides the model in both directions.

Local-first meeting memory for macOS. Records system audio and microphone, separates who spoke with pyannote diarization, and transcribes on-device so nothing leaves the machine. Ships with an iOS companion.

Terminal mission control for every repository on the machine. Git state, dependency drift and per-project checks behind a zero-dependency JSON API and an Ink TUI that needs no build step, with an optional browser dashboard.

Deployment alerts on the phone the moment a build goes green or red. A Cloudflare Worker verifies the webhook signature and fans out to push, behind an Expo app carrying deployments, build logs and projects.

A macOS menu-bar reading of AI subscription limits, reset windows and spend across providers, each pulled from its own first-party endpoint rather than scraped, so three dashboards collapse into one glance.

AI-powered numismatic analysis. Identify and grade coins from photos using vision models and forensic OCR passes, in a cross-platform Expo app.

Scroll-driven 3D showcase where precious-metal coins melt and reform into one another, with a technical HUD and hover inspection.
A seamless loop of a 6.7-million-point sand simulation, swirled into a flower by a pyro velocity field and rendered in Karma. Graded from linear EXR so the specular highlights roll off instead of clipping.

MCP servers that drive After Effects and Illustrator through ExtendScript, generating and rendering compositions end to end from a config file or an AI agent.
What I Work On
Product engineering
Monorepo applications with one unbroken type chain from schema to UI.
Data and backend
Relational schemas at scale, validated at the edge of every call.
Interface and motion
Interfaces designed in code, where type, color, and motion are one system.
Automation and AI
Agents and MCP servers wired into real tools rather than demos.
Writing
All postsConstraints instead of reviewers
A reviewer catches a mistake once. A constraint catches it forever, including from people who never met you. Which layer should enforce an invariant, and where the approach stops working.
Reporting what you did not check
Between the people doing the work and the people funding it sits someone who has to produce confidence without being able to verify anything. That is where uncertainty gets laundered into fact.
Managing what you cannot read
A manager who cannot evaluate the work has to evaluate the appearance of it. Micromanagement, reorganisations, and the pattern where the strongest engineer gets the hardest treatment all follow from that one substitution.
Simulate rather than animate
An animation is a recording of a decision. A simulation is the decision, still running. Three browser experiments that took the second route, and what each one cost.
Wiring an ERP for French e-invoicing
The September 2026 deadline is not a PDF problem. The seams that survive a vendor change, and the gates that stop a bad deploy transmitting.
I built a tool to check whether I was imagining it
Twenty-one months of my own messages, two detectors, and a hand-labelled sample to measure them. The tool found what I expected. Then measuring the tool took part of it back.
Post-mortem of a one-person build
Eighteen months, eleven applications, one committer, and what the git history recorded.
Inheriting a nearly finished project
What "already largely done" turned out to mean, measured in the files I was handed.
An append-only fiscal journal for NF525
Proving to a French auditor that your records were never altered, and what that does to your release process.
Connect
Reach me at juniegrat@gmail.com