Proyecto personal · Full Stack
Krausen
Plataforma de recetas de cerveza artesanal con sistema de forks — cualquier receta puede ser versionada por cualquier usuario, generando un árbol de versiones colaborativo.
El problema

Las plataformas de recetas de cerveza artesanal existentes tratan cada receta como un documento estático. Si quieres adaptar una receta ajena — cambiar un ingrediente, ajustar el amargor, probar otro lúpulo — tienes que copiarla manualmente y pierdes la relación con el original.

Faltaba una plataforma donde la comunidad pudiera iterar sobre las recetas de forma colaborativa, manteniendo el rastro de quién adaptó qué y a partir de qué versión.

La solución

Plataforma full stack con FastAPI + PostgreSQL en el backend y Next.js 15 en el frontend. El núcleo es el sistema de forks: cualquier receta puede ser versionada por cualquier usuario. El árbol de versiones resultante se construye con una CTE recursiva en PostgreSQL y se visualiza con SVG generado en el cliente.

Cada receta incluye un módulo de fermentación: el usuario configura duración e intervalos, y va registrando temperaturas que se muestran en una gráfica Recharts. El ranking se calcula en tiempo real por me gustas, filtrable por mes, año o global.

La interfaz está completamente traducida en ES/EN/DE con next-intl y la API responde los errores en el idioma del cliente según el header Accept-Language.

Stack y detalles
Lo que aprendí

El árbol de versiones fue el reto técnico más interesante del proyecto. Implementar una CTE recursiva en PostgreSQL para construir el árbol completo en una sola consulta, independientemente de la profundidad, y luego visualizarlo con SVG generado dinámicamente en el cliente fue un proceso que me obligó a pensar en estructuras de datos de una forma diferente.

También fue el primer proyecto donde implementé i18n de forma seria en los dos lados — frontend con next-intl y backend respondiendo errores en el idioma del cliente.

¿Qué haría diferente hoy?
  • Añadiría tests unitarios al backend desde el principio, especialmente para la lógica de la CTE recursiva del árbol.
  • Usaría un estado global más estructurado en el frontend (Zustand o React Query) en lugar de gestión de estado local por componente.
  • Definiría el contrato de API con OpenAPI antes de desarrollar los dos lados en paralelo.
Diagramas
Arquitectura · clic para ampliar
Flujo JWT · clic para ampliar
Sistema de forks · clic para ampliar
Explorar y filtrar recetas

Desde la landing puedes buscar recetas por nombre o aplicar filtros avanzados: ingrediente, autor, estilo, rango de alcohol e IBU. Los resultados se actualizan en tiempo real.

Ranking, notificaciones e idiomas

El ranking muestra las recetas más valoradas filtrable por mes, año y global. Las notificaciones registran me gustas y forks en tiempo real. La interfaz está disponible en español, inglés y alemán.

Crear una receta

Formulario completo con nombre, descripción, imagen, estilo, litros, alcohol, IBU, ingredientes con unidades, pasos de elaboración y configuración del módulo de fermentación.

Detalle de receta y fermentación

Cada receta muestra ingredientes, pasos de elaboración, gráfica de temperaturas de fermentación y comentarios. Puedes dar me gusta, comentar o hacer tu propia versión desde la misma pantalla.

Fork y árbol de versiones

Cualquier receta puede ser versionada. El árbol de versiones muestra el original y todos sus forks anidados, construido con una CTE recursiva en PostgreSQL y renderizado con SVG. Incluye controles de zoom para árboles grandes.

Capturas