Tu cartera, de un vistazo.
Capital, ganancia acumulada, pagos, previsiones y distribución por producto. Gráficos con periodos de 6 y 12 meses y opción de ocultar importes.
Aplicación full stack / 2026
Una plataforma. Cuatro perspectivas.
Una aplicación de gestión con carteras, contratos, colaboradores y un panel de administración. Explora una demo con cuatro roles y una API REST preparada para conectar una futura app Android.

Presentar una aplicación de gestión completa en un VPS pequeño, con distintos niveles de acceso y una experiencia que cualquier visitante pueda recorrer sin introducir información personal.
El proyecto utiliza PostgreSQL para la persistencia. Un backend Django comparte la lógica de contratos y cálculos entre la web y la API. Los permisos filtran los datos por usuario, colaborador, administrador o developer. La interfaz utiliza plantillas, CSS y JavaScript locales, sin un proceso Node en el servidor.
Cuatro accesos públicos, un panel personal, gestión y seguimiento por rol, documentos privados de ejemplo y un explorador de la API. El despliegue usa un contenedor independiente y un subdominio del portafolio.
04 / LA EXPERIENCIA
Capital, ganancia acumulada, pagos, previsiones y distribución por producto. Gráficos con periodos de 6 y 12 meses y opción de ocultar importes.
Consulta condiciones, periodos, pagos y aumentos de capital. Descarga documentos de ejemplo con comprobación de permisos en el servidor.
El colaborador ve su cartera de clientes asignados y sus contratos. El usuario accede a sus datos y subcuentas; los accesos ajenos se deniegan.
Administración reúne usuarios, colaboradores, productos, contratos y reportes. Developer añade versiones del software, documentación de la API y auditoría ficticia.
Cuatro cuentas seleccionables en el inicio de sesión. Datos iniciales: 12 perfiles ficticios, 4 productos y 17 contratos. Las operaciones de consulta funcionan con datos reales de la base de demostración.
El proyecto utiliza PostgreSQL; la demo pública usa SQLite en modo WAL para reducir recursos. Un proceso Gunicorn con dos hilos y recursos estáticos locales, sin Redis, Celery, servidores Node ni servicios de correo.
05 / PRUÉBALO TÚ
Estas credenciales son públicas y exclusivas de esta demo. Los cambios de datos están bloqueados para conservar la experiencia de todos los visitantes. Developer es un rol de la aplicación, sin acceso al servidor.
| Rol | Usuario | Contraseña | Qué puedes ver |
|---|---|---|---|
| Usuario | usuario.demo | UsuarioDemo2026! | Cartera personal, contratos, movimientos y documentos. |
| Colaborador | colaborador.demo | ColaboraDemo2026! | Clientes asignados, seguimiento de contratos y comisiones. |
| Administrador | admin.demo | AdminDemo2026! | Visión global de usuarios, productos, contratos y reportes. |
| Developer | developer.demo | DevDemo2026! | Panel técnico, documentación API y auditoría de ejemplo. |
06 / POR DENTRO
Nginx recibe HTTPS y Caddy enruta el subdominio hacia un contenedor Django sin puertos publicados. La sesión web utiliza cookies protegidas y CSRF. La API usa JWT de 10 minutos, renovación con rotación y revocación del refresh token. Los documentos permanecen fuera de los recursos públicos. El proyecto utiliza PostgreSQL como base de datos. Para reducir el consumo del VPS, esta demo pública utiliza SQLite en modo WAL y conserva sus datos y documentos en un volumen independiente.
| Tecnología | Versión / alcance | Para qué se utiliza |
|---|---|---|
| Python | 3.12 en Docker | Backend, cálculos, automatización y pruebas. |
| Django | 5.2.18 LTS | ORM, sesiones, formularios, plantillas, permisos, migraciones y protección CSRF. |
| Django REST Framework | 3.16.1 | Serialización JSON, permisos, paginación y límites de solicitudes. |
| Simple JWT | 5.5.1 | Tokens de acceso y renovación, rotación y lista de revocación. |
| drf-spectacular | 0.29.0 | Contrato OpenAPI generado desde los endpoints de la aplicación. |
| WhiteNoise | 6.12.0 | Servicio y compresión de los archivos estáticos dentro del contenedor. |
| Gunicorn | 25.3.0 | Servidor WSGI: un worker y dos hilos para el VPS. |
| django-private-storage | 3.1.3 | Acceso controlado a documentos almacenados fuera de static. |
| django-widget-tweaks | 1.5.1 | Presentación de campos de formularios en las plantillas. |
| python-dateutil / Pillow | 2.9.0.post0 / 12.3.0 | Periodos de calendario y soporte de campos de imagen del catálogo. |
| HTML5, CSS y JavaScript | Plantillas y JavaScript nativo | Interfaz adaptable, navegación, gráficos SVG y explorador de API sin framework SPA. |
| Bootstrap / Bootstrap Icons | 5.3.5 / 1.11.3 | Componentes de interfaz e iconos, alojados localmente con sus licencias. |
| Manrope | Fuente local WOFF2 | Tipografía de la aplicación, sin peticiones a proveedores de fuentes. |
| PostgreSQL | Base de datos del proyecto | Persistencia relacional del proyecto. La demo pública sustituye este servicio por SQLite para reducir el consumo del VPS. |
| SQLite (solo demo) | Incluida en la imagen Python | Persistencia con WAL exclusiva de la demo pública; permite probarla sin otro servidor de base de datos. |
| Docker Compose, Caddy y Nginx | Infraestructura del VPS | Contenedor con límites de recursos, red interna, HTTPS y subdominio propio. |
| Certbot / Let’s Encrypt | Infraestructura del VPS | Emisión y renovación de certificados TLS. |
07 / WEB HOY. ANDROID DESPUÉS.
La API REST v1 ya está implementada y se puede probar en el navegador. La futura app será sólo para Android: propuesta de Kotlin, Jetpack Compose y Retrofit. Compartirá la API y los permisos de la web. La app móvil y sus pantallas todavía no forman parte de esta entrega.
| Método | Ruta | Función |
|---|---|---|
POST | auth/login/ | Valida credenciales y emite un reto de acceso de 5 minutos. |
POST | auth/verify-otp/ | Consume el reto y el OTP 123456; devuelve access y refresh JWT. |
POST | auth/refresh/ · auth/logout/ | Renueva con rotación o revoca el refresh token. El access expira a los 10 minutos. |
GET | me/ · resumen/ | Perfil autenticado e indicadores de los contratos visibles. |
GET | usuarios/ · productos/ | Listados paginados; usuarios filtrados según el rol. |
GET | contratos/ · pagos/ | Consulta contratos y movimientos dentro del ámbito del usuario. |
GET | contratos/{id}/documento/ | Descarga protegida del documento sintético del contrato. |