Construí un motor de búsqueda inversa para guitarristas: buscás por artista y canción, y la app te devuelve la cadena de señal completa (guitarra, pedales, amplificador) para replicar ese sonido. Stack MERN, deployado en Vercel.

El desafío
Hacer que un usuario agregue 5–8 productos al carrito con un solo click, sin duplicar items, respetando stock, y sincronizando estado entre backend y Context API. La transacción tenía que sentirse atómica desde la UI.

Cómo lo resolví
- 01
One-Click Setup atómico
Endpoint dedicado que recibe un array de IDs, valida disponibilidad en MongoDB, y retorna solo los ítems agregables. El frontend actualiza el carrito en una sola operación, sin que el usuario vea productos parcialmente cargados.
- 02
Gear compartido entre artistas
David Gilmour y John Mayer usan pedales similares. Si modelaba cada gear como único por artista, la base explotaba. Solución: colección Gears independiente, cada Song apunta con ObjectIds reutilizables.
- 03
Scope cortado, MVP funcional
En vez de 50 artistas × 10 tonos, me enfoqué en 13 artistas icónicos con 2 tonos cada uno. Checkout simulado en MongoDB en vez de integrar Stripe. Suficiente para demostrar la transaccionalidad sin quedar atrapado en integraciones de pago.

Lo entregado
- Backend Node.js + Express con API REST y 3 colecciones MongoDB
- Frontend Next.js + React Context API + Tailwind CSS
- Deploy en Vercel con live demo end-to-end (artista → canción → carrito → checkout)

Cierre
Modelar datos en MongoDB es fundamentalmente distinto a SQL. Elegí subdocumentos (Songs dentro de Artists) porque el 90% de las queries son 'dame las canciones de este artista': populate innecesario, respuestas más rápidas. Si volviera a hacerlo: autenticación + setups compartidos por usuarios para convertir curaduría personal en red social de guitarristas.