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

5
Shipped projects
195
Commits
82%
Co-authored with Claude
25k+
Lines of code

Models: Opus 5 · Opus 4.8 · Sonnet 5 · Fable 5

01

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.

31
Commits
65%
Claude co-authored
~5.0k
Lines of code
10+
Public data feeds

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.

React 19TypeScriptthree.js / react-globe.glVercel Edge FunctionsRechartsPWA
  • 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.

02

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.

120
Commits
98%
Claude co-authored
~14.7k
Lines of code
4
Playable planets

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.

Godot 4.7GDScriptCustom shadersBlenderPython toolingMCP (Godot + Blender)
  • 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.

03

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.

39
Commits
49%
Claude co-authored
~2.6k
Lines of code
7
Touch tabs

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.

ESP32-S3 (C++)PlatformIOLovyanGFXPython http.serverPillowClaude Code hooks
  • “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.

04

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.

14
Source files
~1.8k
Lines of code
0
Network calls
4
Import formats

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.

React 19Vitepdf.jsPapaParseRechartsnode:test
  • 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.

05

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.

5
Pages
0 KB
JS on content pages
~1.4k
Lines of code
1 day
Rebuild, start to finish

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.

Astro 5Plain CSSCloudflare Pagesthree.js (this page only)
  • 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.