Este repositorio contiene un prototipo de ERP enfocado en los flujos clave para controlar artículos, terceros, almacenes y órdenes de compra. Incluye autenticación inicial basada en Supabase, un backend con Express y un frontend estático con múltiples módulos transaccionales.
├── backend # API REST con Express que opera contra Supabase
├── frontend # Sitio estático con dashboards y pantallas operativas
├── docs # Documentación adicional (SQL de referencia, etc.)
└── README.md
- Maestros
- Artículos con registro, listado y trazabilidad básica.
- Clientes y proveedores centralizados en el módulo de terceros.
- Almacenes con altas desde el frontend y CRUD vía API (
/api/almacenes).
- Inventario y compras
- Registro de órdenes de compra y sus líneas.
- Entradas de almacén vinculadas a órdenes de compra que actualizan existencias (
/api/entradas-almacen). - Control de inventario por artículo y almacén, con sumatorias automáticas.
- Pagos a proveedores asociados a órdenes de compra y actualización de estados (
/api/pagos-proveedores).
- Panel y navegación
- Dashboard con accesos rápidos a todos los módulos.
- Menús consistentes entre secciones maestras, transacciones y configuraciones.
- Cuenta activa en Supabase con un proyecto creado.
- Cuenta en Render para desplegar el backend (servicio web) y el frontend (sitio estático).
- Node.js 18+ y npm instalados en tu máquina para ejecutar el proyecto localmente.
-
Ingresa al panel SQL de Supabase y ejecuta el siguiente script para crear la tabla de administradores y el usuario inicial. Ajusta correo y contraseña antes de correrlo.
-- Habilita funciones criptográficas (normalmente ya está activo en Supabase) create extension if not exists pgcrypto; create table if not exists admins ( id uuid primary key default gen_random_uuid(), email text unique not null, password_hash text not null, created_at timestamptz default timezone('utc', now()) ); insert into admins (email, password_hash) values ( 'admin@empresa.com', crypt('TuContraseñaSegura123', gen_salt('bf')) ) on conflict (email) do update set password_hash = excluded.password_hash;
Importante: guarda la contraseña que definas porque será la que uses para iniciar sesión.
-
Copia la Service Role Key y la Project URL desde la sección Project Settings → API. Se utilizarán en el backend.
-
Ejecuta el script de referencia
docs/sql/almacenes-y-entradas.sqlpara crear las tablas auxiliares de almacenes, inventario, entradas y pagos a proveedores.
-
Copia el archivo de variables de entorno y completa los valores necesarios:
cd backend cp .env.example .envEdita
.envcon tus credenciales de Supabase. -
Instala dependencias y ejecuta el servidor en modo desarrollo:
npm install npm run dev
El servidor se ejecutará en
http://localhost:4000y expone, entre otros, los endpoints:GET /api/health– Verifica el estado del servicio.POST /api/login– Recibe{ email, password }y valida contra Supabase.GET /api/almacenesyPOST /api/almacenes– Consulta y creación de almacenes.POST /api/entradas-almacen– Registra recepciones y actualiza inventario.POST /api/pagos-proveedores– Registra pagos de órdenes de compra y marca las órdenes como pagadas.
-
Dentro de
frontend/, ejecuta el generador de configuración indicando la URL del backend:BACKEND_URL="https://tu-backend.onrender.com" npm run build --prefix frontendSi no estableces
BACKEND_URL, se utilizaráhttp://localhost:4000como valor por defecto. -
Durante desarrollo puedes abrir
index.htmldirectamente en el navegador o servirlo con tu herramienta estática preferida. El formulario hará peticionesfetchal backend configurado. -
Para navegar por los módulos del ERP, inicia sesión y utiliza las pantallas disponibles en
frontend/:dashboard.html– Vista general y accesos directos.maestros-*.html– Secciones de administración de artículos, terceros y almacenes.transacciones-*.html– Órdenes de compra, entradas de almacén, pagos a proveedores y ventas.
-
Crea un nuevo Web Service en Render apuntando al repositorio.
-
Selecciona un runtime de Node.js y establece el comando de inicio a
cd backend && npm install && npm start(Render instalará dependencias y ejecutará el servidor). -
Añade las variables de entorno en la pestaña Environment:
PORT→4000(Render asigna su propio puerto víaPORT, pero mantener el valor por defecto es útil localmente).SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY
-
Despliega el servicio y guarda la URL pública, por ejemplo
https://easy-errp-backend.onrender.com.
- Crea un nuevo Static Site en Render apuntando al mismo repositorio.
- Configura el directorio raíz como
frontendy deja vacío el comando de build (es un sitio estático). - Define la ruta de publicación como
frontendy despliega. - Antes de desplegar, define en Render la variable de entorno
BACKEND_URLcon la URL pública del backend y agrega como comando de build del sitio estáticonpm run build(con directoriofrontend). El script generaráenv.jscon ese valor y el frontend consumirá automáticamente la URL correcta.
- Abre la URL del sitio estático desplegado en Render.
- Introduce el correo y la contraseña configurados en Supabase.
- Si las credenciales son correctas, recibirás el mensaje de éxito y podrás redirigir al panel privado desde el frontend (ver comentario en
app.js).
- Sustituir el mensaje de éxito por una redirección hacia el dashboard protegido.
- Implementar almacenamiento seguro de sesiones (JWT, cookies, etc.).
- Añadir registro de actividad o logs para intentos fallidos.
Para cualquier ajuste, recuerda sincronizar la configuración entre frontend, backend y Supabase.