skip to content

work

projects

  • an ai assistant that lives in imessage. text it an assignment, it schedules the reminder and follows up.

    hard part. serverless functions die after each request, so a delayed reminder can't just sleep. a next.js route handles the webhook, a separate always-on worker consumes a redis/bullmq queue and fires reminders on time, with recovery on boot so nothing is lost if the worker restarts.

    also. claude agent with a tool-use loop (7 tools), webhook dedup on message guid, e.164 phone normalization, 20-message rolling history, and reminders that would land overnight pushed to 9am in the user's own timezone with a guard so the shift can never push past the due date. follow-ups escalate over five rungs, each checking whether you already replied.

    typescript · next.js · node · postgres (prisma) · redis · bullmq · anthropic api · docker

  • watches a full class at gsu and texts you the second a seat opens.

    hard part. gsu's banner registration api has no public docs and returns empty results with a 200 status if you call it out of order. captured the real request chain from browser dev tools, then rebuilt the session-cookie handshake in code.

    also. tiered polling with a redis surge flag, idempotent alerts so nobody gets texted twice for the same opening, and per-watch rate guards.

    typescript · node · redis · bullmq · postgres

    part of nudgebuddy.netlaunching august 2026
  • upload your degreeworks pdf and it tells you what classes you're actually eligible for, then builds a schedule.

    hard part. prerequisites are free text like "(csc 2720 or dsci 2720) and either math 3020 or math 3030 with a c or higher". wrote a resolver that turns that into and/or groups against a 13-level minimum-grade ladder, then walks the chain to work out what you're actually eligible for. claude writes the schedule, but the engine pre-filters the catalog down to courses you're cleared to take first, so it can only pick from a legal set.

    also. live section data from the banner self-service json api behind a session and term handshake, professor ratings from the ratemyprofessors graphql api, two school-specific adapters feeding one shared normalization layer, disk-backed cache.

    python · fastapi · react · anthropic api · graphql · pdf parsing

  • pulls internship postings straight from companies' ats boards and classifies them with claude.

    hard part. linkedin lags job boards by a vendor-documented 6 to 48 hours, so the pipeline goes to the source: 50 companies' own ats boards every 3 minutes, deduped by normalized fingerprint, each posting run through a claude classifier against a rubric. cut about an hour of daily manual filtering to a 30-second glance.

    also. four ats integrations, three currently exercised. two schedulers run at once, modal crons and github actions, kept from stepping on each other by a run lock in postgres.

    numbers. 50 ats boards · every 3 min

    python · modal · github actions · supabase (postgres) · next.js · anthropic api

    githubin daily use
  • iphone app that scans a room with lidar and measures it, built in a day and a half.

    hard part. measures by fitting planes (ransac + pca) to thousands of mesh points and reports every number with an honest confidence interval. the geometry math lives in a pure swift core under 14 unit tests, which caught an eigen-solver bug that was silently corrupting results.

    numbers. 14 unit tests

    swift · arkit · lidar / roomplan · simd · xctest

    githubprototype
  • mirrors your iphone screen to a tesla's in-car browser over wifi. built with one other dev.

    hard part. it worked perfectly on his machine and silently failed for everyone else. he had hard-coded a local network address. fixed by resolving it dynamically at runtime.

    swift · swiftui · replaykit · haishinkit · rtmp

experience

  • dec 2024 to jul 2025

    • sole engineer. took a local tire shop from no app to a published ios app.
    • swiftui app with in-app tire ordering and roadside assistance scheduling.
    • cloudflare workers backend so stripe secret keys stayed server side, never in the client. firebase auth and firestore for accounts.

    numbers. 300+ users · 100+ orders · 5.0★

  • summers 2021 and 2022, springfield, va

    • resolved client it and help desk requests through a ticketing system.

skills

languages
python · typescript · javascript · swift · sql · java · c · c++
frontend
react · next.js · tailwind · swiftui
backend
node · express · flask · rest apis · postgres (prisma) · redis · bullmq · background workers · serverless · webhooks · stripe
ai
anthropic claude api · openai api · agentic tool-use loops · structured json output · validation and guardrails
tools
git · github actions · docker · supabase · firebase · modal · vercel