Skip to content

Work

Selected work

Products I've designed and shipped end-to-end — from systems architecture to polished UI.

Everywhen

Live

A daily guessing game about where things are — and when they happened.

Everywhen — guessing where: dropping a pin on the world mapEverywhen — scoring a guess and keeping the daily streakEverywhen — reading the story, then collecting the placeEverywhen — the Passport atlas filling in as you collect
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtA native iOS game in Swift + SwiftUI (iPhone + iPad, iOS 17+): four real places a day — drop a pin on the world map to guess where, pick an era and dial in a year to guess when, then read the 2-minute story and collect the place. 378 places across 7 subjects feed the daily rounds, a Passport atlas with scoring and streaks, and a Library of 49 collections and 28 guided walks. Built on MapKit + SwiftData, with Supabase-backed sign-in that carries your Passport, streak, and daily history across devices, and an optional Pro membership through RevenueCat.
OutcomeLive on the App Store as Everywhen — Where & When.

Ice Age Life

Live

A narrative life-sim I designed, built, and shipped solo.

Ice Age Life — a narrative event with stat outcomesIce Age Life — the seasonal hunt boardIce Age Life — the band status screenIce Age Life — the seasonal actions menu
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtA React Native app on iOS, Android, and web from one codebase, with a Node/Express backend — built end-to-end, solo. 25+ simulation systems, 2,700+ events, 347 player actions, 58 screens, and 1,100+ SVG icons art-directed to a single style spec.
OutcomeLive on the App Store and Google Play.

Historical Figure MBTI

Live

A 542-figure archive I designed and engineered end-to-end.

Historical Figure MBTI — a figure page with an AI-generated portrait, type, and eraHistorical Figure MBTI — the searchable, filterable archive of 542 figuresHistorical Figure MBTI — the relationship graph linking figures by kin, love, rivalry, counsel, and mentorship
RoleDesigner & engineer — solo
Designed + builtBuilt end-to-end in Next.js + TypeScript: 542 statically-generated figure pages, each with an AI-generated portrait, MBTI type, and cognitive-function breakdown. Engineered the pipeline behind it — content scaffolding and normalization, an AI portrait generator (Google Gemini), and automated relationship generation — plus full-text search, multi-axis filtering, bookmarking, and a cross-figure relationship graph (2,500+ ties).
OutcomeLive at historicalfigurembti.com — 542 figures across 17+ eras and all 16 types, statically rendered for fast loads and SEO.

WingRep

Shipped

An iOS app I led from build pipeline to App Store launch.

WingRep — the iOS app sign-in screenWingRep — the Meetings dashboard with per-meeting performance scores, filters, and attendeesWingRep — the daily Home view with the AI coach, agenda, and tasks
RoleSoftware engineer — WingRep.ai
Designed + builtLed the iOS app (Expo + React Native) from build pipeline to App Store — owning releases and cross-device UI/UX. Architected a serverless AWS CDK stack (AppSync, Lambda, Aurora Postgres) with GitHub Actions CI/CD, Python GraphQL resolvers, and Google Calendar sync over OAuth.
OutcomeShipped to the App Store; powers goal and meeting management with real-time scheduling.

Acadia

Live

A native iOS app in Swift + SwiftUI that I designed and shipped solo in a weekend — now with a native Android twin.

Acadia — the Nation tab: hero stats, vote-party progress, and leadershipAcadia — the sortable Towns directory with per-town online countsAcadia — the Pulse tab: who's online in the nation right nowAcadia — the live claims Map tab, with Acadia's territory highlighted
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtTwo fully native clients — Swift + SwiftUI on iOS, Kotlin + Jetpack Compose on Android — giving a read-only live window into the EarthMC nation of Acadia: Nation stats, a sortable Towns directory, Pulse (who's online, live), and the live claims Map. Talks straight to the EarthMC API v4 with no backend, refreshes every 60s, caches the last good snapshot for offline launches, and backs off on rate limits. The iOS app is iOS 26+ with no third-party dependencies.
OutcomeiOS designed, built, and shipped solo in about 2 days — both clients now live, on the App Store and Google Play.

Sleep Map

Live

A calm sleep-habit app — sleep well tonight, and a piece of the world becomes yours.

Sleep Map — a map of a life, drawn in good nightsSleep Map — a claimed place telling one true thing about itselfSleep Map — ground spreading out from home, night after night
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtA native iOS app in Swift + SwiftUI + SwiftData (iOS 17+). Pick your hometown and the hours you mean to keep; every kept night claims a real place on the map, spreading outward from home — each with a short, true story about itself — and a bad night never takes territory back. v1.0 ships the United States — 1,032 storied places across 59 regions with 1,028 photographs — with 23,000+ places across 39 more nations already prepared behind “coming soon.”
OutcomeLive on the App Store.

Untwine

Live

A to-do app for the tasks you keep not doing — because they're hard to face, not hard to understand.

Untwine — the Today list, each task carrying a weather glyph for how hard it feelsUntwine — three small things you could do next, offered as actions rather than adviceUntwine — patterns drawn from your own history, with no score attached
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtA native app in Swift + SwiftUI + SwiftData shipping to iPhone and Mac from one codebase, with home-screen widgets and App Intents. How hard a task feels is a first-class property here, sitting beside priority and effort — because something can take two minutes and still be the hardest thing on the list. Every task has an optional second layer that names what's actually hard about it and offers small concrete actions rather than interpretations, with 31 low-risk things to try when you're stuck, and patterns drawn from your own history — no score, no grade. The Mac build is a real second shell — sidebar, menu commands, keyboard shortcuts — and the two were held to parity by a 232-shot screenshot sweep run on both platforms. No account and no analytics, and nothing leaves the device unless you turn on iCloud sync — which goes to your own private database, never to a server of mine.
OutcomeLive on the App Store, on iPhone and Mac.

Compass

In review

A wheel of life you have to earn — twenty-four questions draw it, and nothing else moves it.

Compass — the wheel of eight directions, drawn only from your own answersCompass — a bearings check: twenty-four short questions, one page at a timeCompass — where you actually stand, as measured facts that each name their source
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtA native iOS app in Swift + SwiftUI + SwiftData (iOS 17+), with a home-screen widget. Answer twenty-four short questions about the last fortnight and Compass draws your wheel from them — eight directions, no numbers on its face, and nothing else that can move it. Where you stand is shown as measured facts that each name their source, and the notes on what actually helps each carry a real citation. Everything stays on the phone.
OutcomeSubmitted to the App Store — in review.

Spheres

In progress

An idle empire game on a real map, where influence spreads as a front rather than a jump.

RoleFounder & solo developer — Sunlit Game Studio
Designed + builtA Godot 4 game in C#, on a 25,875-district world board built offline by a Python pipeline and handed over as static JSON — the runtime never runs Python. Civilizations seed at historical cradles and radiate spheres of influence outward; a district flips owner when a rival's pressure crosses a threshold, and the instant it flips it becomes a radiator itself, so expansion spreads as a front instead of teleporting. The simulation core and the presentation layer are both pure C# with no Godot types in them, which is what lets the whole game be tested headlessly — Godot is confined to rendering.
OutcomeIn development. The board, the tick, and the influence model are built and under test; design questions are settled by running instrumented probes rather than by argument.

imSunlit

Live

A quiet journaling app under a living sky.

imSunlit — the living-sky home at golden hour: “The light's going gold.”imSunlit — the “how do you feel?” color grid for logging a feelingimSunlit — the month-view star map, where each kept day is a star
RoleFounder & solo developer — Sunlit Game Studio
Designed + builtAn Expo + React Native app whose Skia-drawn sky follows your real local sun — golden by day, stars after dark. Log a feeling on a color grid, a line of text, or a photo in under ten seconds, and each kept day becomes a star on a month-view star map. No streaks, badges, or scores by design — and no accounts, ads, or analytics; everything stays on-device.
OutcomeLive on the App Store.

MeU Connect

Shipped

Features for a long-distance-couples app.

MeU — onboarding: customizing your penguin avatarMeU — the shared home space with a partner photo backgroundMeU — sending an emotion between partners' penguins
RoleReact Native developer
Designed + builtShipped daily questions, anniversary tracking, animated stickers, and real-time location sharing in React Native, Node.js, Redux, and Material UI.
OutcomeShipped these features into the MeU Connect couples app.