🎓 KENDI - Arquitectura Técnica Completa

Sistema Educativo Gamificado Multi-idioma | v2.0
📋 ÍNDICE
1. Conceptos Generales
  • Dos Modos: Educativo vs Público
  • Estructura de Datos
  • Flujo Completo
2. Configuración por Nivel
  • JSON de Configuración
  • Tipos de Ruleta (2, 3, 6 caras)
  • Tipos de Contenido
3. Sistema de Idiomas
  • Modo Público: Guaraní, Portugués, Inglés
  • Modo Educativo: Por institución
  • Estructura Multilingüe
4. Implementación Técnica
  • Modelos de Datos
  • Firestore Structure
  • Flutter Architecture
🌍 CONCEPTO: Dos Modos de Operación
CARACTERÍSTICA MODO EDUCATIVO 🏫 MODO PÚBLICO 🌍
Usuarios Supervisor, Educador, Alumno Cualquier persona (sin registro)
Niveles Educativos ✅ SÍ (Maternal, Preescolar, 1ro-6to, etc.) ❌ NO (sin niveles)
Idiomas Por institución (normalmente español) Seleccionable: Guaraní, Portugués, Inglés, Español
Organización Nivel → Menú → Submenú → Contenido Idioma → Categoría → Tema → Contenido
Acceso Login requerido Libre (sin login o login opcional)
Contenido Curricular por nivel General por tema
Monetización Licencia por alumno ($5-10/año) Gratis con ads + Premium ($2-5/mes)
💡 CLAVE: Son DOS apps en UNA. El usuario elige al abrir:
• "Soy Educador/Alumno" → Modo Educativo
• "Aprender por mi cuenta" → Modo Público
🗂️ ESTRUCTURA COMPLETA DEL SISTEMA
🏫 MODO EDUCATIVO
MODO EDUCATIVO (Institucional) │ ├─ NIVEL EDUCATIVO (Ej: Primer Grado) │ │ │ ├─ CONFIGURACIÓN DEL NIVEL │ │ ├─ Tipos de contenido disponibles │ │ ├─ Tipo de ruleta (2, 3 o 6 caras) │ │ └─ Configuración específica por tipo │ │ │ ├─ MENÚ (Ej: Matemáticas) │ │ │ │ │ ├─ SUBMENÚ (Ej: Sumas Básicas) │ │ │ │ │ │ │ └─ BANCOS ASOCIADOS │ │ │ ├─ Banco 1: Trivia Ruleta │ │ │ ├─ Banco 2: Slider │ │ │ └─ Banco 3: Informativo │ │ │ │ │ └─ SUBMENÚ (Ej: Restas Básicas) │ │ │ └─ MENÚ (Ej: Lenguaje)
🌍 MODO PÚBLICO
MODO PÚBLICO (Todo público) │ ├─ IDIOMA (Ej: Guaraní) │ │ │ ├─ CATEGORÍA (Ej: Números) │ │ │ │ │ ├─ TEMA (Ej: Contar del 1 al 10) │ │ │ │ │ │ │ └─ CONTENIDO │ │ │ ├─ Slider educativo │ │ │ ├─ Video │ │ │ └─ Trivia │ │ │ │ │ └─ TEMA (Ej: Operaciones básicas) │ │ │ └─ CATEGORÍA (Ej: Colores) │ ├─ IDIOMA (Portugués) │ └─ IDIOMA (Inglés)
⚙️ CONFIGURACIÓN JSON COMPLETA
🔑 ARCHIVO MAESTRO: Este JSON define TODO el comportamiento de cada nivel educativo.
Ubicación: Firebase Remote Config o /assets/config/niveles.json
{ "modoEducativo": { "maternal": { "nombre": "Maternal (0-2 años)", "idioma": "español", "tiposContenido": { "trivia_ruleta": { "nombre": "Trivia con Ruleta", "categoria": "interactivo", "tipoRuleta": "2_caras", "configuracion": { "numeroSecciones": 2, "secciones": [ { "id": "si", "label": "Sí ✓", "icono": "✅", "color": "#4ECDC4" }, { "id": "no", "label": "No ✗", "icono": "❌", "color": "#FF6B6B" } ] } }, "slider": { "nombre": "Slider Simple", "categoria": "informativo", "configuracion": { "tieneIntroduccion": true, "autoPlayAudio": true, "transicion": "swipe" } } } }, "prejardin": { "nombre": "Prejardín (2-3 años)", "idioma": "español", "tiposContenido": { "trivia_ruleta": { "nombre": "Trivia con Ruleta", "categoria": "interactivo", "tipoRuleta": "3_caras", "configuracion": { "numeroSecciones": 3, "secciones": [ { "id": "cantidad_1", "cantidad": 1, "label": "1", "icono": "🍎", "color": "#FF6B6B" }, { "id": "cantidad_2", "cantidad": 2, "label": "2", "icono": "🍎🍎", "color": "#4ECDC4" }, { "id": "cantidad_3", "cantidad": 3, "label": "3", "icono": "🍎🍎🍎", "color": "#FFD93D" } ] }, "camposFormulario": [ { "campo": "pregunta", "tipo": "texto", "requerido": true }, { "campo": "imagen", "tipo": "file", "requerido": true }, { "campo": "audio", "tipo": "file", "requerido": true }, { "campo": "opciones", "tipo": "multiple", "cantidad": 3 } ] }, "slider": { "nombre": "Slider Educativo", "categoria": "informativo", "configuracion": { "tieneIntroduccion": true, "autoPlayAudio": true, "transicion": "swipe", "rangoSlides": { "min": 3, "max": 5 } }, "camposPorSlide": [ { "campo": "numero", "tipo": "numero", "requerido": true }, { "campo": "texto", "tipo": "texto", "requerido": true }, { "campo": "imagen", "tipo": "file", "requerido": true }, { "campo": "audio", "tipo": "file", "requerido": true } ] } } }, "primer_grado": { "nombre": "Primer Grado (6-7 años)", "idioma": "español", "tiposContenido": { "trivia_ruleta": { "nombre": "Trivia con Ruleta", "categoria": "interactivo", "tipoRuleta": "6_caras", "configuracion": { "numeroSecciones": 6, "secciones": [ { "id": "facil", "label": "Fácil", "icono": "⭐", "color": "#4ECDC4", "dificultad": 1 }, { "id": "medio", "label": "Medio", "icono": "⭐⭐", "color": "#FFD93D", "dificultad": 2 }, { "id": "dificil", "label": "Difícil", "icono": "⭐⭐⭐", "color": "#FF6B6B", "dificultad": 3 }, { "id": "suma", "label": "Suma +", "icono": "➕", "color": "#98D8C8", "operacion": "suma" }, { "id": "resta", "label": "Resta -", "icono": "➖", "color": "#A8E6CF", "operacion": "resta" }, { "id": "sorpresa", "label": "Sorpresa", "icono": "❓", "color": "#FFB6C1", "especial": true } ] }, "camposFormulario": [ { "campo": "pregunta", "tipo": "texto", "requerido": true }, { "campo": "imagen", "tipo": "file", "requerido": false }, { "campo": "audio", "tipo": "file", "requerido": false }, { "campo": "opciones", "tipo": "multiple", "cantidad": 4 } ] }, "slider": { "nombre": "Slider Educativo", "categoria": "informativo", "configuracion": { "tieneIntroduccion": true, "autoPlayAudio": false, "transicion": "fade", "rangoSlides": { "min": 5, "max": 15 } }, "camposPorSlide": [ { "campo": "titulo", "tipo": "texto", "requerido": true }, { "campo": "contenido", "tipo": "textarea", "requerido": true }, { "campo": "imagen", "tipo": "file", "requerido": false }, { "campo": "audio", "tipo": "file", "requerido": false } ] }, "memoria": { "nombre": "Juego de Memoria", "categoria": "interactivo", "configuracion": { "numeroPares": 8, "tiempoLimite": 120, "mostrarTimer": true }, "camposFormulario": [ { "campo": "tema", "tipo": "texto", "requerido": true }, { "campo": "pares", "tipo": "parejas", "cantidad": 8 } ] }, "informativo": { "nombre": "Contenido Informativo", "categoria": "informativo", "configuracion": { "permiteImagenes": true, "permiteVideos": true, "permiteAudios": true }, "camposFormulario": [ { "campo": "titulo", "tipo": "texto", "requerido": true }, { "campo": "contenido", "tipo": "editor_rico", "requerido": true }, { "campo": "multimedia", "tipo": "file_multiple", "max": 10 } ] } } } }, "modoPublico": { "idiomas": ["guarani", "portugues", "ingles", "español"], "tiposContenido": ["slider", "informativo", "video", "trivia_simple"], "sinNivelesEducativos": true, "organizacion": "idioma → categoria → tema → contenido" } }
✅ Con este JSON:
  • Cada nivel tiene su configuración única
  • Las ruletas se adaptan al nivel (2, 3 o 6 caras)
  • Los formularios se generan dinámicamente
  • Fácil agregar nuevos niveles o tipos de contenido
🎰 TIPOS DE RULETA
TIPO CARAS PARA QUIÉN EJEMPLO USO
Ruleta 2 Caras 2 (Sí/No) Maternal (0-2 años) Pregunta: "¿Esto es un gato?" 🐱
Ruleta: Sí ✓ | No ✗
Ruleta 3 Caras 3 (Triángulo) Prejardín, Jardín (2-5 años) Secciones: 1 🍎 | 2 🍎🍎 | 3 🍎🍎🍎
Pregunta según cantidad
Ruleta 6 Caras 6 (Hexágono) Primaria en adelante (6+ años) Secciones: Fácil, Medio, Difícil, +, -, ?
Mayor variedad
Ejemplo: Ruleta 3 Caras para Prejardín
🎰 Configuración
{ "secciones": [ { "id": "sec_1", "cantidad": 1, "objeto": "manzana", "icono": "🍎", "imagen": "1_manzana.png" }, { "id": "sec_2", "cantidad": 2, "objeto": "gato", "icono": "🐱🐱", "imagen": "2_gatos.png" }, { "id": "sec_3", "cantidad": 3, "objeto": "perro", "icono": "🐶🐶🐶", "imagen": "3_perros.png" } ] }
🎮 Flujo
1. Alumno gira ruleta
2. Cae en "2 Gatos 🐱🐱"
3. Pregunta: "¿Cuántos gatos ves?"
Imagen: 🐱🐱
Opciones: 1, 2, 3
4. Validación y puntos
🌐 SISTEMA DE IDIOMAS
MODO IDIOMAS CÓMO FUNCIONA
EDUCATIVO Por institución
(generalmente Español)
• Se define al crear la institución
• Puede agregar Guaraní como segundo idioma
• Los alumnos ven contenido en ese idioma
PÚBLICO 🇵🇾 Guaraní
🇧🇷 Portugués
🇬🇧 Inglés
🇪🇸 Español
• Usuario selecciona al entrar
• Todo el contenido filtrado por idioma
• Puede cambiar en cualquier momento
🇵🇾 Contenido en Guaraní (TODO PÚBLICO)
🔑 DIFERENCIADOR ÚNICO: KENDI será la primera app educativa completa en Guaraní.

Impacto:
  • 6 millones de hablantes nativos (Paraguay + Argentina)
  • Lengua oficial en Paraguay
  • Preservación cultural
  • Accesibilidad para comunidades rurales
// Estructura de contenido multilingüe { "modoPublico": true, "idioma": "guarani", "categoria": "papaha", // Números en guaraní "tema": "papaha_1_10", // Números del 1 al 10 "contenido": { "tipo": "slider", "slides": [ { "orden": 0, "titulo": "Ñamombo'e", // Aprender "descripcion": "Papaha 1 guive 10 peve" // Números del 1 al 10 }, { "orden": 1, "numero": 1, "textoGuarani": "Peteĩ", // Uno "textoEspanol": "Uno", "imagen": "1_guarani.png", "audio": "petei.mp3" }, { "orden": 2, "numero": 2, "textoGuarani": "Mokõi", // Dos "textoEspanol": "Dos", "imagen": "2_guarani.png", "audio": "mokoi.mp3" } // ... hasta 10 ] } }
🗄️ MODELOS DE DATOS FIRESTORE
Colección: menus
{ "id": "menu_001", "nombre": "Matemáticas", "nivel": "primer_grado", // null si es público "isPublico": false, "idioma": null, // solo si isPublico = true "createdBy": "educador_123", "createdAt": "2025-10-23T10:00:00Z", "order": 1 }
Colección: submenus
{ "id": "submenu_001", "menuId": "menu_001", "nombre": "Sumas Básicas", "descripcion": "Operaciones de suma del 1 al 10", "order": 1, "createdAt": "2025-10-23T10:30:00Z" }
Colección: content_banks
{ "id": "banco_001", "nombre": "Sumas del 1 al 5", "nivel": "primer_grado", "isPublico": false, "idioma": null, "contentType": "interactive", "variant": "trivia_ruleta", "tipoRuleta": "6_caras", "data": { "questions": [ { "id": "q1", "seccionRuleta": "facil", "pregunta": "¿Cuánto es 2 + 2?", "imageUrl": "suma_2_2.png", "audioUrl": null, "options": [ { "id": "a", "text": "3", "isCorrect": false }, { "id": "b", "text": "4", "isCorrect": true }, { "id": "c", "text": "5", "isCorrect": false }, { "id": "d", "text": "6", "isCorrect": false } ], "points": 10, "timeLimit": 30 } // ... más preguntas ] }, "createdBy": "educador_123", "createdAt": "2025-10-23T11:00:00Z", "asociado": false }
Colección: content_associations
{ "id": "association_001", "submenuId": "submenu_001", "menuId": "menu_001", "nivel": "primer_grado", "contentItems": [ { "bankId": "banco_001", "buttonLabel": "¡Aprende a Sumar!", "order": 1 }, { "bankId": "banco_002", "buttonLabel": "Juego de Memoria", "order": 2 } ], "createdBy": "educador_123", "createdAt": "2025-10-23T12:00:00Z" }
Colección: configuracion_niveles
{ "nivel": "primer_grado", "config": { // Todo el JSON de configuración del nivel "tiposContenido": { ... }, "ruletas": { ... } } }
🔄 FLUJO COMPLETO DE DESARROLLO
PASO 1: CREAR ESTRUCTURA

1. Educador selecciona: Nivel = Primer Grado
2. Crea Menú: "Matemáticas"
3. Crea Submenú: "Sumas Básicas"

Resultado: Estructura vacía creada ✅

PASO 2: CREAR BANCO

1. Educador selecciona: Nivel = Primer Grado
2. Sistema carga tipos disponibles: Trivia Ruleta (6 caras), Slider, Memoria
3. Educador selecciona: Trivia Ruleta
4. Sistema muestra configuración: 6 secciones (Fácil, Medio, Difícil, +, -, ?)
5. Educador crea 5 preguntas
6. Guarda banco: "Sumas del 1 al 5"

Resultado: Banco creado pero NO asociado ⚠️

PASO 3: ASOCIAR

1. Educador va a: Matemáticas → Sumas Básicas
2. Click: "Asignar Contenido"
3. Selecciona banco: "Sumas del 1 al 5"
4. Define nombre botón: "¡Aprende a Sumar!"
5. Guarda asociación

Resultado: Alumno puede ver contenido ✅

PASO 4: ALUMNO USA

1. Alumno login
2. Ve menú: Matemáticas
3. Ve submenú: Sumas Básicas
4. Ve botón: "¡Aprende a Sumar!"
5. Click → Sistema carga banco → Abre TriviaRuletaPlayer de 6 caras
6. Alumno juega, gana puntos

Resultado: ¡Educación gamificada! 🎮🎓

📱 ARQUITECTURA FLUTTER
lib/ ├── core/ │ ├── config/ │ │ └── nivel_config.dart // Carga JSON configuración │ ├── constants/ │ │ ├── content_types.dart │ │ ├── languages.dart │ │ └── education_levels.dart │ └── enums/ │ ├── content_type_enum.dart │ ├── ruleta_type_enum.dart // 2_caras, 3_caras, 6_caras │ └── language_enum.dart │ ├── features/ │ ├── config/ │ │ ├── data/ │ │ │ ├── models/ │ │ │ │ └── nivel_config_model.dart │ │ │ └── datasources/ │ │ │ └── config_remote_datasource.dart │ │ └── domain/ │ │ └── usecases/ │ │ └── get_nivel_config.dart │ │ │ ├── menus/ │ │ ├── data/ │ │ │ ├── models/ │ │ │ │ ├── menu_model.dart │ │ │ │ └── submenu_model.dart │ │ │ └── repositories/ │ │ └── presentation/ │ │ └── pages/ │ │ ├── create_menu_page.dart │ │ └── create_submenu_page.dart │ │ │ ├── content_banks/ │ │ ├── data/ │ │ │ ├── models/ │ │ │ │ └── content_bank_model.dart │ │ │ └── repositories/ │ │ └── presentation/ │ │ └── pages/ │ │ ├── create_bank_page.dart │ │ └── widgets/ │ │ ├── trivia_form.dart │ │ ├── slider_form.dart │ │ └── memoria_form.dart │ │ │ ├── associations/ │ │ ├── data/ │ │ └── presentation/ │ │ └── pages/ │ │ └── associate_content_page.dart │ │ │ ├── players/ │ │ ├── ruletas/ │ │ │ ├── ruleta_2_caras_widget.dart │ │ │ ├── ruleta_3_caras_widget.dart │ │ │ └── ruleta_6_caras_widget.dart │ │ ├── trivia_player/ │ │ ├── slider_player/ │ │ └── memoria_player/ │ │ │ └── public_mode/ │ ├── language_selector/ │ ├── category_browser/ │ └── content_viewer/ │ └── main.dart

✅ ARQUITECTURA COMPLETA DEFINIDA

🏗️ Estructura

  • 2 Modos (Educativo + Público)
  • Multi-idioma (Guaraní, PT, EN, ES)
  • 3 Tipos de ruleta
  • JSON de configuración

💾 Datos

  • Firestore structure
  • Modelos definidos
  • Asociaciones flexibles
  • Contenido reutilizable

🚀 Implementación

  • Clean Architecture
  • Flutter modular
  • Escalable a millones
  • Listo para desarrollar

🔥 AHORA SÍ: ¡A DESARROLLAR LA APP MÁS GROSSA DE LATAM!