Things I'm building
An evidence-based, bilingual (EN/es-US) sobriety PWA that also ships as an Android app. Built on Better Auth, Drizzle, and Postgres with web-push notifications and offline (IndexedDB) support, wrapped as a TWA and published to Google Play. Positioned as a general-wellness tool, not a medical device.
AI sourcing assistant SaaS I built while preparing my own sourcing business. Analyzes Alibaba/1688 product screenshots with AI to calculate margins, assess risks, and auto-generate supplier messages. Solo full-stack development across web, desktop, and Chrome extension with Stripe billing, Shopify integration, and 5-language support.
A mental health SaaS I designed around Judith Herman's three-stage trauma recovery model. I built AI-guided journaling with a Gemini-powered crisis-detection safety pipeline (GREEN/AMBER/RED) — deliberately fail-closed on input and fail-open on output, validated by an LLM-judge eval harness with zero tolerance for missed crisis cases — plus peer support circles, Stripe billing, and an Android build via Capacitor, solo full-stack across web and mobile.
A real-time OSINT situational-awareness web app styled as an intelligence watch floor. I aggregated 10+ live public feeds (USGS, OpenSky ADS-B, CISA KEV, NASA, GDELT, CelesTrak…) through a config-driven feed registry with server-side caching, and visualized them across four views, including a Three.js 3D globe, a cyber-vulnerability board, and satellite/orbital tracking.
An open-source, bilingual (EN/ES) web app that estimates which rent law protects an LA renter — City RSO, AB 1482, LA County RSTPO, or just-cause — from their address, plus the current legal increase cap and a rent-increase legality checker. With no public RSO-registry API to lean on, I designed an 'honest estimator' over live LA County Assessor and US Census open data (cross-verified against the county roll), with a four-regime rules engine that leans protective at every ambiguous boundary and degrades to 'pending — confirm with LAHD' rather than ever being confidently wrong. Locked by 222 tests; a profiled indexed-query fallback cut lookups from 13–55s to ~1s. PageSpeed 100/100/100/100, WCAG AA in light and dark.
An Electron command-deck desktop app for developers who manage many projects with Claude Code. It scans git repos under configured folders and surfaces git/session state, staleness badges, and token-cost estimates as cards; 'Open' spawns `claude -r <session>`. I treated Electron security as a first-class concern (contextIsolation, sandbox, argv-not-string-interpolation against command injection) and backed it with 132 tests and a Playwright + axe e2e gate.
A web app that scores your outfit honestly from a single photo — rating color, fit, sizing, shoes, and situational appropriateness, then giving blunt advice. Next.js 16 and React 19 with Gemini 2.5 Flash Lite vision (structured responseSchema output); free, no sign-up, and uploaded photos are never stored. Trilingual EN/KO/ES.
A first-person, photorealistic walkthrough of an old one-bed Taiwanese apartment. A build-free static site that loads Three.js r184 via importmap, with a day/night cycle, door and fan interactions, and PBR textures. The furniture and appliance 3D assets were generated by my own pipeline (3d-asset-studio).
A local Electron dashboard that summarizes the key metrics of many Google Analytics 4 properties on one screen. Sign in once via OAuth 2.0 loopback and it aggregates every GA4 property you can access — active users, sessions, key events — each with a Δ% vs. the prior period. MIT open source with five UI languages; the third of the -deck family alongside DevDeck and MarketDeck.
A local-first Windows (Electron) tool + MCP I built to manage the marketing readiness of my whole ~40-project portfolio on one screen. It scans local git repos and scores each with 14 deterministic signals (README screenshot, demo-URL reachability, SEO meta, JSON-LD, CHANGELOG freshness…), producing a 0–100 score and a traffic light, sorting the least-ready first. No accounts, no telemetry — all local.
A gallery of six procedurally-generated low-poly Backrooms horror creatures, built from pure Three.js geometry — no Blender, no textures. Browse searchable cards, drop a creature into a fog-filled void viewer, and stare too long up close to trigger its per-creature jumpscare. Every creature exports as a reusable .glb.
A tray companion for Discord free users. It auto-compresses clipboard images that exceed the 10 MB free-upload limit (WebP→JPEG→downscale), and since v2.0 replaces the Nitro-gated emoji/sticker/GIF picker with a hotkey popup (WebView2, Discord-style dark UI) — no client mods, no account automation (ToS-safe by design), with APNG→GIF conversion and auto-paste on select while sending stays manual. Python, MIT, five languages.
A tool that turns any YouTube URL into a falling-lane rhythm game you play in the browser. It pulls audio with yt-dlp, analyzes BPM/beats/onsets with librosa to build a chart JSON, then plays it back via the Web Audio API. FastAPI backend + web frontend; personal-use and open source.
A browser simulator for turning car-centric LA into a transit city. It renders lines and 3D vehicle meshes over a real map with deck.gl and MapLibre, backed by Neon Postgres as the data layer. Built with Vite and Zustand.
An AI-native Next.js + Turborepo starter you assemble and own for shipping many MVPs fast — not a rented SaaS boilerplate, not a black-box fork. You wire vetted libraries (Next.js, Drizzle, Better Auth, Stripe, shadcn/ui) with pnpm generators, composing only what you need. Built to be driven by Claude Code via a root CLAUDE.md and a .claude/ directory of skills and subagents. Open source.
An anonymous venting PWA — the successor to Minddump. Built on the shipwright starter with Better Auth, an offline PWA shell, and file upload, with a Google Play release ('Kindling: Vent Anonymously') in preparation.
A five-modality personal generation factory where Claude drives image, video, 3D, voice, and music through MCP tools — generate → machine gate → inspect the thumbnail directly → retry. I consolidated a shared kernel (GPU arbitration, a SQLite asset store, thumbnails), per-modality MCP servers, and a FastAPI + React gallery into a single monorepo via history-preserving subtree merges, centralizing the generation GPU, data, and frontend on one RTX 4080 laptop. Asset lineage and review verdicts live in the DB so an agent's judgment flows back into the library, locked by 300+ tests. It absorbs and succeeds 3d-asset-studio, which supplied the assets for Studio Apartment.
An operations toolkit for driving my 4080 AI server over SSH (via Tailscale). It ships a wrapper that sends PowerShell safely as an EncodedCommand, idempotent ssh-alias setup, and status checks for GPU/ports/Funnel/Caddy — designed so a Claude Code session can operate the box directly. Internal tooling.
A personal-productivity program that synthesizes my favorite character's voice to nag me about my to-dos on a tablet PC. Claude writes context-aware nagging lines, and loudness-normalized character voice clips make avoidance expensive — a 'sulky coach' persona that only gets more persistent the more you ignore it.
A habit-breaking app I built from my own experience with trichotillomania. Detects hand-to-face contact in real time through your webcam and alerts you instantly. Customize detection zones for scalp, eyebrows, cheeks, and more, then track your progress with daily stats and streaks. All video processing stays on your device — nothing is ever sent externally.
A horoscope content platform aimed at the US and Latin American markets. I built a birth-chart calculator on real planetary positions (astronomy-engine) and statically generate zodiac, compatibility, and astrology-learning pages across a three-language (EN/ES/PT) SEO architecture designed to capture organic search traffic.
A web app for discovering places across Greater LA — beaches, hikes, date courses — reachable without a car. I built the full data pipeline (GTFS ingestion, OSM scraping, PostGIS reachability scoring) and ran a self-hosted OpenTripPlanner 2 instance for live multimodal routing. To keep recommendations honest I reconciled straight-line 'nearest stop' estimates against the real router from multiple origins, and deployed the whole thing through a GitHub Actions CI/CD pipeline on Docker.
A multi-user PWA that turns a receipt photo into a tidy budget entry — Gemini OCR extracts merchant, total, date, and category. I scoped every endpoint per user (down to the SSE-stream and image-serving seams), made the usage quota concurrency-safe with transactional row locks, and added a janitor that reclaims OCR jobs stranded by a mid-process redeploy.
A real-physics multiplayer browser game inspired by SpaceX's Mechazilla booster catch. I implemented suicide-burn physics calibrated against public SpaceX data, real-time competition and a leaderboard on an authoritative Colyseus server, and Three.js WebGL rendering with nine camera modes and a bilingual EN/KO UI.
A self-hosted image and video generation platform that uses Claude Code as an automated prompt engineer — turning Korean or English input into optimized prompts and ComfyUI API-format workflow JSON. I built the full multi-user layer around it: a sequential job queue, thumbnail pipeline, and a social gallery with likes and comments.
A Windows tray app for the TP-Link Kasa KL125 smart bulb. I drive the bulb directly over the LAN with python-kasa and built an Ambient mode that samples a selected monitor's dominant color in real time and mirrors it to the bulb — Philips Hue Sync for a single bulb. Built with PySide6 with multi-monitor selection, global hotkeys, a color-preset library, and a bilingual KO/EN UI; credentials live in Windows Credential Manager and it ships as a single-file EXE via PyInstaller.
A WW2 browser FPS/defense game holding the 1944 Normandy cliffs. I built a hybrid battlefield in Three.js — commanding infantry, operating tanks, helicopters and fighters, naval engagements, and an RTS-style supply-truck economy — with PeerJS-based P2P co-op multiplayer and a bilingual KO/EN UI, shipped as a single deployable HTML build.
A local tool that auto-transcribes piano performances from an audio file or a YouTube URL into sheet music (PDF/MusicXML) and MIDI. It extracts notes with a PyTorch piano-transcription model and renders scores through the MuseScore CLI, with a pipeline that still returns partial results when a conversion step fails.
A real-time, participatory web app inspired by the divergence meter in Steins;Gate. It pulls live news feeds from Reddit to nudge a shared world-line value, and lets visitors submit positive observations ("D-Mails") that pull the divergence toward its canonical attractor. I hand-built the nixie-tube / neon-CRT terminal UI.
A local-business review-analysis SaaS: paste a Google Maps or Yelp URL and it scrapes the reviews, analyzes them with AI, and returns scores, keywords, and growth suggestions. I built the full stack — a FastAPI backend that scrapes with Playwright and analyzes with OpenAI, and a React frontend with a React Three Fiber 3D card UI.
A web hub collecting several mini-games plus a standalone Socket.io multiplayer server. It serves five games built on different engines (2D Canvas, Babylon.js, CesiumJS, Three.js): an escape racer, a 3D survival world, a flight sim over real Earth, a desert drifter, and Fryffel Tower. Most recently I built a 3D fry-stacking game on cannon-es physics with real-time 2–4 player competitive multiplayer — each client simulates its own tower while the server relays heights and adjudicates best-of rounds — with pure logic under Vitest and the games under Playwright E2E, gated in GitHub Actions CI.
A comedic PS2-retro construction-management game where a hot-tempered foreman bullies incompetent workers into raising a building. I designed a double-edged-sword loop — pushing workers boosts output but raises their rage, leading to slacking, sabotage, fleeing, or riots — with delegating AI managers (veteran/drill/vibe/intern), deterministic seeded RNG, and pure-logic unit tests. Built on build-free Three.js ESM with a PS2-style render pipeline (vertex snapping, dithering, fog), including a Story Mode (Act 1). Extracted from Mini Games into its own repo.