SHEET 01 + SHEET 02

Web development

One company's whole digital life — the brand, the platform, and the software underneath it.

The Paradox Process

No.
SHEET 01
Role
Full-Stack Developer & Technical Director
When
June 2024 — present
Stack
  • Next.js
  • React
  • TypeScript
  • Tailwind
  • Stripe
  • Sanity
  • PostgreSQL
  • Resend

The problem

A coaching company with a real method — and a digital presence the team had built themselves, well outside their comfort zones, that genuinely carried the business for years. But it had grown heavy to run: rented software everywhere, and a monthly ritual where a senior practitioner hand-assembled a class page, a checkout, an automation, a tag, and a batch of emails. The tools didn't help — Keap couldn't even send an email relative to a custom date. Hours of expert focus going to setup work a system should do.

Before and after

The Paradox Process website, the team's original version compared with the current design
The old siteThe live site today

Drag the slider, or use arrow keys. The right side is the live site at paradoxprocess.org — this is not a mockup.

Look at the headline on both sides: it's the same promise. The message was never the problem — the team knew exactly who they were, and they built that first site themselves, far outside their comfort zone. It carried the business for years, and I admire it. My job wasn't to fix their vision. It was to give it the craft it deserved.

More of the live site

The facilitator certification page on the live site
The facilitator path — four courses, native delivery.
The media and editorial section on the live site
The media library — same brand, different register.

The color rule that holds it together

Two pigments — orange and blue — exist at rest: marks, rules, stamps. Never backgrounds.
Two signals — brighter twins of each — speak only in response: hover, focus, active.
Mixing pigment and signal is the number-one way a brand drifts; the system makes it hard to do by accident.

What I actually did

  • Replaced the monthly setup ritual with one evergreen class system: a human enters the topic, the date, and the price — the listing page, the Stripe checkout, the Zoom session, the reminder and replay emails, even the replay course all generate themselves. Reused on purpose, because hand-rewriting emails every month sounded personal in theory and produced typos in practice.
  • Built the automation engine underneath it — fifteen step types, including the relative-date delay that Keap flatly could not do.
  • Rebuilt the visual language from scratch — warm paper, ink, and a strict two-color accent system with rules for when each color is allowed to speak.
  • Designed and shipped the production platform: marketing site, native course delivery with progress tracking, checkout, email automation, and a CMS — replacing Thinkific and Keap outright. 109 pages and 279 API endpoints at last count.
  • Wrote 27 migration scripts to move every account, enrollment, course-progress record, and video off the old systems with zero data loss.
  • Built the type and color systems so accessibility is mathematical: every tone combination is computed to pass WCAG AA before a human ever picks it.
  • Revived the company’s dormant YouTube channel with a Shorts-first strategy, ran Instagram on the same play, and handled SEO — planning, producing, and scheduling everything myself.

Where it landed

  • Two SaaS subscriptions gone; the company owns its platform.
  • One coherent brand from homepage to checkout to course player.
  • 2,000+ commits of shipped, production code in the current build cycle.

Anpa

Anpa CRM

The machine The Paradox Process runs on.

Built inside The Paradox Process — its first and so-far only tenant.

No.
SHEET 02
Role
Designer & sole developer
When
2025 — present
Stack
  • React
  • TypeScript
  • Tiptap
  • PostgreSQL
  • Drizzle
  • Zod

The problem

After the rebuild, non-technical operators still needed to edit pages, run campaigns, and keep the brand intact without a developer in the room. Off-the-shelf site builders would have undone the brand rules the company just paid for. So the admin became a product of its own.

What's inside

The composer gets the spotlight, but Anpa is a full operator workspace: Today, Contacts, Automations, Tasks, Schedule, Communications, Commerce, Analytics, Operations, Content, and Site — 42 admin screens over 198 internal APIs, with five operator roles and 38 distinct permissions deciding who sees what, behind single sign-on.

Three colors in, four safe tones out

An operator picks three brand colors. The theme engine hands back four complete section tones that are guaranteed readable — any combination that fails gets nudged toward light or dark in 5% steps until it clears WCAG AA. There is no way to publish an inaccessible page, because the bad combinations are never offered.

Worksheet diagram: accent, deep, and paper colors flow through deriveTones() into four guaranteed-readable tones — paper, mist, ink, accent

What it feels like to use

A gallery of 29 section presets, organized by the six jobs a page does: open, explain, prove, price, answer, close.
Autosave with a visible status, draft history with undo and redo, and a polite conflict warning when two tabs disagree.
Inline editing on the page itself — rich text constrained to a safe schema, so pasted chaos can't break a layout.
Anpa's Insert a section gallery — preset thumbnails organized under tabs for the six jobs: open, explain, prove, price, answer, close
The section gallery — presets organized by the six jobs a page does, with live thumbnails rendering real components.
The Anpa composer editing a page: section list, live page preview, and per-section motion controls in the right rail
The composer itself — section list, live preview, per-section motion controls. Captured in demo mode, naturally.

What I actually did

  • Built a page composer with 29 curated section presets across the six jobs a page can do: open, explain, prove, price, answer, close — each with a live thumbnail rendering real components.
  • Wrote the theme engine: pick three brand colors, and the system derives four complete, guaranteed-readable section tones — operators literally cannot publish an inaccessible page.
  • Added the editor comforts people expect from real software: autosave 1.5 seconds after you stop typing, draft history with undo and redo, a polite conflict warning when two tabs disagree, inline editing.
  • Made publishing safe: every published page is an immutable snapshot with a version counter, so draft experiments never touch what visitors see, and rollback is one click.
  • Constrained rich text to a safe, structured schema — dangerous links bounced, pasted chaos rescued into clean paragraphs instead of deleted.
  • Gave it its own name and mark, because it stopped being a settings page and started being software.

Where it landed

  • Operators ship branded pages without touching a developer.
  • Accessibility is enforced by construction, not by review.
  • The roadmap doc says it plainly: "Anpa, the CRM for course programs and coaching organizations." One tenant away from being a product.

Yes, I named the admin tool. Build something from scratch and you get to do that.

Tools I've built along the way

Every tool here exists because I watched someone talented lose an afternoon to something a machine should do. (I include myself.)

  • AI coaching app

    • Vercel AI SDK
    • TypeScript
    • Next.js

    Practitioners needed the AI to sound like them, not like a chatbot.

    A coaching assistant practitioners tune themselves: they rate each AI question as charged or flat, and a seven-dimension style vector — humor, directness, provocation, and so on — adapts round by round. Crisis language stops the session and surfaces the 988 lifeline. Context-efficient by design, so token costs stay sane at scale.

  • Social intelligence pipeline

    • Python
    • YouTube API
    • Instagram API

    Weekly reporting was manual, and dashboards answer the wrong questions.

    Collectors pull YouTube and Instagram data, a taxonomy sorts content into pillars, and a weekly report writes itself — including a clip-intelligence tool that connects the source-video library back to what actually performed. It ran the reporting loop behind the channel revival on the Paradox case study.

  • Checkout funnels

    • JavaScript
    • Stripe
    • Keap

    Class enrollment pages needed to sell without a platform tax.

    Hand-built enrollment and checkout pages with live countdowns, bundle pricing, and CRM integration — the early, scrappier ancestors of the platform work.

  • CodeBlocks

    • TypeScript
    • ts-morph
    • D3

    Understanding a strange codebase is faster as a picture.

    A CLI that scans TypeScript repositories into dependency graphs — flagging alive, orphaned, and ambiguous files — paired with an interactive D3 visualizer.