Products & Systems

Full-stack builds with automation at the core.

Every project combines API-first development with integrations and automation so teams ship faster and operate with confidence.

Products & systems at a glance

10 builds

Atlas SDI Report Engine

Read breakdown

Determination and rendering engine behind California statutory hazard disclosure covering the full range of disclosure products, built over a PostGIS and GeoServer spatial data infrastructure.

Stack: Python/FastAPI, PostGIS, GeoServer

Integrations: Celery, Prefect, WeasyPrint, FEMA NFHL, Terraform/AWS ECS

Read the case study

Atlas NHD Customer Portal

Read breakdown

Order-to-delivery portal for hazard disclosure reports: address search with APN disambiguation, entitlement gating, checkout, and PDF delivery.

Stack: Next.js, TypeScript, Tailwind

Integrations: Zustand, JWT auth, portal-admin API, Atlas SDI report queue

Read the case study

ReadMindMe Bible Study Platform

Read breakdown

Personal full-stack RAG platform: scripture-aware AI Q&A, social community, prayer journaling, devotionals, and a full admin console.

Stack: FastAPI, PostgreSQL/pgvector, Redis

Integrations: OpenAI GPT-4o, Google OAuth, TOTP, APScheduler

ACE Clinical Placement Platform

CRM-synced booking platform with location search, automated onboarding flows, and document packs triggered on placement milestones.

Stack: Next.js, Laravel, TypeScript

Integrations: Mapbox, Clerk, PandaDoc, Pipedrive

Onboarding is templated, bookings stay in sync with CRM records, and coordinators see placement status without manual reconciliation.

Roadworthy Inspection Platform

Booking-to-inspection pipeline integrating payments, job creation, and lifecycle comms in one reliable flow.

Stack: React, Node.js, TypeScript

Integrations: Stripe, ServiceM8, Brevo, Figma QA

Bookings reliably trigger payments, job templates, and lifecycle emails — cutting manual cleanup and eliminating sync failures.

Emergency Resource Information System

Real-time resource management for responders with dispatch dashboards, movement audit trails, and RBAC.

Stack: Laravel, Inertia, Vue

Integrations: Inventory, dispatch workflows, reporting

Teams locate and dispatch resources faster with clear accountability — reducing coordination failures during incidents.

Read the case study

Emport Employee Management

Unified HR platform linking attendance, payroll, and leave workflows with role-based access and audit exports.

Stack: Laravel, React, MySQL

Integrations: Payroll exports, role management, notifications

Attendance, leave, and payroll stay aligned with approvals and exports — removing manual reconciliation between HR and finance.

Boostlab Digital Storefront

Conversion-focused storefront with Shopify backend, Checkout.com payments, and Meta Pixel on key funnel steps.

Stack: React, Shopify, Checkout.com

Integrations: Shopify, Checkout.com, Meta Pixel

Customers get a smooth checkout, orders sync cleanly to Shopify, and attribution is accurate — reducing cart drop-offs and support load.

LogiWare Inventory Platform

Centralized inventory and shipment management with movement history, fulfillment dashboards, and staged rollouts.

Stack: ASP.NET, Angular, SQL Server

Integrations: Shipment tracking, product flow monitoring

Teams see inventory and shipment status in one place — reducing manual reconciliation and enabling faster fulfillment decisions.

NDA

Private SaaS Platform — LegalTech

6 internal production systems: document generation, anti-piracy fingerprinting, a court-record lead classification engine, multi-party dispute scheduling, a containerized scheduling service, and a Wear OS rule engine for mediator workflows.

Stack: React, Node.js/Express, TypeScript, Supabase

Integrations: n8n, SurveyJS, BullMQ, Docker, Wear OS

See full breakdown

Featured breakdowns

Context, decisions, and outcomes

Three builds in full — the problem each one solved, the decisions that shaped it, and what shipped. The rest are summarized above; happy to walk through any of them.

Context

Atlas SDI Report Engine

Every residential property sale in California legally requires a Natural Hazard Disclosure. Producing one means checking a parcel against dozens of state and federal hazard datasets — flood, fire severity, seismic, landslide, liquefaction, dam inundation, airport noise — and emitting a document in a statutorily prescribed format. A slow report is an inconvenience; a wrong one is legal liability.

Your Role

Primary developer on the determination and reporting pipeline

Outcome

The full range of statutory disclosure products in production. Report generation moved from synchronous request-time rendering to a queued pipeline with warmup caching.

Frontend

Server-rendered PDF templates; report map and details pages consumed by the customer portal

Backend

FastAPI async Python over PostGIS/GeoAlchemy2, SQLAlchemy 2.0, Celery queue for async report orders

Infra

Terraform-defined AWS — ECS Fargate, RDS, ALB, Secrets Manager, ECR — plus Prefect flows promoting datasets from on-prem NAS to AWS

APIs & Integrations

GeoServer WMS/WFS, FEMA NFHL with local-copy failover, FAA ADHP, CAL FIRE FHSZ, USGS 3DEP, libpostal via gRPC

Key Decisions

Bounded an unbounded warmup fan-out with a per-worker semaphore, then removed the redundant work underneath: shared httpx client, LRU basemap cache with async-lock dedup, and rendering on a ProcessPoolExecutor. Fixed worker crashes that had PIDs accumulating to 80.
Zero-downtime dataset promotion via atomic table swap that carries dependent sequences and applies additive schema changes only behind an explicit flag — never silently.
Failover to a locally held NFHL copy when FEMA is unreachable, so an upstream government outage degrades freshness rather than halting report generation.
Seventeen design specs and ten implementation plans written before the code, with report templates pinned by markup-contract tests — including an explicit HTML escaping contract for the cover page.

Context

Atlas NHD Customer Portal

Escrow officers and agents ordering a hazard disclosure need to find one specific parcel — often from a partial address, sometimes with several APNs matching — then pick the right report type, and receive a PDF they can attach to a transaction. Getting the wrong parcel means the wrong disclosure on a legally binding sale.

Your Role

Sole developer — architecture, build, and QA

Outcome

Full order-to-delivery flow in production, and a marketing site rebuilt to Figma with the portal ported onto it.

Frontend

Next.js App Router with route groups, an AuthGuard app shell, Zustand stores, and a Tailwind component system built to Figma frames

Backend

Typed API client over the portal-admin JSON API and the Atlas SDI report endpoints

Infra

Multi-stage Docker with Next.js standalone output, non-root user, and a health endpoint; env-driven proxying to the SDI

APIs & Integrations

JWT auth with refresh, per-user report access limits, auto-generated escrow numbering, email delivery

Key Decisions

Address search resolves through a single backend endpoint with typeahead and structured fallback, after removing a third-party address vendor — the backend handles fuzzy matching natively.
Entitlement gating enforced at the order boundary rather than the UI, so per-user report limits cannot be bypassed by navigating directly.
Report type labels come from a backend catalog rather than a hardcoded frontend map, so adding a report type does not require a frontend release.
Routing restructured into route groups with a shared AuthGuard shell, separating the public marketing site from the authenticated portal.

Context

ReadMindMe Bible Study Platform

Personal project to push production-grade RAG end-to-end. A Bible study app where users ask theological questions and receive scripture-grounded answers from a 14-stage pipeline that retrieves verses via pgvector similarity across 36,819 embeddings, enriches with Greek/Hebrew morphology, cross-references, and historical context, then personalizes responses using per-user memory and active prayer requests.

Your Role

Solo build — architecture, AI pipeline, backend, data modeling, DevOps, security

Outcome

Production-shaped backend (~3,400 LOC AI service, 20 routers, 25 services, 33 migrations, ~40 tables) demonstrating applied RAG, domain modeling depth, and operational maturity.

Frontend

Mobile/web client and admin dashboard as separate repos within the monorepo

Backend

FastAPI async Python, SQLAlchemy 2.0, Alembic (33 migrations), Pydantic v2

Infra

Docker Compose orchestrating 12 services with seed runners, profiles, and reset paths

APIs & Integrations

OpenAI GPT-4o / GPT-4o-mini / embeddings / moderation, Google OAuth, JWT + refresh-token rotation, pgvector, Redis, APScheduler, SlowAPI

Key Decisions

Two pgvector spaces — Bible verses for RAG retrieval and per-user memories for personalization — with hybrid fallbacks (vector → keyword → Nave's Topical → community-voted topic-to-verse) so retrieval never fails silently.
Tiered model selection (GPT-4o for answers, GPT-4o-mini for background memory extraction and rolling session summaries) plus parallel context retrieval across 10+ enrichment datasets in isolated DB sessions for throughput.
Two-schema Postgres design separating static bible (24 read-only tables, 603K cross-references) from versioned app data, with refresh-token family revocation, admin TOTP via Fernet-encrypted secrets, content moderation, audit log, feature flags, and an AI kill switch.
Under NDA

Private SaaS Platform — LegalTech

Full-Stack Developer · 6 Internal Systems · Active Production

No company name, links, or screenshots. Descriptions cover system architecture and outcomes only.

01

Dynamic Document Generation Pipeline

Legal forms are complex — static templates break the moment data changes. Built a form-driven pipeline where users complete a SurveyJS questionnaire embedded in the storefront, with answers auto-saving as they go. On submission the data triggers an n8n workflow that merges it into a Word template, converts to PDF, and delivers it by email. Paired with an internal admin app — built on the SurveyJS form builder — where staff manage forms, templates, and bundles without a developer, with all writes routed through a resource-style API rather than direct database access.

ReactViteSurveyJSSupabasen8n

Zero manual document handling, and non-developers can ship new form types.

02

Anti-Piracy Document Fingerprinting

Self-help legal documents are trivially resold once they leave your system. Built a two-part fingerprinting subsystem: a Node/Express/TypeScript microservice that stamps formatted footers into .docx files over a REST API (bold, italic, color, font, alignment), and a companion service that injects per-purchase identity — user ID, email, timestamp — into the generated PDF's metadata via pdf-lib. Both are called from the document pipeline, so every delivered file is uniquely traceable to the buyer.

Node.jsExpressTypeScriptpdf-libDocker

Every delivered document carries an invisible, per-buyer fingerprint.

03

Court-Record Lead Classification Engine

Daily public court-record exports arrive as zipped, caret-delimited flat files with separate lookup tables for party types, case types, and judges. Built a Node/Express/TypeScript backend that parses the feed, filters to active family-law matters filed within 180 days, detects trigger events in the docket — service returned, motion to withdraw — and classifies each unrepresented party into one of four lead profiles with priority tiers: newly filed, recently served, dropped by counsel, or simply unrepresented. Leads are enriched with human-readable labels and batch-upserted behind a CRUD API.

Node.jsExpressTypeScriptSupabasen8n

A raw daily court feed becomes a prioritized, deduplicated lead queue with no manual triage.

04

Multi-Party Dispute Scheduling System

Dispute negotiations require all three parties — creator, receiver, and mediator — to agree on a meeting time. Built a scheduling system where a creator proposes a date, the receiver accepts or declines, and on agreement all three parties are notified automatically. Designed for legal dispute workflows where neutral coordination matters.

ReactNode.jsSupabaseGoogle Calendar

Three-party consent model with automated notifications on agreement.

05

Containerized Scheduling Service

The scheduling workload outgrew a single process once reminders, confirmations, and calendar sync all needed to survive restarts. Split it into an Express API and a separate BullMQ worker over Redis, with Postgres for state and migrations applied automatically on container start. The whole stack — API, worker, database, cache, Traefik reverse proxy — ships as a documented compose deployment with a written production runbook.

Node.jsExpressBullMQRedisPostgresTraefik

Background jobs survive restarts; the full stack deploys from one documented runbook.

06

Mediator Rule Engine with Wear OS Integration

Mediators need to trigger timed actions during sessions — reminders, check-ins, delays — without interrupting the flow. Built a rule engine with three rule types: instant (fires immediately), delay (fires after a set timer), and cron (fires on a set schedule). Rules are configured in a frontend dashboard, mapped to named buttons, and surfaced on a Wear OS watch so the mediator can fire any rule with a single button press. Also includes a voice command system for natural-language scheduling.

ReactNode.jsWear OSAndroid

Frontend rule configuration → one-tap execution from a watch during live sessions.