Shrinkcord and FlickPicks are on my resume. The rest are older client work and experiments.
Compress JPEG, PNG, and WebP in the browser before you upload to Discord. Nothing leaves your machine. There is also a NestJS side project with BullMQ and Redis for queued jobs, progress events, pause, resume, and retries.
Next.jsReactTypeScriptTailwind CSSWeb WorkersNestJSBullMQRedis
Movie and TV discovery app with combined search, detail pages, trailers, and an anonymous browser-scoped watchlist.
ReactTypeScriptViteFastAPITMDBCloudflare Workers

Practice Spanish while you browse. This Chrome extension replaces selected eligible English words and phrases with Spanish, then saves encountered vocabulary for later review.
TypeScriptViteManifest V3Chrome Extensions API
Watch public-domain classics together in synchronized rooms with live chat and a TV Guide-style schedule.
ReactTypeScriptViteTailwind CSSFastAPICloudflare WorkersDurable ObjectsWebSockets

Social investing site with live quotes and a loud community. I was on the team that migrated toward Next.js and shipped a homepage ticker I prototyped.
ReactNext.jsTypeScriptREST APIsReal-time data
Browser Pong with same-keyboard, CPU, and invite-a-friend modes. Remote matches share one simulation via a Cloudflare Durable Object so both players stay in sync.
ReactTanStack StartTypeScriptViteTailwind CSSCloudflare Workers
Verifiable data intelligence for protocols
ReactTypeScriptWeb3Data pipelines

Grow and manage your freight business
ReactTypeScriptGraphQLRESTRuby on Rails

Robots for Life Scientists. Labs in 40+ countries trust Opentrons to help automate their workflows. We offer 60-day risk-free returns & flexible payment options.
ReactPythonElectronHardware integration