Proyecto: Artify - Editor de Imágenes Web Programa: Análisis y Desarrollo de Software - SENA Autor: Iván Darío Madrid Daza Fecha: Mayo 2026
Este documento describe la arquitectura técnica de Artify, explicando cómo se organizan sus capas principales, qué responsabilidades tiene cada componente y cómo se comunican el frontend, el backend y la base de datos.
La finalidad es dejar una referencia clara para comprender, mantener y ampliar el proyecto sin perder la separación de responsabilidades.
Artify utiliza una arquitectura web full stack organizada en tres capas principales:
┌─────────────────────────────────────────────────┐
│ FRONTEND │
│ HTML + CSS + JavaScript Vanilla + Canvas API │
│ Páginas: index, login, registro, editor, admin │
└────────────────────┬────────────────────────────┘
│ HTTP / REST API
┌────────────────────▼────────────────────────────┐
│ BACKEND │
│ Node.js + Express modularizado │
│ Rutas, controladores, middlewares y utilidades │
└────────────────────┬────────────────────────────┘
│ mysql2
┌────────────────────▼────────────────────────────┐
│ BASE DE DATOS │
│ MySQL - artify_db │
│ USUARIO, SESION_EDICION, OPERACION, │
│ CONFIGURACION, IMAGEN │
└─────────────────────────────────────────────────┘
El frontend se encuentra en la carpeta frontend/ y está construido con HTML, CSS y JavaScript Vanilla. Su responsabilidad es presentar la interfaz visual, capturar las acciones del usuario y comunicarse con el backend mediante peticiones HTTP.
| Archivo o carpeta | Responsabilidad |
|---|---|
frontend/index.html |
Página principal del proyecto. |
frontend/pages/login.html |
Pantalla de inicio de sesión. |
frontend/pages/registro.html |
Pantalla de registro de usuarios. |
frontend/pages/editor.html |
Editor de imágenes. |
frontend/pages/admin.html |
Panel administrativo. |
frontend/assets/css/ |
Estilos visuales de cada pantalla. |
frontend/assets/js/ |
Lógica del frontend y consumo de API. |
sessionStorage.admin.El backend se encuentra en la carpeta backend/ y está construido con Node.js y Express. Su responsabilidad es recibir solicitudes del frontend, validar datos, aplicar reglas de negocio, proteger rutas y comunicarse con MySQL.
| Carpeta o archivo | Responsabilidad |
|---|---|
backend/server.js |
Punto de entrada, middlewares globales, montaje de rutas y limpieza de sesiones. |
backend/config/ |
Conexión a la base de datos. |
backend/routes/ |
Definición de endpoints por módulo. |
backend/controllers/ |
Lógica de negocio de cada recurso. |
backend/middlewares/ |
Autenticación, autorización y control de acceso. |
backend/utils/ |
Funciones reutilizables para token, validación y configuración. |
backend/tests/ |
Pruebas automatizadas de integración. |
| Módulo | Archivo | Función |
|---|---|---|
| Autenticación | auth.routes.js |
Login, registro y login administrativo. |
| Configuración | configuracion.routes.js |
Consulta y guardado de preferencias. |
| Sesiones | sesion.routes.js |
Inicio y cierre de sesiones de edición. |
| Actividad | actividad.routes.js |
Estadísticas, operaciones e imágenes. |
| Administración | admin.routes.js |
CRUD de usuarios. |
| Analíticas | analytics.routes.js |
Endpoints públicos de analíticas. |
Artify utiliza MySQL como sistema de persistencia. La base de datos principal es artify_db y su script se encuentra en:
database/artify_db.sql
| Tabla | Responsabilidad |
|---|---|
USUARIO |
Usuarios, credenciales, rol, estado y último acceso. |
CONFIGURACION |
Preferencias personalizadas del usuario. |
SESION_EDICION |
Sesiones de trabajo dentro del editor. |
OPERACION |
Registro de operaciones realizadas por el usuario. |
IMAGEN |
Metadatos de imágenes procesadas. |
La tabla USUARIO funciona como entidad principal. Las tablas CONFIGURACION, SESION_EDICION, OPERACION e IMAGEN dependen de ella mediante claves foráneas.
La autenticación de Artify se apoya en correo, contraseña, bcryptjs y un token firmado generado por el backend.
USUARIO.bcrypt.Authorization: Bearer <token>.admin..env y no deben subirse al repositorio.El flujo normal de comunicación es:
Usuario
↓
Frontend HTML/CSS/JS
↓ fetch HTTP
Backend Express
↓ mysql2
MySQL
↓ respuesta
Backend Express
↓ JSON
Frontend
↓
Interfaz actualizada
El frontend no accede directamente a la base de datos. Todas las operaciones persistentes pasan por el backend.
Cuando un usuario autenticado utiliza el editor, el sistema puede registrar sesiones de edición y operaciones realizadas. Esto permite conservar trazabilidad básica del uso del sistema.
Además, el backend incluye una tarea periódica que finaliza sesiones activas abandonadas con más de ocho horas de antigüedad. Esta tarea ayuda a mantener consistencia en la base de datos.
El backend utiliza pnpm como gestor de paquetes oficial. El archivo de bloqueo principal es:
backend/pnpm-lock.yaml
No se debe mezclar con package-lock.json, porque el proyecto ya está migrado a pnpm.
Para mantener la arquitectura clara se deben respetar estas reglas:
backend/routes/.backend/controllers/.backend/utils/.