Inventory Manager PWA es una aplicación web progresiva desarrollada para la gestión eficiente de inventarios. La aplicación permite realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre productos de inventario de manera intuitiva y con capacidades offline.
Este proyecto fue desarrollado como parte de un trabajo universitario para demostrar el uso de tecnologías web modernas y patrones de desarrollo de aplicaciones progresivas, con una arquitectura robusta que incluye PostgreSQL como base de datos.
- 📱 Progressive Web App (PWA): Funciona tanto en navegadores como aplicación instalable
- 🔄 Operaciones CRUD completas: Crear, leer, actualizar y eliminar productos
- 💾 - SQLite3: Base de datos SQL ligera
- 🎨 Interfaz moderna: Diseño responsivo con Tailwind CSS
- ⚡ API RESTful: Backend robusto con Express.js
- 📊 Gestión de categorías: Organización de productos por categorías
- 🔍 Datos de ejemplo: Productos precargados para pruebas
- React 18: Biblioteca de JavaScript para construir interfaces de usuario
- Tailwind CSS: Framework de CSS para diseño responsivo
- Font Awesome: Iconografía moderna
- Service Workers: Para funcionalidad offline
- Node.js: Entorno de ejecución de JavaScript
- Express.js: Framework web para Node.js
- PostgreSQL: Base de datos relacional robusta y escalable
- CORS: Middleware para Cross-Origin Resource Sharing
- Nodemon: Herramienta de desarrollo para reinicio automático
- Babel: Transpilador de JavaScript
Antes de ejecutar este proyecto, asegúrate de tener instalado:
- Node.js (versión 18 o superior)
- npm (incluido con Node.js)
- PostgreSQL (versión 12 o superior)
- Un navegador web moderno
git clone https://github.com/nicopetcoff/Inventory.git
cd Inventorynpm install- Instala PostgreSQL desde postgresql.org
- Crea una base de datos llamada
inventory_db - Configura las variables de entorno (opcional):
# Windows PowerShell
$env:DB_USER="postgres"
$env:DB_PASSWORD="tu_contraseña"
$env:DB_NAME="inventory_db"
$env:DB_HOST="localhost"
$env:DB_PORT="5432"docker run --name postgres-inventory -e POSTGRES_PASSWORD=InventoryUni2025! -e POSTGRES_DB=inventory_db -p 5432:5432 -d postgres:13npm startLa aplicación estará disponible en: http://localhost:80
- Ver productos: La página principal muestra todos los productos del inventario
- Agregar producto: Crear nuevos productos con información detallada
- Editar producto: Modificar información de productos existentes
- Eliminar producto: Remover productos del inventario
- Filtrar por categoría: Organizar productos por categorías
Cada producto contiene los siguientes campos:
- Nombre: Nombre del producto
- Categoría: Clasificación del producto
- Cantidad: Stock disponible
- Precio: Precio unitario
- Descripción: Información adicional del producto
inventory/
├── public/
│ ├── app.js # Aplicación React principal
│ ├── index.html # Página HTML base
│ ├── manifest.json # Configuración PWA
│ └── sw.js # Service Worker
├── server.js # Servidor Express y API con PostgreSQL
├── package.json # Configuración del proyecto
├── LICENSE # Licencia del proyecto
└── README.md # Documentación
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
category VARCHAR(100) NOT NULL,
quantity INTEGER NOT NULL,
price DECIMAL(10,2) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);El proyecto utiliza las siguientes variables de entorno para la configuración de PostgreSQL:
| Variable | Valor por defecto | Descripción |
|---|---|---|
DB_USER |
postgres |
Usuario de PostgreSQL |
DB_PASSWORD |
InventoryUni2025! |
Contraseña de PostgreSQL |
DB_NAME |
inventory_db |
Nombre de la base de datos |
DB_HOST |
localhost |
Host del servidor PostgreSQL |
DB_PORT |
5432 |
Puerto de PostgreSQL |
PORT |
80 |
Puerto del servidor web |
$env:DB_USER="postgres"
$env:DB_PASSWORD="InventoryUni2025!"
$env:DB_NAME="inventory_db"# Instalar PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-contrib
# Configurar PostgreSQL
sudo -u postgres psql
CREATE DATABASE inventory_db;
ALTER USER postgres PASSWORD 'InventoryUni2025!';
\q
# Configurar variables de entorno
export DB_USER="postgres"
export DB_PASSWORD="InventoryUni2025!"
export DB_NAME="inventory_db"
export DB_HOST="localhost"
export DB_PORT="5432"
# Para puerto 80 (requiere sudo)
export PORT="80"
sudo npm start
# O usar puerto 3000 (sin sudo)
export PORT="3000"
npm startLa aplicación expone los siguientes endpoints REST:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/products |
Obtener todos los productos |
| GET | /api/products/:id |
Obtener un producto específico |
| POST | /api/products |
Crear un nuevo producto |
| PUT | /api/products/:id |
Actualizar un producto existente |
| DELETE | /api/products/:id |
Eliminar un producto |
{
"id": 1,
"name": "Laptop Pro",
"category": "Electronics",
"quantity": 15,
"price": 1299.99,
"description": "High-performance laptop",
"created_at": "2025-09-14T10:30:00.000Z",
"updated_at": "2025-09-14T10:30:00.000Z"
}- Instalable: Puede instalarse como aplicación nativa
- Offline: Funciona sin conexión a internet (próximamente)
- Responsivo: Se adapta a diferentes tamaños de pantalla
- Manifest: Configuración completa de metadatos PWA
npm start: Inicia el servidor de desarrollonpm test: Ejecuta las pruebas (pendiente implementación)
-
Error de conexión a PostgreSQL:
- Verifica que PostgreSQL esté ejecutándose
- Comprueba las credenciales en las variables de entorno
- Asegúrate de que la base de datos
inventory_dbexiste
-
Puerto 80 ocupado:
- En Windows, el puerto 80 puede estar ocupado por IIS
- Cambia la variable de entorno:
$env:PORT="3000" - O ejecuta como administrador
-
Permisos en puerto 80:
- En sistemas Unix/Linux, el puerto 80 requiere privilegios de administrador
- Ejecuta con
sudo npm starto usa un puerto diferente
# Verificar si PostgreSQL está ejecutándose
Get-Service postgresql*
# Conectar a PostgreSQL desde línea de comandos
psql -U postgres -d inventory_db
# Crear la base de datos manualmente
createdb -U postgres inventory_db