Back to projects

Case Study

Memomaze

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

RoleSole Developer
Stack
ReactYupTailwind CSSSonner React ToastFirebaseGithub ActionsCI/CD
Memomaze screenshot

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

1

Used Firebase Realtime Database over Firestore for notes, sync latency was measurably lower and the simpler document model was appropriate for flat note objects.

2

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.

3

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.

Memomaze screenshot

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.

Memomaze screenshot

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.