SaaS solo-developer / proyecto personal · Colombia · 2026
Sorbo · Un Diario para Cada Sorbo
Diseñé y construí una PWA editorial para catalogar, catar y compartir café de especialidad. En producción, gratis, sin tracking ni paywall.
PWA mobile-first para que la gente que toma café de especialidad lo trate como objeto cultural — registrar cafés, anotar catas con scoring SCA, guardar recetas con cronómetro, descubrir lo que otros publican. Una herramienta para el cafetero que disfruta del ritual sin querer convertirse en barista profesional.
El reto
La gente que toma café de especialidad ya tiene herramientas, pero todas están rotas: las hojas de Excel son precisión sin alma, Notion/Apple Notes son flexibles pero sin estructura (cada cata termina con un formato distinto), y las apps existentes son o brick-and-mortar, o cuadernos de barista demasiado técnicos, o social media disfrazado de tracker. El espacio entre "Excel triste" y "Instagram con etiquetas" estaba vacío.
Lo que construí
PWA mobile-first con tres capas principales más un cuarto pilar en desarrollo:
- Catálogo personal: registra cafés, catas (scoring SCA), recetas (con timer de extracción), wishlist. Todo bajo tu colección privada por default.
- Visibilidad granular: cada item (café, cata, receta) tiene tres niveles — privado, amigos (UIDs explícitos), comunidad. El usuario decide qué expone, ítem por ítem.
- Comunidad editorial: página Explora con feed de items marcados como community. Filtros por tipo, guardar a wishlist, duplicar a tu colección.
- En desarrollo (rama el-vertido): flow guiado de preparación que reemplaza al wizard tradicional — café → método → receta → ajuste → cronómetro → cierre, con lenguaje visual editorial que rompe con la estética app-de-cocina.
Stack y arquitectura
Build estático Nuxt sobre Vercel free tier + Firebase Spark (sin Cloud Functions) — restricciones que moldearon el producto.
- Nuxt 3 con SSR off, static preset, build estático para Vercel free tier.
- Firebase Firestore como persistencia (NoSQL + security rules declarativas).
- Firebase Auth (email + Google) + Firebase Storage — cero infra custom.
- @vite-pwa/nuxt para PWA installable en iOS/Android/Desktop, manifest customizado.
- Tailwind + tokens custom (paper / moss / honey / olive / jungle).
- Tipografía: DM Serif Display + Geist + JetBrains Mono — editorial sobre UI genérica.
- Sin Cloud Functions: todo el cómputo vive en el cliente o en queries de Firestore. Forzó denormalización agresiva (coffeeName/roasterName en Tasting para evitar joins, authorName/authorPhotoURL al compartir para evitar N+1 lookups en el feed).
- Las reglas de Firestore son el único enforcer de visibilidad y autorización para los 3 niveles — reescribirlas fue uno de los hitos del proyecto.
Decisiones notables
- "El fondo es el tiempo" (El Vertido): en vez de barra de progreso encima de las 6 pantallas, el color del fondo evoluciona — jungle frío → amber concentrado → paper en el cierre. La pantalla misma dice dónde estás.
- "Marca" en vez de "Tostador": feedback de usuarios reveló que el campo era demasiado específico. Renombrado a "Marca" (lo que lees en la bolsa), opcional, con flag roasts?: boolean. Las marcas tostadoras muestran un badge sutil "Tuesta su café". Cero migración de datos.
- Tres niveles de visibilidad por item: en vez del binario público/privado, cada item es privado (default), amigos (UIDs explícitos en sharedWith) o comunidad. Convirtió a Sorbo en algo a medio camino entre Strava y un diario privado.
- Author Intent en recetas: las recetas declaran el perfil de café para el que fueron diseñadas (proceso, banda de tueste, clase de flavor). Esta señal explícita pesa más que el aprendizaje colaborativo porque es intencional.
- Sistema de diseño editorial: paleta "verde finca" (paper/moss/jungle/honey/olive), punto final en títulos como recurso de marca (Rock., Catas.), em italic selectivo en olive para enfatizar una palabra clave por bloque.
Aprendizajes
- El branding hace el producto: la diferencia entre Sorbo y una hoja de Excel es la misma información — pero el lenguaje editorial convierte el acto de registrar en algo que da ganas de hacer.
- Decir que no: resistí la tentación de feeds infinitos, push agresivos, gamificación. Sorbo es un cuaderno, no una red social. La frontera con TikTok-for-coffee es donde muere el producto.
- Restricciones liberan: el Spark tier me forzó a denormalizar y aceptar consistencia eventual donde una arquitectura "correcta" habría requerido infra. El resultado es más simple, más barato y suficientemente bueno.
- Diseñar con un colaborador AI: trabajé el rediseño del Vertido en paralelo con Claude Design (propuestas visuales) y Claude Code (implementación). El handoff entre los dos fue uno de los hitos más productivos del proyecto.
- Modelo de visibilidad retroactivo (documentos antiguos sin el campo visibility se tratan como private): las reglas de Firestore tuvieron que soportar el caso ausente sin migración.