Aplicación de escritorio para gestión de gimnasios construida como producto comercial real: DRM por hardware (RSA + SHA-256), UI reactiva con JavaFX Property Bindings, captura de fotos con OpenCV, BD embebida auto-inicializada e instalador nativo que incluye JRE — sin frameworks externos, sin dependencia de internet. El proyecto motivó una migración arquitectónica consciente a Spring Boot + React.
🚀 Impacto y Números
- 10,700+ líneas de código en 59 clases Java con 17 vistas FXML
- Sistema de licencias comercial real: fingerprint de hardware (motherboard serial + CPU ID) firmado con RSA
- 100% offline: BD embebida H2 auto-inicializada desde SQL embebido en el JAR
- Zero-config para el usuario final: instalador
.execon JRE embebido viajpackage— no requiere instalar Java - Cross-platform: hardware fingerprint funciona en Windows, macOS y Linux con paths específicos por OS
⚡ Cómo está construido
Sistema de licencias DRM por hardware
- Fingerprint único: combina motherboard serial + CPU ID, los hashea con SHA-256 y firma el resultado con clave privada RSA usando
License3j— la licencia es inválida en hardware diferente al registrado - Flujo de distribución real: el cliente genera su fingerprint con
HardwareIdTool, el vendedor emite la licencia.licconLicenseGeneratory la firma offline — arquitectura de ISV real, no un tutorial - Fallback defensivo:
getLinuxCpuSerial()cae en el model name del CPU cuando no hay serial (ARM vs x86)
UI reactiva con JavaFX Properties & Bindings
- Observer pattern nativo:
BooleanProperty,StringProperty,IntegerPropertyconaddListener()— reactividad sin boilerplate, sin frameworks de estado - Dos ventanas sincronizadas en tiempo real: la pantalla del recepcionista y la del monitor del cliente comparten las mismas
Property— sin polling, sin eventos manuales - Tarjeta de cliente con estados visuales: color, texto y botones cambian automáticamente (verde=vigente, rojo=vencida, morado=no iniciada) con fade + auto-dismiss a 3s
Integración OpenCV y auto-arranque
- Captura de foto con OpenCV 4.9: la UI abre la webcam para el perfil del cliente directamente desde JavaFX, integrando JNI nativo
- BD auto-inicializada:
Conexiondetecta el primer arranque y ejecutah2_schema.sqlembebido — zero-config garantizado
🛠️ Stack
Core: Java 21, JavaFX 21 (FXML + CSS custom) Libs: H2 2.3, OpenCV 4.9 (JNI webcam), License3j 3.3 (DRM RSA), SLF4J + Logback Tools: Maven, maven-shade-plugin (uber-jar), jpackage-maven-plugin (instalador .exe) Patterns: MVC, DAO (JDBC puro), Observer/Property Binding, DTO, Flyweight (caché de sonidos)
💼 Lo que este proyecto demuestra
Este proyecto demuestra que puedo:
- ✅ Construir software pensado para ser vendido y distribuido a clientes reales — no solo para una demo de portfolio
- ✅ Implementar sistemas de seguridad no triviales: criptografía asimétrica + hardware binding aplicados a un problema de negocio concreto
- ✅ Tomar decisiones arquitectónicas conscientes y documentar su evolución (V1 → migración a Spring Boot)
- ✅ Integrar ecosistemas complejos: JVM, librerías nativas (OpenCV JNI), herramientas de build (jpackage)
- ✅ Modelar dominios de negocio reales: membresías, deudas, inventario, caja, control de acceso
Diferenciador clave: No es un CRUD con Bootstrap. Es un producto completo con modelo de distribución, DRM comercial y una decisión de migración arquitectónica documentada — todo nacido de un problema real que el autor quería resolver.