Simple management for any business. / GestiĂłn simple para cualquier negocio.
Full-stack web system for SMBs and retail: products, stock, customers, POS, daily cash register, reports, and role-based users. Not a landing page — a usable end-to-end tool.
Sistema web completo para PyMEs y comercios: productos, stock, clientes, punto de venta, caja del dĂa, reportes y usuarios con roles. No es un landing — es una herramienta usable de punta a punta.
Repository: github.com/Jorgeotero1998/Negociov2
Small businesses need something practical: sell fast, control stock, close the cash register, and see what moved. Negocio covers that daily flow without ERP complexity.
| Layer | Technology |
|---|---|
| Backend | Java 21 · Spring Boot 3.4 · Spring Security · Spring Data JPA · Validation |
| UI | Thymeleaf · custom CSS · lightweight JS (POS) |
| Database | PostgreSQL 16 (prod/docker) · optional H2 for local trials |
| Packaging | Maven · Docker · Docker Compose |
| Security | BCrypt · roles OWNER / EMPLOYEE · CSRF on forms |
Requirements: Docker Desktop with Compose
git clone https://github.com/Jorgeotero1998/Negociov2.git
cd Negociov2
docker compose up --buildFirst run builds the app, starts Postgres, and seeds demo data.
Note: Postgres is exposed on the host as
localhost:5433(to avoid clashing with a local Postgres on 5432). Inside Compose the app still usesdb:5432.
Stop
docker compose downAlso wipe database volumes:
docker compose down -v| User | Password | Role |
|---|---|---|
dueno |
dueno123 |
Owner (OWNER) |
empleado |
empleado123 |
Employee (EMPLOYEE) |
If the database is empty, you can also register the first owner at /register.
- Login → dashboard with today’s sales, tickets, and low-stock alerts
- New sale (POS) → search by name/SKU, quantity, Enter to add, choose payment, charge. Blocks overselling and warns on low stock
- Ticket → detail + printable view · “Next customer”
- Products → CRUD, stock ±1, alert threshold
- Customers → optional directory linked to sales
- Cash register → open with float, movements by payment method, expected cash, close the day
- Reports → date range, top products, sales list, low stock
- Users (owner only) → create employees/owners, activate/deactivate
Needs Java 21 and Maven 3.9+.
Option A — Postgres in Docker only
docker compose up db -d
mvn spring-boot:runUses profile dev (Postgres on localhost:5432, user/pass negocio/negocio — adjust if your Compose maps 5433).
Option B — embedded H2 (fast)
mvn spring-boot:run -Dspring-boot.run.profiles=h2Tests
mvn testCovers core sales + stock and cash register logic.
| Variable | Description | Example |
|---|---|---|
SPRING_PROFILES_ACTIVE |
Profile | prod or docker |
SPRING_DATASOURCE_URL |
JDBC Postgres | jdbc:postgresql://host:5432/negocio |
SPRING_DATASOURCE_USERNAME |
DB user | negocio |
SPRING_DATASOURCE_PASSWORD |
DB password | (secret) |
PORT |
HTTP port | 8080 |
NEGOCIO_SEED |
Seed demo data | true / false |
In production, set NEGOCIO_SEED=false after the first boot (or once users already exist).
- Create a PostgreSQL service and copy the URL
- Deploy this repo (Dockerfile ready)
- Set:
SPRING_PROFILES_ACTIVE=prodSPRING_DATASOURCE_URL/USERNAME/PASSWORDNEGOCIO_SEED=trueonly on first deploy if you want demo data
- Expose port
8080(or whatever the platform sets viaPORT)
Works on Railway, Render, Fly.io, and similar platforms.
com.negocio
├── config # Security, seeder
├── domain # Entities and enums
├── repo # Spring Data JPA
├── security # UserDetailsService
├── service # Business rules + transactions
└── web # Controllers, DTOs, advice
Sales are transactional: require an open register, decrement stock, and record a cash movement in one operation.
- Fonts: Fraunces (brand) + DM Sans (UI)
- Palette: ink/charcoal + teal accent
- Strong login brand; dashboard with quick actions
- POS: work screen — code search, large ticket, payment buttons, cash change, F2 shortcut
- Principle: easy to use on the outside, serious business rules underneath
Negocio — SMB management system in Java (Spring Boot). Includes POS/cash register, stock, customers, reports, and roles. Simple UX, complete logic (atomic sales, stock control, open/close cash).
Portfolio / demo / learning project — free to use for those purposes.
Muchos negocios chicos necesitan algo práctico: vender rápido, controlar stock, cerrar caja y ver qué se movió. Negocio cubre ese flujo diario sin complejidad de ERP.
| Capa | TecnologĂa |
|---|---|
| Backend | Java 21 · Spring Boot 3.4 · Spring Security · Spring Data JPA · Validation |
| UI | Thymeleaf · CSS propio · JS ligero (POS) |
| Base de datos | PostgreSQL 16 (prod/docker) · H2 opcional para pruebas locales |
| Empaquetado | Maven · Docker · Docker Compose |
| Seguridad | BCrypt · roles OWNER / EMPLOYEE · CSRF en formularios |
Requisitos: Docker Desktop con Compose
git clone https://github.com/Jorgeotero1998/Negociov2.git
cd Negociov2
docker compose up --buildAbrĂ http://localhost:8080
La primera vez compila la app, levanta Postgres y siembra datos demo.
Nota: Postgres queda expuesto en el host como
localhost:5433(para no chocar con un Postgres local en 5432). Dentro de Compose la app sigue usandodb:5432.
Detener
docker compose downPara borrar también los datos de la base:
docker compose down -v| Usuario | Contraseña | Rol |
|---|---|---|
dueno |
dueno123 |
Dueño (OWNER) |
empleado |
empleado123 |
Empleado (EMPLOYEE) |
Si la base está vacĂa y no hay dueño, tambiĂ©n podĂ©s registrar el primer dueño en /register.
- Login → dashboard con ventas del dĂa, tickets y alertas de stock
- Nueva venta (POS) → buscar por nombre/SKU, cantidad, Enter para agregar, elegir pago, cobrar. Bloquea sobreventa y avisa stock bajo
- Ticket → detalle + vista imprimible · “Siguiente cliente”
- Productos → CRUD, ajuste de stock ±1, umbral de alerta
- Clientes → agenda opcional asociada a ventas
- Caja → abrir con fondo, ver movimientos por mĂ©todo de pago, efectivo esperado, cerrar el dĂa
- Reportes → rango de fechas, top productos, listado de ventas, stock bajo
- Usuarios (solo dueño) → crear empleados / dueños y activar/desactivar
Necesitás Java 21 y Maven 3.9+.
Opción A — solo Postgres en Docker
docker compose up db -d
mvn spring-boot:runUsa el perfil dev (Postgres en localhost:5432, user/pass negocio/negocio — ajustá si Compose mapea 5433).
Opción B — H2 embebido (rápido)
mvn spring-boot:run -Dspring-boot.run.profiles=h2Tests
mvn testIncluye tests del nĂşcleo de ventas + stock y caja.
| Variable | DescripciĂłn | Ejemplo |
|---|---|---|
SPRING_PROFILES_ACTIVE |
Perfil | prod o docker |
SPRING_DATASOURCE_URL |
JDBC Postgres | jdbc:postgresql://host:5432/negocio |
SPRING_DATASOURCE_USERNAME |
Usuario DB | negocio |
SPRING_DATASOURCE_PASSWORD |
Password DB | (secreto) |
PORT |
Puerto HTTP | 8080 |
NEGOCIO_SEED |
Sembrar demo | true / false |
En producción conviene NEGOCIO_SEED=false después del primer arranque (o cuando ya existan usuarios).
- Crear un servicio PostgreSQL y copiar la URL
- Desplegar la app desde este repo (Dockerfile listo)
- Configurar:
SPRING_PROFILES_ACTIVE=prodSPRING_DATASOURCE_URL/USERNAME/PASSWORDNEGOCIO_SEED=truesolo en el primer deploy si querés datos demo
- Exponer el puerto
8080(o el que asigne la plataforma vĂaPORT)
Sirve para Railway, Render, Fly.io y plataformas similares.
com.negocio
├── config # Security, seeder
├── domain # Entidades y enums
├── repo # Spring Data JPA
├── security # UserDetailsService
├── service # Reglas de negocio + transacciones
└── web # Controllers, DTOs, advice
Las ventas son transaccionales: validan caja abierta, descuentan stock y registran movimiento de caja en la misma operaciĂłn.
- TipografĂas: Fraunces (marca) + DM Sans (UI)
- Paleta: tinta/carbĂłn + acento teal
- Login con marca fuerte; dashboard con accesos rápidos
- Caja (POS): pantalla de trabajo — búsqueda por código, ticket grande, botones de pago, vuelto en efectivo, atajo F2
- Principio: fácil de manejar por fuera, reglas de negocio serias por dentro
Negocio — Sistema de gestión para PyMEs en Java (Spring Boot). Incluye POS/caja, stock, clientes, reportes y roles. UX simple, lógica completa (ventas atómicas, control de stock, apertura/cierre de caja).
Proyecto de portfolio / uso libre para demos y aprendizaje.