Bygga
Type the product name from the box. Bygga shows every assembly step in 3D, with the parts, screws and tools for each one, and reads it out loud.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗MealPrep es una aplicacion web full-stack para planificar comidas semanales y generar listas de compras automaticas. Permite a los usuarios crear recetas con ingredientes detallados, organizar un plan de comidas semanal con desayuno, almuerzo, cena y snacks, y luego generar una lista de compras inteligente que agrega cantidades, convierte unidades y agrupa los items por pasillo del supermercado.
Planificar comidas para la semana y hacer la lista de compras manualmente es tedioso y propenso a errores: se olvidan ingredientes, se compran duplicados y se pierde tiempo en el supermercado. MealPrep automatiza todo este proceso.
MealPrep es un monorepo con dos aplicaciones independientes:
04-MealPrep/
├── backend/ # API REST con Express + Prisma + SQLite
├── frontend/ # SPA con React + Vite + TailwindCSS
└── docs/ # Documentacion del proyecto
API REST en Express con arquitectura en capas: Routes -> Services -> Prisma (Repository). Cada ruta delega la logica de negocio al servicio correspondiente. Validacion de entrada con Zod, autenticacion con JWT y manejo centralizado de errores.
Single Page Application en React 18 con React Router v6. Estado global gestionado con Context API (AuthContext + MealPlanContext). Comunicacion con el backend via un cliente API centralizado con interceptores de autenticacion. Estilos con TailwindCSS.
Documentacion detallada de la arquitectura en docs/ARCHITECTURE.md
| Capa | Tecnologia |
|---|---|
| Runtime | Node.js 22+ |
| Backend Framework | Express 4.x |
| ORM | Prisma 5.x |
| Base de Datos | SQLite (desarrollo) / PostgreSQL (produccion) |
| Validacion | Zod 3.x |
| Autenticacion | JWT (jsonwebtoken) |
| Hashing | bcryptjs |
| Frontend Framework | React 18 |
| Bundler | Vite 6.x |
| Estilos | TailwindCSS 3.x |
| Routing | React Router 6.x |
| Lenguaje | TypeScript 5.x |
| Testing | Jest + Supertest |
cd backend
# Instalar dependencias
npm install
# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus valores
# Generar cliente Prisma y ejecutar migraciones
npx prisma generate
npx prisma migrate dev
# (Opcional) Poblar la base de datos con datos de ejemplo
npm run prisma:seed
# Iniciar en modo desarrollo
npm run dev
El servidor inicia en http://localhost:3004
cd frontend
# Instalar dependencias
npm install
# Iniciar en modo desarrollo
npm run dev
La aplicacion inicia en http://localhost:5173 con proxy automatico al backend.
backend/.env)| Variable | Descripcion | Ejemplo |
|---|---|---|
DATABASE_URL | URL de conexion a la base de datos | file:./dev.db |
JWT_SECRET | Secreto para firmar tokens JWT | mi-secreto-seguro |
JWT_EXPIRES_IN | Tiempo de expiracion del token | 7d |
PORT | Puerto del servidor | 3004 |
NODE_ENV | Entorno de ejecucion | development |
CORS_ORIGIN | Origenes permitidos (separados por coma) | http://localhost:5173 |
Base URL: http://localhost:3004/api
| Metodo | Ruta | Descripcion | Auth |
|---|---|---|---|
GET | /health | Health check del servidor | No |
POST | /auth/register | Registrar nuevo usuario | No |
POST | /auth/login | Iniciar sesion | No |
GET | /auth/me | Obtener perfil del usuario autenticado | Si |
GET | /recipes | Listar recetas (publicas + propias) | Opcional |
GET | /recipes/:id | Obtener detalle de una receta | No |
POST | /recipes | Crear nueva receta | Si |
PUT | /recipes/:id | Actualizar receta | Si |
DELETE | /recipes/:id | Eliminar receta | Si |
GET | /meal-plans/current | Obtener plan de la semana actual | Si |
GET | /meal-plans/week/:weekStart | Obtener plan por fecha de inicio | Si |
POST | /meal-plans | Crear plan de comidas | Si |
PUT | /meal-plans/:id | Actualizar plan de comidas | Si |
POST | /meal-plans/:id/auto-generate | Auto-generar comidas sugeridas | Si |
POST | /shopping-lists/generate | Generar lista de compras desde plan | Si |
GET | /shopping-lists/:mealPlanId | Obtener lista de compras | Si |
Documentacion completa con ejemplos curl en docs/API.md
El corazon de MealPrep es el algoritmo de generacion de listas de compras:
servings / recipe.servings)Explicacion detallada en docs/SHOPPING-LIST-ALGORITHM.md
04-MealPrep/
├── backend/
│ ├── prisma/
│ │ ├── schema.prisma # Modelo de datos
│ │ └── seed.ts # Datos de ejemplo (16 recetas)
│ ├── src/
│ │ ├── __tests__/ # Tests unitarios e integracion
│ │ │ ├── auth.test.ts
│ │ │ ├── recipes.test.ts
│ │ │ ├── mealPlans.test.ts
│ │ │ ├── shoppingList.test.ts
│ │ │ ├── dashboard.test.ts
│ │ │ ├── integration.test.ts
│ │ │ ├── setup.ts
│ │ │ └── helpers.ts
│ │ ├── middleware/
│ │ │ ├── auth.ts # Middleware JWT
│ │ │ ├── errorHandler.ts # Manejo centralizado de errores
│ │ │ └── validate.ts # Validacion con Zod
│ │ ├── routes/
│ │ │ ├── authRouter.ts
│ │ │ ├── recipeRouter.ts
│ │ │ ├── mealPlanRouter.ts
│ │ │ ├── shoppingListRouter.ts
│ │ │ └── dashboardRouter.ts
│ │ ├── services/
│ │ │ ├── authService.ts
│ │ │ ├── recipeService.ts
│ │ │ ├── mealPlanService.ts
│ │ │ ├── shoppingListService.ts
│ │ │ └── dashboardService.ts
│ │ ├── types/
│ │ │ └── schemas.ts # Esquemas Zod + tipos
│ │ ├── utils/
│ │ │ ├── errors.ts # Jerarquia de errores
│ │ │ ├── jwt.ts # Utilidades JWT
│ │ │ ├── pagination.ts # Paginacion generica
│ │ │ ├── prisma.ts # Cliente Prisma singleton
│ │ │ └── unitConversion.ts # Conversion de unidades
│ │ ├── app.ts # Configuracion Express
│ │ └── index.ts # Entry point
│ ├── jest.config.ts
│ ├── tsconfig.json
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── Navbar.tsx
│ │ │ ├── ProtectedRoute.tsx
│ │ │ ├── RecipeCard.tsx
│ │ │ ├── RecipeForm.tsx
│ │ │ ├── WeeklyCalendar.tsx
│ │ │ └── ShoppingListView.tsx
│ │ ├── context/
│ │ │ ├── AuthContext.tsx # Estado de autenticacion
│ │ │ └── MealPlanContext.tsx # Estado del plan semanal
│ │ ├── pages/
│ │ │ ├── LoginPage.tsx
│ │ │ ├── RegisterPage.tsx
│ │ │ ├── DashboardPage.tsx
│ │ │ ├── RecipesPage.tsx
│ │ │ ├── RecipeDetailPage.tsx
│ │ │ ├── MealPlannerPage.tsx
│ │ │ └── ShoppingListPage.tsx
│ │ ├── services/
│ │ │ └── api.ts # Cliente API centralizado
│ │ ├── types/
│ │ │ └── index.ts # Interfaces TypeScript
│ │ ├── App.tsx
│ │ ├── main.tsx
│ │ └── index.css
│ ├── vite.config.ts
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ └── package.json
├── docs/ # Documentacion
├── .github/workflows/ci.yml # CI/CD
└── README.md
| Decision | Justificacion |
|---|---|
| Express sobre Fastify | Ecosistema maduro, mayor cantidad de middleware disponible y familiaridad del equipo |
| Prisma sobre TypeORM | Type-safety nativo, migraciones declarativas, cliente generado con autocompletado |
| Vite sobre CRA | Build significativamente mas rapido, HMR instantaneo, configuracion minima |
| Monorepo sin herramientas | Simplicidad para un MVP; cada app tiene su propio package.json sin necesidad de Turborepo/Nx |
| SQLite en desarrollo | Zero-config, portable; cambia a PostgreSQL en produccion via Prisma |
| Context API sobre Redux | Estado predecible sin boilerplate para una aplicacion de esta escala |
| Zod sobre Joi | Inferencia de tipos TypeScript nativa, menor bundle size |
Decisiones detalladas con contexto completo en docs/DECISIONS.md
cd backend
# Ejecutar todos los tests
npm test
# Ejecutar tests en modo watch
npm run test:watch
# Ejecutar tests con cobertura
npx jest --coverage
# El backend se despliega directamente desde el directorio backend/
# Railway detecta Node.js automaticamente
# Configurar variables de entorno en el dashboard de Railway
cd frontend
npm run build
# El directorio dist/ se despliega en Vercel
Guia completa de despliegue en docs/DEPLOYMENT.md
Distribuido bajo la Licencia MIT. Ver LICENSE para mas informacion.
Desarrollado por Ronald.
GitHub: @ronalc90
PATCH |
/shopping-lists/:id/items/:itemId |
| Marcar/desmarcar item |
| Si |
GET | /shopping-lists/:mealPlanId/export | Exportar lista como texto plano | Si |
GET | /dashboard/stats | Obtener estadisticas del dashboard | Si |