Case Study
Memomaze
A minimalist note-taking app with real-time sync and a CI/CD pipeline.

The Problem
Built as a deliberate learning project: I wanted to ship something with real-time sync, proper search, and an automated test-and-deploy pipeline skills I knew I needed but hadn't used in a production context.
Key Technical Decisions
Used Firebase Realtime Database over Firestore for notes, sync latency was measurably lower and the simpler document model was appropriate for flat note objects.
Added GitHub Actions CI/CD from the start rather than retrofitting it; every push to main runs ESLint, builds the app, and deploys to Vercel. This forced me to write clean, lint-passing code throughout.
Chose Sonner for toast notifications over react-hot-toast because Sonner's API is promise-aware, `toast.promise(saveNote())` gives the user feedback during async operations without manual state management.

Challenges & Solutions
Challenge
Real-time sync created a race condition — if a user edited a note while offline and reconnected, their local version could be overwritten by the server version.
Solution
Used Firebase's `serverTimestamp` and a last-write-wins strategy with a visual 'syncing...' indicator so users always knew the sync state.

Outcome
Shipped with a working CI/CD pipeline that has caught real bugs before deployment. The project gets used as a personal note tool daily.
What I Learned
CI/CD is not infrastructure work; it's a developer experience investment. The time spent setting up the pipeline pays back every time a linting error is caught before it hits production.