Bygga
제품명을 박스에 입력하면 Bygga가 3D로 모든 조립 단계와 부품·스크류·도구를 보여주고 음성으로 안내합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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 |