Projects
Five apps. One collaborator.
Outside my day job I build software with AI as my software engineering partner — from live, shareable apps to custom displays to expense report pipelines. Every screenshot below is a real running build.
Drag to spin · click a screen to jump in
Models: Opus 5 · Opus 4.8 · Sonnet 5 · Fable 5
Public web app
EarthPulse
A live climate dashboard wrapped around a 3D globe.
Real-time greenhouse-gas readings, wildfires, temperature anomalies, ENSO, sea level and Arctic ice — all on an interactive WebGL globe with a live day/night terminator. Installable as an offline-capable PWA.
How Claude was used
Built across Opus 5, Sonnet 5 and Fable 5 sessions, with a CLAUDE.md and a running handover.md so each session picked up where the last left off — including a three-attempt hunt for a flexbox min-height bug.
Custom globe shaders
Patched Phong shaders compute the sun’s position for a real-time day/night terminator with city lights, plus two cloud layers advected along a curl-free flow field and prevailing-wind bands.
Never a blank card
A reusable useFallbackData<T> hook chains live API → session cache → bundled snapshot, with visibility-aware refresh.
Edge proxies
Vercel Edge Functions sidestep CORS and pre-aggregate NASA FIRMS global fire points into grid cells server-side.
Honest anomalies
Each temperature point is colored against its own 2001–2020 NASA POWER normal, and ENSO is ranked against every prior year’s same season.
Godot game
LittleSphere
A 3D learning game I built for my two kids.
Kyla and Logan walk around tiny themed planets answering counting, math and early-reading questions at stations along the trail. Designed to work with zero reading or voice-over, and published to itch.io.
How Claude was used
117 of 120 commits are Claude co-authored (Opus 5, Opus 4.8, Sonnet 5). Claude operated the Godot editor and Blender directly via MCP, not just the code.
Walking on a sphere
Per-frame radial gravity toward the planet’s core, with world-space movement locking that eliminated a camera “corkscrew” when walking backwards.
Adaptive difficulty
Hidden per-child difficulty ramps up after first-try successes and eases after misses — persisted across stations, sessions and planets.
Hand-built shaders
River, ice and ocean water shaders, jungle rain and snowfall, confetti and a boat-ride finale.
AI-driven asset pipeline
Claude drove Blender and Godot through MCP servers — sourcing CC-BY models, texturing, exporting and even capturing these screenshots.
Hardware + Python server
Custom Display
A 7″ touchscreen desk dashboard, from firmware to pixels.
An ESP32-S3 touch panel showing Claude Code usage and live agent activity, markets, weather, rain radar, calendar, inbox and to-dos — plus a Mario-style night clock.
How Claude was used
Claude handled hardware bring-up (flash layout, 16-bit RGB bus, I²C touch) and wrote a reusable skill so a future session can set up a fresh panel end-to-end.
“Dumb panel” architecture
The PC renders every 800×480 frame; the ESP32 just fetches JPEGs and posts touch coordinates. Backlight is driven by a response header.
Live agent feed
Global Claude Code hooks push session and sub-agent events to the panel in real time — no polling.
Incremental log parsing
Token and cost totals come from ~/.claude JSONL logs, resumed from stored byte offsets and covered by unit tests.
Drawn from scratch
Radar stitched from map tiles with county vectors, a pixel font and sprites all drawn in Pillow.
Client-side web app
Expense Analyzer
Private, in-browser spending analysis from raw statements.
Drop in PDF or CSV card statements and get categories, trends, top merchants and detected subscriptions — with nothing ever leaving the browser.
How Claude was used
Driven by a CLAUDE.md that routes work across models — an Opus “planner” sub-agent for design and a Haiku “lookup” agent for quick searches.
Subscription detection
Groups by normalized merchant, uses the median charge gap (robust to a skipped or doubled charge) to classify cadence, and flags subscriptions that are overdue.
Statement parsing
Layout-aware PDF parsing with year inference for statements spanning New Year, plus a looser fallback for other banks.
Forgiving CSV import
Auto-detects sign conventions and columns, falls back to manual mapping, and dedupes re-imports.
Privacy by design
localStorage only, with JSON backup/restore — no server, no accounts.
Static site
Modernizing Website
This site — rebuilt from Squarespace to a zero-JS static build.
kylearosen.com rebuilt in Astro with an “Editorial Ledger” design system, metrics-led case studies, and push-to-deploy on Cloudflare Pages. This portfolio page is its newest addition.
How Claude was used
Designed, written and shipped with Claude in a single day; this portfolio — the captures, sanitized demo data and 3D scene — was built by Claude as well.
Zero client JS
Content pages ship no framework runtime; stylesheets are inlined and images optimized at build time.
A real design system
Tokens for paper, ink, teal and copper; Fraunces + Archivo type; one grid shared across every page.
Case studies as numbers
Each engagement framed as challenge → approach → measurable outcome.
A note on data: several of these apps handle personal information. Every capture here comes from a sanitized copy or synthetic demo data — no real statements, inboxes, contacts, holdings or credentials are shown.