Happy holidays ✦ · Full-Stack Engineer · Altrue

I've worked every layer of the stack.

I started on rooftops aiming satellite dishes. Today I build multi-tenant platforms at Altrue — from the Terraform underneath to the React people click — and publish open-source tools for the XRP Ledger on the side. Everything in between, I've done for a living.

Hands-on
15+ years in tech
Shipping in
TypeScript · Next.js
Focus
Multi-tenant platforms
Open source
5 packages on npm
The stack, top to bottom

Seven layers. One career.

Most engineers learn the stack from the top down. I climbed it from the bottom up — coax and copper, then the last mile, then machines, people, products and platforms. It's why I debug like a field tech and design like someone who's had to support what ships.

  1. L07
    AI · 2026 —

    The model proposes. The clinician authorizes.

    Altrue · Amazon Bedrock

    AI-assisted clinical documentation and analytics on a Bedrock gateway — retrieval, streaming workspaces, synthetic data for UAT. Before that: preparing and validating training data for LLM fine-tuning in Python.

    BedrockRAGStreamingSynthetic dataPython
  2. L06
    Platform · 2026 —

    A database per tenant, so one fix never leaks.

    Full-Stack Engineer, Altrue

    Clinical workflows clinics run on — registry, scheduling, SOAP charting, billing, LiveKit telehealth — over tenant-scoped MongoDB, claim-feed ETL, and AWS infrastructure I write as code.

    Next.js 16React 19MongoDBTerraformECSFHIR
  3. L05
    Product · 2023 — 2026

    Features, shipped, reviewed, deployed.

    Web Developer, Tech Joy Software · Remote

    Client web apps in React, Next.js, TypeScript and Tailwind — plus the Docker, Traefik and GitHub Actions plumbing that got them to production. Led code reviews; mentored juniors. (First paid web work: WordPress sites at WebInvent, 2018.)

    ReactNext.jsTailwindDockerTraefikCI/CD
  4. L04
    Teaching · 2019 — 2021

    If you can't explain hooks to a career-changer, you don't know hooks.

    React / JavaScript Instructor, Nucamp · Detroit

    Taught adult learners React, Redux, Node, REST and JWT auth. One-on-one code reviews, debugging sessions, and a lot of capstone projects pushed over the finish line.

    MentoringCode reviewNodeRedux
  5. L03
    IT operations · 2021 — 2023

    Whole fleets of devices. Zero patience for downtime.

    Regional Technology Coordinator, Distinctive Schools · Detroit

    Kept MacBooks, iPads and Chromebooks running across multiple charter campuses. Wrote the policies, built the ticketing workflow, wired Google Workspace and Jamf into scripts, and audited for the failures that kept coming back.

    JamfGoogle WorkspaceNode scriptsPolicy
  6. L02
    Logistics · 2011 — 2018

    Routing packets, the analog way.

    Rural Letter Carrier, USPS

    Seven years owning a rural route end-to-end. Every day a delivery deadline, every stop a lesson in ordering, batching and not losing anything — good training for queues and pipelines.

    ReliabilityOwnershipThroughput
  7. L01
    Physical · 2003 — 2011

    Where the signal actually starts.

    Cable & Satellite Technician · Self-employed

    Ran my own install-and-repair business for cable, satellite and internet. Scheduling, billing, customer education — and the instinct, still useful daily, to check the cable first.

    CoaxSatelliteSmall business
Now · UltraVisit at Altrue

Big systems, held to evidence.

UltraVisit is a multi-tenant platform — EMR, scheduling, billing and video visits — used by clinics, local governments and employers. I ship across it end-to-end, and wrote the domain specification that describes how it actually behaves.

1,900
files in the TypeScript server I work in
450+
test files backing it
18
bounded contexts in the domain spec I authored
49
architecture decision records, each traced to code
Tenancy
One database per customer.

Tenant and org-node scope ride on every record. Access control fails closed.

AI
The model proposes; the clinician decides.

Bedrock-backed documentation and analytics, never signing anything on a human's behalf.

Spec
Every rule, file and line.

The domain spec cites the code that enforces each claim — no folklore, no guessing.

Next.js 16React 19TypeScriptNode.jsMongoDBTerraformAWS CDKECS · ALB · CloudFront · WAFCodeBuild → ECRPlaywrightLiveKitHIPAA · PH Data Privacy Act
Toolbox

Schema to screen, and the server under both.

01Front end

React, Next.js App Router, TypeScript, Tailwind, Radix UI, Redux

02Back end

Node.js, Express, REST, GraphQL, Strapi, OAuth2, JWT, RBAC

03Data

MongoDB (multi-tenant), PostgreSQL, MySQL, Prisma, ETL & reconciliation

04Infrastructure

Terraform, AWS CDK, Docker & Swarm, Traefik, Nginx, Cloudflare, GitHub Actions

05Testing & workflow

Playwright end-to-end, Git, GitHub, JIRA, Confluence, Scrum

06AI

Amazon Bedrock, retrieval & streaming gateways, fine-tuning data prep, Python

On the side

Things I build because I want to.

Works in progress, mostly about keeping things on your own hardware: speech that never leaves your Mac, and signing keys that never touch the internet.

Prototype

Highlight to speech

A macOS menu-bar app: select text in any app, press ⌘⇧Space, and a floating player reads it aloud sentence by sentence. The first sentence starts in about a second and a half, using a speech model running on the Mac itself.

Swift · SwiftUI · Ollama
Working app

Phonon reader

A local reader for long text, up to a whole book, read a section at a time. Its text cleaner skips URLs and code instead of reading them out: on one test document it cut the audio from 41 seconds to 15.

Node · No dependencies · Local speech
Design + spike

Offline XRPL signer

A signing library for keys kept on an air-gapped device, with an online client doing everything else. The first spike signs inside QuickJS and produces a signature byte-identical to xrpl.js.

TypeScript · XRP Ledger · QuickJS
Contact

Got a hard system to build or untangle?

Send a note and it lands in my inbox. I read everything and reply from my own address — usually within a couple of days.

You'll get a short confirmation email. Your address is only used to reply.