One developer. Software that reads as a firm.

One person carries your project from architecture to production — so nothing is lost between the person who heard you and the person who builds it. You get software your clients take seriously, shipped, documented, and owned outright.

See the work

How I build.

A buyer can’t inspect code before hiring. You can inspect method. This is mine.

1.0

Architecture

Before code, I draw the boundaries: who owns each piece of data, what runs on a schedule versus on demand, where a feature gates by plan. ConsultBase runs as a multi-tenant SaaS — sixty Postgres tables with row-level security on every one, scheduled jobs living in the database rather than bolted on beside it, tier logic enforced at the query layer instead of hidden in the interface. Get the shape right first, and features stop fighting the system they live in.

ClientVercel EdgePostgres60 tables · RLSpg_cronedgeproxy · auth · regionapiserver actions · validationdbpostgres · RLS · pg_cron

2.0

Design system discipline

A visual system is a set of decisions made once, then enforced. Modernizing ConsultBase meant an editorial serif, a cool palette with gold used sparingly enough to mean something, hairline borders in place of shadows — and the unglamorous half: 137 lines of duplicated header markup consolidated into one component, and an off-scale opacity value caught in production because the scale existed to catch it. Consistency isn’t taste. It’s maintenance.

3.0

Database craft

Data outlives interfaces, so the schema gets the most careful thinking. Parenting Plan Pro generates legal documents, where a silently altered clause is a real-world harm — so statutory language lives in a protected-text registry, and the build fails if generated output drifts from its source by a character. The same instinct runs at lower stakes everywhere else: row-level security on every table, migrations that only roll forward, review states modeled in the schema rather than in anyone’s memory.

plansidpkmatter_idstatusreviewsidpkplan_idfkstateclausesidpkplan_idfkregistry_keyfkprotected_textkeypkstatutechecksum

4.0

Deploy discipline

Shipping is a checklist, not a feeling. Nothing counts as deployed until the remote, my local branch, and the live build agree on the exact same commit — verified by SHA, not by refresh-and-squint. Database migrations land in coordination with the rebuild that expects them, never before, never after. History is append-only; no force-pushes, so every production state stays reconstructible. Boring, deliberately. The excitement in a deployment should be the feature, not the deploy.

Selected work.

A short list, deliberately. Each of these is production software someone relies on. Read them for consistency of judgment, not variety of logos — and look for the seams: where booking meets calendar, where a document meets the statute it quotes.

The Parenting Plan Pro landing page rendered on desktop.

Stack

Next.js · Supabase · react-pdf · Stripe · source-fidelity CI gate

Approach

The plan's legal language lives in a protected-text registry, and the build fails if rendered output drifts from its source by a character. One codebase renders jurisdiction-aware plans across US/Canada, UK, and Australia school-calendar systems. Contested arrangements — supervised visitation, step-up schedules — are gated behind professional mediation, so self-authored legal language never reaches a branded, court-ready PDF.

Parenting Plan Pro

Legal document generation where the text is the product, and protected accordingly.

The Civic Strategy Partners site rendered on desktop.

Stack

Next.js App Router · Tailwind · server-side form API · Vercel

Approach

A credibility site for a practice that sells judgment, so the detail work went where a federal buyer actually looks — the footer carries live UEI, CAGE, and NAICS identifiers beside the SDVOSB certification, because that audience verifies before it inquires. Motion is engineered rather than avoided: the gradient wave animates on background-position across an oversized canvas, so it never jumps at the seam. This is the second generation of the site for the same client, staged behind a passphrase gate for review before it took the root domain.

Civic Strategy Partners

Site for a fractional GSA MAS advisory practice, built for an audience that checks your CAGE code.

The Revoix product site rendered on desktop.

Stack

Next.js · prerendered on Vercel · no analytics · no cookies

Approach

Static-feel front-end for a language platform. Backend-free — the served HTML has zero third-party requests, no analytics, no cookies, not even Vercel Insights. Locale routes carry independently linkable metadata (title, description, OG) even though the body copy renders client-side.

Revoix

Product site for an on-device speech and situational-awareness tool used by police and emergency responders. Four languages, zero tracking by design.

The FM24 public site rendered on desktop.

Stack

Next.js · static export · dropped onto legacy Apache

Approach

Static export shipped into infrastructure with no Node runtime — the client hosts on a legacy Apache stack, so the entire built site is prerendered files. Backend-free. Bilingual DE/EN with build-time i18n. GDPR-conformant cookie consent gate.

FM24

Multilingual public site for a German security and facility-management software platform, shipped as a static build into the client’s existing server environment.

Preview coming soon.

Stack

Next.js · Supabase RLS · Resend · no cookies

Approach

Row-level security lets an anonymous visitor write a booking request and read nothing back, so one guest's dates and contact details are never visible to another. Overlapping requests are allowed by design — two parties can hold the same week as on_request and the owner arbitrates from the admin panel. Bilingual FR/EN with French primary. No cookies, no analytics, no payment processing — a direct-booking site without a platform in the middle.

Villa L’Estagne

A booking site for a Mediterranean villa, built to the property’s standard rather than a template’s.

Lab.

Not client work — demonstrations. Built quickly to answer a specific question: what does capability look like before a contract exists?

The NC Housing Terminal choropleth map zoomed into North Carolina with a ZIP-code tooltip visible.

NC Housing Terminal

A Bloomberg-style housing map of North Carolina: every ZIP code rendered as a live choropleth of Zillow home-value change.

Stack

Mapbox GL · Next.js · static data pipeline · Vercel

Approach

The colour scale is clamped and diverging, so a given red means the same thing in Asheville as it does in Charlotte — unclamped, a single outlier county flattens the rest of the state into noise. Zillow’s raw series is reshaped into ZIP-indexed data by a build-time pipeline, so the map ships static and the browser never waits on an API. Labels are zoom-gated and detail resolves on hover, which keeps several hundred polygons legible rather than crowded.

Designed, built, and deployed in one evening.

More in Labs

Contact.

The best fit is bounded work built with care — portals, internal tools, AI systems, and the businesses that need them done properly. Email is fastest; I reply within one business day.