Este repositorio puede producir dos salidas de build: un servidor Node (SSR) y un sitio prerenderizado (estático).
RECIPES_DIR o el fallback src/data/recipes). Ideal si quieres añadir/editar recetas en caliente montando la carpeta en el contenedor.astro:assets para optimizar imágenes, la build estática puede requerir la dependencia sharp.Las configuraciones principales son astro.config.mjs (SSR) y astro.config.static.mjs (estático). Los scripts se encuentran en package.json.
Este proyecto fue desarrollado en gran medida con asistencia de IA.
Se recomienda revisar y validar manualmente el código antes de usarlo en producción.
RECIPES_DIR, se usa esa ruta.RECIPES_DIR no existe o no es valida, se usa fallback: src/data/recipes.Esto permite agregar archivos JSON nuevos sin volver a hacer build, siempre que el contenedor vea esos archivos en el filesystem montado.
La carpeta base debe tener estas subcarpetas:
<RECIPES_DIR>/
smoothies/
breakfasts/
meals/
dinners/
Patrones de nombre por tipo:
s[NUMERO].jsonb[NUMERO].jsonm[NUMERO].jsond[NUMERO].jsonEjemplos:
smoothies/s32.jsonbreakfasts/b8.jsonmeals/m8.jsondinners/d8.jsonEl numero del nombre define el orden en la UI.
{
"nombre": "Nombre del smoothie",
"sabores": "fruta + vegetal + extra",
"informacion_nutricional": {
"kcal": 420,
"carbohidratos_g": 50,
"grasas_g": 15,
"proteina_g": 20
},
"ingredientes": [
"1 taza espinaca",
"1/2 taza pina",
"1 taza agua"
],
"color": "#8BCF7A"
}
Campos obligatorios:
nombre: stringsabores: stringinformacion_nutricional: objeto con numerosingredientes: arreglo de stringscolor: string en formato #RRGGBB{
"nombre": "Nombre del platillo",
"informacion_nutricional": {
"kcal": 320,
"carbohidratos_g": 40,
"grasas_g": 10,
"proteina_g": 18
},
"ingredientes": [
"2 tortillas",
"1/2 taza frijoles"
],
"pasos": [
"Calentar tortillas.",
"Servir y agregar frijoles."
]
}
Campos obligatorios:
nombre: stringinformacion_nutricional: objeto con numerosingredientes: arreglo de stringspasos: arreglo de stringspnpm install
pnpm dev
En local, si no defines RECIPES_DIR, se usa src/data/recipes.
pnpm build — Build por defecto. Con la configuración actual genera la salida SSR en dist.pnpm run build:node — Build explícito para Node (SSR) usando astro.config.mjs.pnpm run build:static — Build estático usando astro.config.static.mjs. Salida en dist-static.pnpm run build:all — Ejecuta ambos builds en secuencia (Node, luego Estático).Ejemplos rápidos:
# Build SSR (Node)
pnpm run build:node
# Build Estático
pnpm run build:static
# Ambos
pnpm run build:all
# Ejecutar servidor SSR (después de build:node)
pnpm start
# Previsualizar build estático
pnpm run preview:static
Salidas:
dist/ (arranque con pnpm start)dist-static/ (sirve con pnpm run preview:static o subir a cualquier hosting estático)Este repo incluye docker-compose.yml para correr desde una imagen publica en GHCR y montar recetas desde disco.
.env.example a .env y ajusta valores:cp .env.example .env
Variables principales:
MEAL_PLAN_IMAGE: imagen publica en GHCR (ejemplo: ghcr.io/tu-usuario/meal-plan:latest)MEAL_PLAN_PORT: puerto local (por defecto 4321)RECIPES_HOST_PATH: carpeta de recetas en el host Umbreldocker compose pull
docker compose up -d
docker compose logs -f meal-plan
Estructura esperada en RECIPES_HOST_PATH:
/ruta/en/umbrel/meal-plan-recipes/
smoothies/
s1.json
s2.json
breakfasts/
b1.json
meals/
m1.json
dinners/
d1.json
Al agregar nuevos JSON en esa ruta montada, se reflejan al refrescar la UI (sin rebuild de la imagen).
write:packages.echo <GHCR_TOKEN> | docker login ghcr.io -u <GITHUB_USER> --password-stdin
docker build -t ghcr.io/<GITHUB_USER>/meal-plan:latest -t ghcr.io/<GITHUB_USER>/meal-plan:ssr .
docker push ghcr.io/<GITHUB_USER>/meal-plan:latest
docker push ghcr.io/<GITHUB_USER>/meal-plan:ssr
meal-plan y cambia visibility a Public.docker logout ghcr.io
docker pull ghcr.io/<GITHUB_USER>/meal-plan:latest
s, b, m, d + numero + .json).#RRGGBB.vegano, sin gluten, sin azúcar refinada, sin aceites añadidos
espinaca + piña + jengibre
Energía
425 kcal
Carbohidrato
50 g
Grasa
15 g
Proteína
20 g
fresa + betabel
Energía
436 kcal
Carbohidrato
46 g
Grasa
17 g
Proteína
20 g
mango + avena + linaza
Energía
496 kcal
Carbohidrato
54 g
Grasa
20 g
Proteína
23 g
manzana + canela + chía
Energía
461 kcal
Carbohidrato
50 g
Grasa
19 g
Proteína
22 g
avena + cacahuate
Energía
516 kcal
Carbohidrato
42 g
Grasa
24 g
Proteína
24 g
kiwi + limón + espinaca
Energía
400 kcal
Carbohidrato
42 g
Grasa
15 g
Proteína
20 g
piña + pepino + menta
Energía
390 kcal
Carbohidrato
44 g
Grasa
15 g
Proteína
19 g
pera + espinaca + limón
Energía
410 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
uva verde + pepino
Energía
441 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
piña + naranja + jengibre
Energía
425 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
manzana verde + apio
Energía
426 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
zanahoria + naranja
Energía
410 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
kiwi + pepino
Energía
405 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
durazno + linaza
Energía
446 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
toronja + limón
Energía
380 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
mandarina + zanahoria
Energía
415 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
apio + manzana
Energía
411 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
sandía + limón
Energía
390 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
arándano + manzana
Energía
436 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
pepino + menta
Energía
396 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
mango + lima
Energía
410 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
piña + cúrcuma
Energía
400 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
manzana + jengibre
Energía
431 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
melón + lima
Energía
395 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
arándano + limón
Energía
400 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
pepino + limón
Energía
360 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
plátano + piña
Energía
420 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
espinaca + lima
Energía
375 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
mandarina + limón
Energía
400 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
frambuesa + manzana
Energía
436 kcal
Carbohidrato
42 g
Grasa
18 g
Proteína
21 g
coco + limón
Energía
420 kcal
Carbohidrato
42 g
Grasa
16 g
Proteína
20 g
Preparacion
5 minutes
Solo tiempo activo. Requiere remojo nocturno de mínimo 8 horas en refrigerador.
Cocinado
5 minutes
Ingredientes (1 porción)
Energía
320 kcal
Carbohidrato
51 g
Grasa
16 g
Proteína
13 g
Pasos
Notas
Preparacion
10 minutes
Tiempo activo de mezclado. El reposo en refrigerador es obligatorio.
Cocinado
120 minutes
No es cocción. Es tiempo de cuajado/reposo en refrigerador. Puede dejarse toda la noche.
Ingredientes (1 porción)
Energía
174 kcal
Carbohidrato
16 g
Grasa
12 g
Proteína
3 g
Pasos
Notas
Preparacion
5 minutes
Asume que el pan de zanahoria y chirivía (p.34) está preparado con anticipación.
Cocinado
5 minutes
Solo el tiempo de tostado del pan.
Ingredientes (1 porción)
Energía
667 kcal
Carbohidrato
73 g
Grasa
30 g
Proteína
11 g
Pasos
Notas
Preparacion
15 minutes
Se puede preparar la noche anterior hasta el paso de horneado y refrigerar. Hornear en la mañana.
Cocinado
10 minutes
Horneado a 180°C (350°F) en un ramekín de 1 taza hasta que cuaje.
Ingredientes (1 porción)
Energía
240 kcal
Carbohidrato
40 g
Grasa
6 g
Proteína
6 g
Pasos
Notas
Preparacion
5 minutes
Todos los ingredientes van directamente a la licuadora. Sin tiempo de cocción.
Cocinado
0 minutes
Ingredientes (1 porción)
Energía
267 kcal
Carbohidrato
51 g
Grasa
8 g
Proteína
4 g
Pasos
Notas
Preparacion
15 minutes
Se puede preparar con anticipación. Agregar el aderezo justo antes de servir.
Cocinado
30 minutes
Tiempo para cocer arroz integral desde crudo. Con arroz pre-cocido, el tiempo se reduce a 0.
Ingredientes (1 porción)
Energía
851 kcal
Carbohidrato
84 g
Grasa
48 g
Proteína
15 g
Pasos
Notas
Preparacion
15 minutes
Rinde 8 rollitos — porción completa para 1 persona. Preparar la salsa primero.
Cocinado
0 minutes
Sin cocción. Los rollitos se arman en frío con papel de arroz rehidratado.
Ingredientes (1 porción)
Energía
440 kcal
Carbohidrato
67 g
Grasa
16 g
Proteína
10 g
Pasos
Notas
Preparacion
5 minutes
Preparar mientras el betabel se cuece y se asa.
Cocinado
30 minutes
Incluye 20–30 min de cocción en agua + 10–12 min en horno a 180°C (350°F).
Ingredientes (1 porción)
Energía
303 kcal
Carbohidrato
19 g
Grasa
24 g
Proteína
7 g
Pasos
Notas
Preparacion
5 minutes
Preparar la mezcla de aguacate mientras tuesta el pan.
Cocinado
5 minutes
Solo el tiempo de tostado del pan de masa madre.
Ingredientes (1 porción)
Energía
452 kcal
Carbohidrato
18 g
Grasa
39 g
Proteína
13 g
Pasos
Notas
Preparacion
20 minutes
Incluye el tiempo de reposo de la quinoa tapada fuera del fuego.
Cocinado
12 minutes
Cocción a fuego lento con tapa, seguida de 10 minutos de reposo fuera del fuego.
Ingredientes (1 porción)
Energía
304 kcal
Carbohidrato
36 g
Grasa
16 g
Proteína
7 g
Pasos
Notas
Preparacion
10 minutes
Asume que los panes planos (p.36) y la crema de ajo (p.26) están preparados con anticipación.
Cocinado
15 minutes
Incluye 3–4 min por lado en plancha más 1–2 min bajo el grill.
Ingredientes (1 porción)
Energía
715 kcal
Carbohidrato
96 g
Grasa
29 g
Proteína
20 g
Pasos
Notas
Preparacion
10 minutes
Incluye tiempo de prensado del tofu si no viene pre-prensado. Preparar la salsa antes de encender el fuego.
Cocinado
10 minutes
Cocción rápida a fuego alto. No alejarse de la sartén.
Ingredientes (1 porción)
Energía
539 kcal
Carbohidrato
39 g
Grasa
35 g
Proteína
27 g
Pasos
Notas
Preparacion
15 minutes
Esta receta rinde 2 porciones más sobrante para las croquetas del viernes. Guardar la mitad en refrigerador hasta el día 05.
Cocinado
30 minutes
Las lentejas se cuecen a fuego lento hasta estar tiernas; el chalote se fríe por separado.
Ingredientes (1 porción)
Energía
391 kcal
Carbohidrato
68 g
Grasa
7 g
Proteína
17 g
Pasos
Notas
Preparacion
40 minutes
Incluye 30 minutos de marinado obligatorio. El tiempo activo de preparación es de ~10 minutos.
Cocinado
10 minutes
Cocción rápida en plancha a fuego alto. El broccolini debe estar blanqueado previamente.
Ingredientes (1 porción)
Energía
547 kcal
Carbohidrato
32 g
Grasa
33 g
Proteína
46 g
Pasos
Notas
Preparacion
15 minutes
Requiere el sobrante del dal de lentejas rojas del Día 03. Asegurarse de tenerlo listo del refrigerador.
Cocinado
20 minutes
Horneado a 180°C (350°F) durante 15–20 minutos hasta que estén crujientes y doradas.
Ingredientes (1 porción)
Energía
549 kcal
Carbohidrato
74 g
Grasa
22 g
Proteína
19 g
Pasos
Notas