Saltar al contenido principal

Arquitectura del sistema

Visión general

MAMB Kids es una Single Page Application (SPA) construida con HTML, CSS y JavaScript puro (sin frameworks). El estado de la aplicación se gestiona mediante un objeto global APP, y la navegación entre pantallas se realiza ocultando/mostrando secciones <section class="screen">.

┌─────────────────────────────────────────────────────┐
│ Navegador (Cliente) │
│ │
│ app.html ──► script.js ──► config.js │
│ │ │ │
│ │ Supabase JS Client │
│ │ │ │
└─────┼──────────────┼─────────────────────────────────┘
│ │
│ ┌─────────▼──────────┐
│ │ Supabase │
│ │ ┌─────────────┐ │
│ │ │ PostgreSQL │ │
│ │ │ Auth │ │
│ │ │ Storage │ │
│ │ └─────────────┘ │
│ └────────────────────┘


Azure Static Web Apps (Hosting)

Archivos principales

ArchivoResponsabilidad
app.htmlToda la interfaz de usuario — 15+ pantallas como secciones <section>
script.jsLógica de navegación, eventos, cámara, galería, logros, auth
styles.cssSistema de diseño completo — variables CSS, componentes, animaciones
config.jsInicialización del cliente de Supabase
index.htmlRedirección a app.html

Estado global (APP)

Toda la app comparte un objeto de estado único:

const APP = {
currentScreen: 's-login', // pantalla activa
history: [], // historial de navegación (para goBack())
currentUserId: null, // UUID del usuario autenticado
selectedStyle: 'impresionismo', // estilo artístico seleccionado
currentObra: null, // obra abierta en el visor de galería
favActive: false,
flashActive: false,
tutStep: 0,
processingTimer: null,
autosaveTimer: null,
progressValue: 20,
};

Sistema de pantallas

La navegación funciona activando/desactivando la clase active en elementos <section class="screen">:

function nav(targetId, skipHistory) {
const current = document.querySelector('.screen.active');
const target = document.getElementById(targetId);
current.classList.remove('active');
target.classList.add('active', 'entering');
APP.currentScreen = targetId;
onScreenEnter(targetId); // hook para cargar datos de cada pantalla
}

Pantallas de la aplicación

IDNombreDescripción
s-loginLoginInicio de sesión
s-signupCrear cuentaRegistro de nuevo usuario
s-tutorialTutorialOnboarding guiado por Pinto
s-homeInicioPantalla principal con logros y accesos rápidos
s-cameraCámaraCaptura de dibujos
s-previewVista previaRevisión antes de procesar
s-formFormularioNombre y estilo de la obra
s-processingProcesando IAAnimación de procesamiento
s-resultResultadoObra transformada con opciones de guardado
s-galleryGaleríaTodas las obras del museo
s-gallery-viewerVisorDetalle de una obra
s-artistsArtistasCatálogo de artistas
s-artist-detailDetalle artistaObras y biografía
s-programsProgramasProgramas académicos Unisimón
s-aboutAcerca del MAMBHistoria, misión y ubicación
s-eventsEventosTalleres y actividades
s-profilePerfilDatos del usuario y logros
s-edit-profileEditar perfilModificar datos personales
s-gameJuegoPiedra, papel o tijera con IA

Flujo principal del usuario

Login/Registro


Inicio (s-home)

├──► Cámara → Vista Previa → Formulario → Procesando → Resultado → Guardar

├──► Galería → Visor de obra → Descargar / Compartir / Favoritos

├──► Artistas → Detalle del artista

├──► Perfil → Logros / Mis obras / Editar perfil

└──► Eventos / Programas / Acerca del MAMB