Case Studies / Full-Stack AI Product
Luna
Luna is an AI assistant app for my phone. It helps me manage tasks, my calendar, email, and coding work from one place. When it works on code, it shows each proposed change and waits for my approval before anything runs.
Verified delivery
- Live
- Self-hosted on my homelab
- 500+
- Commits, built solo
- 160+
- Test files across server and web app

01 / Challenge
The workflow before the system
I wanted to handle tasks, my calendar, email, and coding work from my phone, and AI help with code is only useful if nothing changes without my say.
02 / Approach
How I designed the response
I built a phone-first web app with a Bun + Hono backend and one SQLite database. The AI runs behind it, and every action it proposes appears as a card in the chat with an Approve button, so nothing happens until I confirm.
- Chat with the AI from my phone, with replies streaming in
- Approve button before any proposed change runs
- Tasks and notes the assistant remembers, which I can see and edit
- Calendar and email in the same app
- Money tracking on a payday cycle
- Push notifications, and it installs on the phone like an app
- Phone-first layout with a desktop view
03 / Outcome
Live on my homelab. Built solo across 500+ commits, with 160+ test files covering the server and web app.
Exhibits B–E / Screens
Phone first, with a desktop view.
Captured from a local run with synthetic data. The chat uses the built-in test mode instead of a real AI model.
04 / Workflow
Before
- Coding work needed a laptop
- No clear record of what the AI changed
- Tasks, calendar, and email in separate apps
With the system
- Open Luna on the phone and start or continue a chat
- See what the AI is doing as cards in the chat
- Approve or decline each proposed change
- Check tasks, calendar, email, and money in the same app
- Get a push notification when something needs me
05 / Engineering proof
Architecture
- React 19 + Vite + Tailwind web app that installs on the phone (PWA)
- Bun + Hono server with Drizzle ORM on one SQLite file
- Different AI engines can plug in behind the same chat
- Web Push notifications; runs as a container on my homelab
Verified evidence
- Live on my homelab
- 500+ commits and 160+ test files
- Screens captured from a local run with synthetic data
06 / Judgment
Tradeoffs
- One process and one SQLite file instead of microservices: simpler to run and back up
- Private repository: it holds personal integrations
Why it matters
- Shows end-to-end product work: UX, API, data model, integrations, and deployment
- Shows careful use of AI: nothing runs without my approval
What this proves
I can design, build, ship, and keep improving a full-stack product on my own.



