Five builds, start to finish.
What the owner was losing, what we built, and what it does now. Five written up in full; the rest of the work is on the homepage deck.
Selected Works
Drag the strip. Open any card.
Figures appear only where the client gave us one to publish.
01
A Mountain Roofing
Roofing estimates that finish themselves, before anyone picks up the phone.
More work
Live · Systems · Brand · Digital
The expensive part was never finding businesses. It was finding the few worth phoning.
Buying a lead list means buying the same names every competitor already called. Most of them do not need what you sell, and you find that out one wasted call at a time.
A Google Maps scraper sweeps a vertical across a list of US metros - dental clinics, restaurants, salons, law firms - and captures name, phone, address, website and Maps link for every listing. It runs city by city with campaign state on disk, so a sweep that stops overnight resumes where it left off instead of starting again. Results land in Supabase and Google Sheets in the same pass, with a local CSV fallback when neither is configured.
It qualifies at capture time instead of collecting everything and sorting later. Every business is checked for one thing: does it have a website. A clinic with no site is not a cold name on a list - it is someone with a visible, expensive gap and an obvious reason to take the call. That single flag turns a scrape into a ranked queue, and it is the reason the list is worth working at all.
- Role
- Design and engineering, solo
- Stack
- Python · Playwright · Supabase · Google Sheets API
- Period
- 2025-26
- Outcome
- An overnight job producing a queue sorted by who has the problem
The work was getting done. Knowing where it stood was the job that never got done.
The leads were in a spreadsheet. The follow-ups were in an inbox. The proposals were in a folder, and whether any of it was working was a question nobody could answer without an hour of copying numbers between tabs.
An operations dashboard: leads pipeline, clients, outreach, follow-ups, proposals, projects, tasks and revenue, each on its own page over a shared Supabase Postgres database with row-level security behind real auth. Around thirty API routes sit underneath. A roster of specialist agents drafts outreach, scores leads, writes follow-ups and assembles reports, and scheduled jobs produce a daily brief and advance the pipeline without anyone opening the app.
Every agent action lands in an approval queue instead of going straight out. The system drafts; a person releases. That one constraint is what makes an autonomous pipeline safe to point at real customers - the failure mode of an unattended AI agent is not a bad draft, it is a bad draft that already sent. It is the same constraint I put on client builds. The lead table is shared with the scraper, so sourcing and pipeline are one system rather than two that need reconciling.
- Role
- Design and engineering, solo
- Stack
- Next.js 16 · React 19 · Supabase · Gemini · Resend · Vitest
- Period
- 2025-26
- Outcome
- One database instead of four places that disagreed
Dashboards, headless builds and interface studies.
Application surfaces where the hard part is hierarchy rather than decoration: what has to be visible at a glance, what can wait behind a click, and what should never have been on the screen at all.
Premium Shopify Storefront
Apex SaaS Business Dashboard
The parts that run when nobody is looking.
Booking agents, CRM sync, invoice pipelines and readiness audits. Unglamorous by design - the measure of these is whether anyone has to think about them twice.
AI Customer Support Agent
AI Receptionist & Booking Agent
Intelligent Enterprise Sync Pipeline
Growth Consulting Dashboard
Identity systems, renders, and the visual work that came before the code.
Brand manuals, poster series, stream overlays, character work and social kits. This is where the eye came from, and it is why the engineering does not look like it was assembled from a component library.
Brand Identity System
Celestial Kitsune Maiden
Kitsune Live2D Model
Battle-Worn Knight Render
Quantum Social Media Kit
Synthwave Summit Event Graphics
How it works
From first call to launch, no black holes.
Four phases, each ending in something you can look at. You always know what is happening and what it costs.
- 01Free · 20 min
Discovery & scope
We start with a free fit call. If the problem needs research before anyone can price it, we scope paid discovery first.
- 0250% books the slot
Fixed-price spec
Then you get it in writing: scope, exclusions, timeline and a fixed fee. No hourly billing, and no line item you have not already read.
- 03Weekly preview
Live staging build
Every week brings a written update and a live staging link. You approve each milestone before we move on to the next one.
- 04100% ownership · 30 day aftercare
Handover & ownership
We launch, verify production, and transfer everything: repository, domains, accounts and keys. You own all of it.
Disciplines
One team, multiple mediums.
- 01
Design
Colour, type and spacing are defined once as variables and everything else reads them.
- Design tokens
- Fluid type
- Dark and light
- Interface systems
- 02
Develop
One language across the server, the client and the tooling, so there is no seam where types stop being checked.
- Next.js
- React
- TypeScript
- Tailwind CSS
- Vite
- Node.js
- Python
- 03
Create
Identity, illustration and motion, made in the same hands that ship the build.
- Identity
- Illustration
- Motion
- Art direction
- 04
Experiment
Rendering techniques built for their own sake, then put to work on this page.
- WebGL
- Shaders
- Canvas
- Creative coding
Who is behind it
Design as lived experience

- Years in operations
- 3+Years in operations
- Languages shipped
- 2Languages shipped
- Projects delivered
- 25+Projects delivered
We start with the problem the business actually has. Then we design the thing, and build the thing, and stay to see whether it worked.
We are a small team of designers and engineers, and the two disciplines sit together rather than at opposite ends of a handover. Nobody here owns half an answer and passes the rest along.
Three years inside real business operations came before any of this. That is the part that decides what gets built: I know which failures cost a customer, which ones cost an afternoon, and which ones nobody notices for six months.
Next.js and TypeScript, end to end
One language across the server, the client and the tooling, so there is no seam where types stop being checked.
- Next.js
- React
- TypeScript
- Tailwind
- Node.js
- Python
The system drafts, a person releases
Every automated action lands in an approval queue. The failure mode of an unattended agent is not a bad draft, it is a bad draft that already sent.
Verified tech stack
- Next.jsRuntime
- React 19Runtime
- TypeScriptLanguage
- JavaScriptLanguage
- PythonLanguage
- Tailwind CSSInterface
- Three.jsGraphics
- WebGLGraphics
- PlaywrightAutomation
- CloudflareInfrastructure
- SupabaseAuth and data
- PostgreSQLRelational store
- GSAPTimeline motion
- FastifyService layer
- ResendTransactional mail
- LiveKitRealtime voice
How we work
Four things you can hold us to.
Booked in sequence, not in parallel
Work is scheduled so a build has a team on it rather than a share of one. A project competing with two others takes three times as long and reads like it.
Tokens first, components second
Colour, type and spacing are defined once as variables and everything else reads them. That is what makes a theme swap a data change instead of a rewrite.
- Design tokens
- Fluid type
- Dark and light
You keep all of it
Repository, domains, accounts and keys transfer at handover. No page builder to keep paying for, and nothing you need us for to change a phone number.
Budgets, not good intentions
Heavy work is lazy loaded and gated behind reduced motion and save-data. Every effect on this page has a cheap branch that runs instead.
- Lazy WebGL
- Reduced motion
- Save-data aware
How to read these
Three labels, no blurring.
Client engagement
A business paid for it and their customers use it.
Working demo
We built it to prove the approach works. No client attached.
Built for my own pipeline
We run our own studio on it every day.