El proyecto está dividido en dos partes:
- 💻frontend con React, TypeScript, Vite y Tailwind CSS
- ⚙️backend con Node.js, Express, Prisma y PostgreSQL
- Autenticación con JWT almacenado en cookies HttpOnly y refresh token.
- Roles de usuario con acceso diferenciado entre administrador y empleado.
- Gestión de productos, proveedores y clientes.
- Registro de entradas de stock con detalle por producto y proveedor.
- Registro de salidas de stock con control de pago y método de pago.
- Vista de stock consolidado por producto y proveedor.
- Dashboard administrativo con KPIs, actividad reciente y gráficos.
- Resúmenes por cliente, producto y rangos de fechas.
- Carga de documentos adjuntos en productos, entradas y salidas.
- React 19
- TypeScript
- Vite
- Tailwind CSS
- React Router
- Redux Toolkit
- TanStack Query
- Axios
- Recharts
- Radix UI
- Node.js
- Express
- Prisma ORM
- PostgreSQL
- JWT
- bcrypt
- cookie-parser
- cors
Stockapp/
├── backend/
│ ├── controllers/
│ ├── middleware/
│ ├── prisma/
│ ├── routes/
│ ├── index.js
│ └── package.json
├── frontend/
│ ├── public/
│ ├── src/
│ │ ├── api/
│ │ ├── components/
│ │ ├── context/
│ │ ├── lib/
│ │ ├── pages/
│ │ ├── routes/
│ │ ├── services/
│ │ ├── store/
│ │ └── types/
│ └── package.json
|__ LICENSE
└── README.md
- Dashboard: panel administrativo con ingresos, gastos, ventas, alertas de stock y actividad reciente.
- Stock: consulta del stock actual por producto y proveedor.
- Entradas: registro de compras y actualización de stock.
- Salidas: registro de ventas, control de cobro y descuento de stock.
- Administración: ABM de productos, clientes y proveedores.
- Resúmenes: reportes segmentados por cliente, producto o rango de fechas.
Node.js20 o superiornpm10 o superiorPostgreSQLdisponible localmente o en servidor remoto
Crear un archivo backend/.env tomando como base backend/.envexample:
DATABASE_URL="postgresql://USER:PASSWORD@HOST:5432/DB_NAME?schema=public"
JWT_SECRET=tu_access_secret
JWT_EXPIRES_IN=15m
JWT_REFRESH_SECRET=tu_refresh_secret
JWT_REFRESH_EXPIRES_IN=7d
NODE_ENV=development
PORT=3000Crear un archivo frontend/.env tomando como base frontend/.envexample:
VITE_API_URL=http://localhost:3000/api# 1. Clonar el repositorio
git clone https://github.com/TU_USUARIO/stockapp.git
cd stockapp
# 2. Instalar dependencias
cd backend
npm install
cd ../frontend
npm install
# 3. Configurar la base de datos
## Con la variable DATABASE_URL lista, ejecutar en backend/:
npx prisma generate
npx prisma migrate dev
## Si solo querés aplicar migraciones existentes en un entorno ya preparado:
npx prisma migrate deploy# Desde `backend/`:
node index.js
## El servidor queda disponible en `http://localhost:3000`.
# Desde `frontend/`:
npm run dev
## La aplicación queda disponible en `http://localhost:5173`.- El login se realiza contra
/api/auth/login. - La sesión se mantiene mediante cookies HttpOnly (
accessTokenyrefreshToken). - El dashboard y los resúmenes están restringidos al rol
administrador. - Las operaciones operativas de stock pueden ser utilizadas por usuarios autenticados, según las validaciones del backend.
Roles presentes en el modelo de datos:
- administrador
- empleado
El esquema Prisma modela las siguientes entidades principales:
- Usuario
- Rol
- Producto
- Proveedor
- Cliente
- Stock
- Entrada y EntradaDetalle
- Salida y SalidaDetalle
El archivo de esquema se encuentra en backend/prisma/schema.prisma.
Rutas montadas en el backend:
/api/auth/api/productos/api/clientes/api/proveedores/api/entradas/api/salidas/api/stock/api/resumenes/api/dashboard
Este proyecto se distribuye bajo la licencia ISC. Ver LICENSE.
- Al redistribuir o reutilizar el código, debe mantenerse el aviso de copyright y licencia.