I built a reverse search engine for guitarists: you search by artist and song, and the app returns the full signal chain (guitar, pedals, amplifier) to replicate that exact sound. MERN stack, deployed on Vercel.
The challenge
Letting a user add 5–8 products to the cart with a single click, without duplicating items, respecting stock, and syncing state between backend and Context API. The transaction had to feel atomic from the UI.
How I solved it
- 01
Atomic One-Click Setup
A dedicated endpoint that receives an array of IDs, validates availability in MongoDB, and returns only the addable items. The frontend updates the cart in a single operation, with no partially loaded products visible to the user.
- 02
Shared gear across artists
David Gilmour and John Mayer use similar pedals. Modeling each gear as unique per artist would have blown up the database. Solution: an independent Gears collection where each Song points to reusable ObjectIds.
- 03
Trimmed scope, functional MVP
Instead of 50 artists × 10 tones, I focused on 13 iconic artists with 2 tones each. Simulated checkout in MongoDB instead of integrating Stripe. Enough to demonstrate the transactional flow without getting stuck on payment integrations.
What was delivered
- Node.js + Express backend with REST API and 3 MongoDB collections
- Next.js frontend + React Context API + Tailwind CSS
- Deployed on Vercel with end-to-end live demo (artist → song → cart → checkout)
Closing
Modeling data in MongoDB is fundamentally different from SQL. I chose subdocuments (Songs inside Artists) because 90% of queries are 'give me the songs by this artist': no populate needed, faster responses. If I were to redo it: authentication + user-shared setups to turn personal curation into a guitarist social network.