Apps
Everyday apps I've built to solve real problems.
CPA Study App
An offline-first study app for CPA exam prep โ adaptive quizzes, a full analytics dashboard, and a built-in tutor, with no backend at all.
Installable and works without a connection, running entirely client-side in vanilla HTML/CSS/JavaScript with zero backend or framework. Deployed as a static site on Vercel with custom cache-control headers so service worker and manifest updates roll out immediately instead of going stale. Features an adaptive quiz engine (weak-area drilling, timed mode, custom quizzes, question-of-the-day), a full analytics dashboard (accuracy, streaks, topic breakdowns, weekly heatmap), multi-profile support with JSON backup/restore, and a built-in tutor that explains every question three ways โ plain English, step-by-step, and "why the trap."
Opportunities to learn
- Having built state management from scratch in vanilla JS, a future project could compare how a framework like React handles the same problem
- Now that offline-first caching works end to end, a future app could add real-time sync across devices once there's an actual backend
Doorstop
A pre-leave checklist app โ swipe through stove, locks, and garage before you walk out the door, with streaks and cross-device sync.
Set up a checklist once (stove off, garage closed, doors locked...) and swipe through it every time you leave, like a pre-flight check for the house. Each item is a full-screen card โ swipe right to confirm, left to flag it for a second look. Supports multiple profiles ("Leaving for work" vs. "Leaving for vacation", each its own ordered subset of items), a streak and history log, and accounts with row-level-security-scoped Supabase sync so the same checklists show up on every device. Also includes an honestly-scoped location nudge: while the app is open it can flag that you've left home without checking in today, clearly labeled as foreground-only, since a browser tab can't watch location in the background the way a native app could.
Opportunities to learn
- Having built a foreground-only geofence nudge here, a future project could explore a native wrapper (Capacitor, React Native) to get real background location
- Now that Supabase realtime sync (postgres_changes) works end to end, a future project could reuse the same pattern for any multi-device app that needs live sync