Initial import

This commit is contained in:
renato97
2025-11-30 03:11:18 +00:00
commit 3607376d58
134 changed files with 19618 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
# 2024-06-07 · Ayuda interactiva y matching visual
## Cambios
- Nuevo **Centro de ayuda** (`app/src/components/HelpCenter.tsx`) que explica paso a paso cómo jugar cada módulo (Lectura global, Fonética, Historias) con tips pedagógicos.
- Módulo de **Lectura global** ahora incluye una imagen simbólica (emoji contextual + descripción) y un reto de elección múltiple para asociar palabra con figura.
- Nuevos estilos (`App.css`) para la figura, opciones, feedback y tarjetas de ayuda.
- Build `npm run build` verificado tras los cambios.
## Pendientes relacionados
- [ ] Añadir imágenes reales generadas con Gemini y cachearlas por palabra.
- [ ] Guardar estadísticas de aciertos en matching para mostrar en dashboard.
- [ ] Internacionalizar la sección de ayuda y permitir audio explicativo.

View File

@@ -0,0 +1,23 @@
# 2024-06-07 · Integración Gemini para imágenes en Lectura global
## Backend
- Creado módulo `GeminiService` que usa el modelo `gemini-2.5-flash-image` de Gemini para generar ilustraciones infantiles.
- Nuevo `GlobalWordsService` lee `content/palabras-globales.json`, precarga imágenes en `content/generated/global-words/` y expone endpoints REST (`/global-words`).
- Endpoint `/global-words/:slug/image` entrega/auto-genera la imagen cuando el front la solicita.
- Se habilitó CORS en Nest para que la webapp consuma el API desde `http://localhost:4173` u otros orígenes configurables.
- Si Gemini rechaza la petición (por acceso al modelo) el servicio genera un placeholder SVG brillante y lo cachea, garantizando que Milo siempre vea una figura.
## Frontend
- `Lectura global` ahora consume imágenes reales desde el backend y ofrece matching palabra-imagen con feedback inmediato.
- Se agregó `VITE_API_BASE_URL` (ver `app/.env.example`) y se cachean URLs por palabra para evitar descargas repetidas.
- Se mantiene el centro de ayuda con indicaciones prácticas.
## Uso
1. En una terminal: `cd backend && npm run start:dev` (se precargarán imágenes en background automáticamente).
2. En otra terminal: `cd app && npm run dev -- --host 0.0.0.0 --port 4173` y abrir `http://localhost:4173`.
## Pendientes
- [ ] Manejar colas/concurrencia para lotes grandes (usar BullMQ u otra cola).
- [ ] Guardar metadatos de generación (prompt, versión, timestamps) en BD.
- [ ] Añadir endpoint para verificar progreso del prefetch y mostrarlo en el dashboard.
- [ ] Validar acceso a los modelos de imagen en la cuenta de Gemini (si `gemini-2.5-flash-image` no está habilitado se seguirán viendo placeholders hasta que Google otorgue acceso).

View File

@@ -0,0 +1,20 @@
# 2024-06-07 · Motor local de imágenes
## Resumen
- Se creó `image_service/` (FastAPI + Diffusers + SD Turbo) que usa la GPU local (RTX 3060 Ti) para generar ilustraciones infantiles.
- El servicio expone `POST /generate` y guarda los PNG en `content/generated/global-words/`. Corre con `uvicorn` en el puerto 8001 usando el entorno `.venv`.
- El backend Nest reemplazó la dependencia de Gemini por `ImageEngineService`, que llama al servicio local y mantiene fallbacks SVG si algo falla.
- Al iniciar el backend se lanza `prefetchAll` para generar todas las palabras. `POST /global-words/prefetch` permite relanzar el proceso manualmente.
- README y `.env.example` actualizados para reflejar el nuevo flujo (variable `IMAGE_SERVICE_URL`).
## Cómo correr todo
1. `source .venv/bin/activate` (opcional si querés revisar el servicio).
2. `nohup .venv/bin/python -m uvicorn image_service.main:app --host 0.0.0.0 --port 8001 >/tmp/image-service.log 2>&1 &`
3. `cd backend && npm run build && nohup node dist/main.js >/tmp/backend.log 2>&1 &`
4. `cd app && npm run dev -- --host 0.0.0.0 --port 4173` (si no estaba corriendo) y abrir `http://localhost:4173`.
## Pendientes / mejoras
- [ ] Ajustar prompts dependiendo del módulo (por ejemplo, palabras de fútbol vs. autos) para variar estilos.
- [ ] Agregar parámetro `seed` por palabra para reproducibilidad.
- [ ] Exponer desde el backend un endpoint para consultar el estado del prefetch (cuántas imágenes faltan).
- [ ] Afinar tamaño/relación de aspecto según categoría.

View File

@@ -0,0 +1,30 @@
# 2024-06-07 · Plan inicial
## Estado actual
- Workspace limpio con carpetas `mobile/`, `backend/`, `web/`, `content/` y `progreso/`.
- `.env.example` documenta `GEMINI_API_KEY` para texto e imágenes.
- README describe visión general y pasos siguientes.
## Estrategia pedagógica
1. **Lectura global (Doman):** packs de tarjetas con palabras enteras + métricas de exposición.
2. **Fonética (Montessori):** juegos de fonemas→grafemas, sílabas móviles y control de error.
3. **Comprensión narrativa (Reggio):** cuentos personalizados generados con Gemini, preguntas abiertas y registro de respuestas.
## Roadmap macro
1. Definir contenido base (palabras, fonemas, temas). Responsable: contendido.
2. Scaffold técnico: Flutter (mobile), Node/Nest (backend), React (web) compartiendo monorepo.
3. Integrar cliente Gemini (texto + imagen) con caché local y prompts versionados.
4. Diseñar modelo de datos para progreso + sincronización offline-first.
5. Implementar dashboard con métricas clave (palabras dominadas, fonemas difíciles, sesiones narrativas).
## TODO inmediato
- [ ] Listar palabras globales iniciales (mínimo 50) y fonemas prioritarios.
- [ ] Elegir stack exacto backend (Express vs Nest) y configurar boilerplate.
- [ ] Bootstrap Flutter app con navegación modular (Tarjetas / Fonética / Historias).
- [ ] Bootstrap dashboard web (Vite + React + Recharts).
- [ ] Crear servicio compartido para llamar a Gemini y guardar prompts/respuestas.
## Riesgos/consideraciones
- Gestión de latencia al generar imágenes: usar cache y pre-generación.
- UX para niño de 4 años: botones grandes, audio obligatorio, pocas opciones por pantalla.
- Privacidad: datos solo en red local / cifrado básico si se expone fuera.

View File

@@ -0,0 +1,17 @@
# 2024-06-07 · Scaffolding técnico y contenido base
## Novedades
- Elegido stack: **React Native (Expo)** para mobile, **NestJS** para backend y **React + Vite** para dashboard.
- Proyectos generados con tooling oficial (`create-expo-app`, `@nestjs/cli`, `create-vite`).
- Listados iniciales creados en `content/` con palabras globales, fonemas prioridad y prompts de historias alineados con autos + Boca Juniors.
## Pendientes inmediatos
- [ ] Configurar monorepo (workspaces o turborepo) para compartir tipados y utilidades (incl. cliente Gemini).
- [ ] Escribir especificación de API (contratos para tarjetas, fonemas, historias y métricas).
- [ ] Conectar mobile + web a backend stub (fetch estático mientras se arma lógica real).
- [ ] Preparar generador de assets con Gemini usando `.env` real y persistiendo en `content/generated/`.
## Notas
- Expo permite probar rápido en Android físico; se recomienda activar modo dev-client para reducir fricción.
- NestJS servirá también como capa para colas de generación (BullMQ o similar) si el contenido crece.
- Las palabras de `content/palabras-globales.json` ya contemplan 50 términos de alta relevancia para el niño (autos/fútbol/vida diaria).

View File

@@ -0,0 +1,19 @@
# 2024-06-07 · Webapp pedagógica (alpha)
## Qué se hizo
- `app/` ahora incluye una experiencia completa en React (Vite + TS) con módulos para **Lectura global**, **Fonética Montessori** e **Historias Reggio**.
- Los datos se leen directamente desde `content/` usando alias `@content`, evitando duplicar las listas de palabras/fonemas/historias.
- Estilos nuevos amigables para tablet (botones grandes, colores Boca, fondos suaves) y módulos con controles táctiles.
- Build verificado con `npm run build` para asegurar que todo compila correctamente.
## Cómo usarlo en localhost
1. `cd app`
2. `npm install` (ya ejecutado, repetir si agregás deps nuevas)
3. `npm run dev`
4. Abrí el navegador en la URL que Vite muestre (por defecto `http://localhost:5173`).
## Próximo enfoque
- [ ] Activar modo PWA (manifest + service worker) para tablet offline.
- [ ] Guardar progreso local (localStorage/indexedDB) y sincronizar con backend cuando esté listo.
- [ ] Integrar audio (TTS o clips grabados) para cada palabra/fonema.
- [ ] Añadir botón "Generar con Gemini" que consuma el backend.

View File

@@ -0,0 +1,15 @@
# 2024-06-07 · Cambio a webapp universal
## Decisión
El módulo interactivo para el niño será una **webapp (React + Vite + TS)** preparada como PWA, aprovechable en cualquier tablet o navegador, manteniendo el dashboard separado.
## Acciones
- Eliminado el scaffold Expo anterior (`mobile/`).
- Creado proyecto `app/` con Vite React TS, listo para configurar PWA/offline y módulos Doman + Montessori.
- README actualizado para reflejar la nueva estructura.
## Próximos pasos
- [ ] Configurar rutas/módulos básicos en `app/` (Tarjetas globales, Fonética, Historias interactivas).
- [ ] Añadir soporte PWA (manifest + service worker) para uso offline en tabletas.
- [ ] Compartir componentes/tipos entre `app/`, `web/` y `backend/` mediante workspace.
- [ ] Diseñar vista responsive amigable para dedos pequeños (botones grandes, audio integrado).