Saltar al contenido principal

Arquitectura del Proyecto

Estructura de Archivos

MAMBAQ/
├── index.html # Página principal del museo
├── adultos.html # Experiencia artística para adultos
├── kids.html # Experiencia para niños
├── main.js # Toda la lógica del sistema
└── styles.css # Estilos globales

Arquitectura General

El proyecto sigue una arquitectura modular por namespaces dentro de un único archivo JavaScript (main.js). Cada módulo tiene una responsabilidad clara y se comunica con los demás a través del objeto global AppState.

┌─────────────────────────────────────────┐
│ NAVEGADOR │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────┐ │
│ │index.html│ │adultos │ │kids │ │
│ │ │ │.html │ │.html │ │
│ └────┬─────┘ └────┬─────┘ └───┬───┘ │
│ └─────────────┴────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ main.js │ │
│ │ │ │
│ ┌──────────┴──────────┐ │ │
│ │ Módulos internos │ │ │
│ │ DB_ CAM_ FX_ UI_ │ │ │
│ └──────────┬──────────┘ │ │
│ └──────┬──────┘ │
└─────────────────────┼──────────────────┘

┌─────────────▼─────────────┐
│ SUPABASE │
│ - Almacenamiento imágenes│
│ - Base de datos obras │
│ - Likes y vistas │
└───────────────────────────┘

Módulos de main.js

DB_ — Base de Datos

Maneja toda la comunicación con Supabase.

FunciónDescripción
DB_init()Inicializa la conexión con Supabase
DB_uploadImage(blob, fileName)Sube una imagen al bucket de almacenamiento
DB_saveArtwork({nombre, autor, url})Guarda una obra en la base de datos
DB_getArtworks()Obtiene todas las obras guardadas
DB_incrementVistas(id)Suma una vista a una obra
DB_addLike(id, delta)Agrega o quita un like
DB_hasLiked(obraId)Verifica si el dispositivo ya dio like

FX_ — Efectos Artísticos

Aplica transformaciones visuales usando Canvas API.

FunciónEfecto
FX_applyEffect(src, dst, 'pixel')Pixelado artístico
FX_applyEffect(src, dst, 'bn')Blanco y negro con contraste
FX_applyEffect(src, dst, 'oleo')Simulación de pintura al óleo
FX_applyEffect(src, dst, 'soplo')Efecto de desenfoque artístico
FX_applyEffect(src, dst, 'original')Sin efecto (imagen original)

CAM_ — Cámara y Captura

Gestiona la entrada de imágenes.

FunciónDescripción
CAM_init(refs)Inicializa referencias del DOM
CAM_openCamera()Abre la cámara web del dispositivo
CAM_openUpload()Abre el selector de archivos
CAM_stopCamera()Detiene el stream de la cámara
CAM_getOriginal()Retorna el canvas con la imagen capturada

UI_ — Interfaz de Usuario

Controla la navegación y estados visuales.

FunciónDescripción
UI_init()Inicializa todos los controles
UI_navigateTo(id)Navega entre secciones
UI_toast(msg, type)Muestra notificaciones
UI_hideSplash()Oculta la pantalla de carga inicial

PARTICLES_

Animación de partículas del hero de index.html.

Estado Global

AppState centraliza el estado de la aplicación:

const AppState = {
currentEffect: 'pixel', // Efecto activo
isProcessing: false, // Si hay un efecto en proceso
savedArtwork: null, // Obra guardada actualmente
};

Base de Datos Supabase

Tabla artworks

CampoTipoDescripción
iduuidIdentificador único
nombretextNombre de la obra
autortextNombre del autor
url_imagentextURL pública en el bucket
likesintContador de likes
vistasintContador de vistas
created_attimestampFecha de creación

Bucket de Almacenamiento

Las imágenes se guardan en el bucket pixel-artworks de Supabase Storage con acceso público para visualización en la galería.