Files
gkachele-saas/memoria/DOCUMENTACION_PROYECTO.md
2026-01-17 11:40:17 +01:00

219 lines
5.9 KiB
Markdown

# 📖 Documentación del Proyecto - GKACHELE™
**© 2025 GKACHELE™. Todos los derechos reservados.**
## 🎯 ¿Qué Estamos Construyendo?
Un **SaaS (Software as a Servicio)** para que clientes creen y gestionen sus propios sitios web, similar a sistemas populares pero mejorado y personalizado.
### Funcionalidad Principal:
- Clientes se registran → Crean su sitio → Lo personalizan → Lo publican
- Todo desde una interfaz web simple
- Sistema multi-tenant (todos los clientes en una sola base de datos)
---
## 🏗️ Arquitectura Técnica
### ¿Por qué Python/Flask y NO Docker?
**Sí, es por la Raspberry Pi:**
- Raspberry Pi tiene recursos limitados
- Docker consume más memoria y CPU
- Python directo es más ligero y eficiente
- Más fácil de depurar y mantener
- **En VPS podrías usar Docker si quieres**, pero Python directo también funciona perfecto
### Stack Tecnológico:
- **Backend:** Flask (Python 3)
- **Base de Datos:** SQLite (`main.db` - multi-tenant)
- **Frontend:** HTML, CSS, JavaScript
- **Servidor Web:** Nginx (reverse proxy)
- **Hosting:** Raspberry Pi 3 (actual) / VPS (recomendado para producción)
---
## 🗄️ Base de Datos
### Estructura Multi-tenant:
**TODO en una sola base de datos (`main.db`):**
- `users` - Todos los usuarios/clientes
- `sites` - Todos los sitios (filtrados por `user_id`)
- `menus` - Menús dinámicos
- `widgets` - Widgets dinámicos
- `content` - Contenido
- `settings` - Configuraciones
- `requests` - Solicitudes de publicación
- `media` - Archivos subidos
### Acceso a Base de Datos:
- **Tu acceso:** Panel `/admin` (solo rol `administrator`)
- **Acceso clientes:** Solo ven SUS datos (filtrado por `user_id`)
- **Herramientas:** DB Browser for SQLite, scripts Python (`ver_usuarios.py`, `limpiar_db.py`)
---
## 👥 Sistema de Usuarios y Roles
### Roles (desde Base de Datos):
- `administrator` - Acceso total (tú)
- `editor` - Puede editar contenido
- `author` - Puede crear contenido
- `subscriber` - Solo lectura
### Admin para Clientes:
- **Panel `/dashboard`** - Cliente ve SUS sitios
- **Panel `/customizer/{site_id}`** - Personalizar sitio
- **Panel `/dashboard/admin`** - Admin del cliente (media, config)
---
## 🔒 Limitaciones por Plan
### Sistema Actual:
- **Planes:** `base`, `premium`, etc. (campo en tabla `users`)
- **Limitaciones posibles:**
- Número de sitios
- Subida de fotos (tamaño, cantidad)
- Modificaciones (frecuencia, tipo)
- Funcionalidades avanzadas
### Implementación:
- Verificar plan antes de acciones
- Contar recursos usados vs. límites del plan
- Bloquear acciones si excede límite
---
## 📊 Detección de Movimientos
### Sistema Actual:
- **No hay detección automática** de movimientos aún
- **Registros disponibles:**
- `created_at` - Fecha de creación
- `updated_at` - Fecha de actualización
- Logs del servidor (journalctl)
### Posibles Mejoras:
- Tabla `activity_log` para registrar acciones
- Notificaciones de cambios
- Historial de modificaciones
- Auditoría de cambios
---
## 🚀 VPS vs Raspberry Pi
### Raspberry Pi (Actual):
- ✅ Bajo costo
- ✅ Suficiente para desarrollo/pruebas
- ❌ Recursos limitados
- ❌ Puede ser lento con muchos clientes
### VPS (Recomendado para Producción):
- ✅ Más recursos (CPU, RAM, disco)
- ✅ Mejor rendimiento
- ✅ Más confiable
- ✅ Mejor para escalar
- ✅ Puedes usar Docker si quieres
- ✅ Mismo código funciona (solo cambiar configuración)
### Migración a VPS:
1. Copiar código completo
2. Instalar Python3, Nginx
3. Copiar configuración
4. Cambiar dominio
5. Configurar SSL (Let's Encrypt)
6. **Mismo código, más potencia**
---
## 🔄 Flujo Completo del Sistema
```
1. Cliente → Landing Page
2. Cliente → Registro (/register)
├── Crea usuario en `users`
├── Crea sitio automático en `sites`
└── Crea menús por defecto en `menus`
3. Cliente → Login (/login)
└── Redirige a `/customizer/{site_id}` (directo)
4. Cliente → Customizer
├── Personaliza contenido
├── Cambia colores, tipografía
└── Gestiona menús y widgets
5. Cliente → Envía para aprobación
└── Crea solicitud en `requests`
6. Admin → Aprueba desde `/admin`
└── Cambia status a `published`
7. Sitio → Público en `/site/{slug}`
```
---
## 📁 Estructura del Proyecto
```
c:\word\
├── demo/ # Código principal
│ ├── app.py # Flask backend (TODO aquí)
│ ├── database/
│ │ └── main.db # Base de datos multi-tenant
│ ├── themes/ # Templates
│ │ ├── _gkachele/ # Sistema modular (header.php, footer.php, sidebar.php)
│ │ └── {tema}/ # Temas específicos
│ ├── templates/ # HTML templates
│ └── static/ # CSS, JS
├── memoria/ # 📚 TODA LA DOCUMENTACIÓN
└── backups/ # Backups automáticos
```
---
## 🎯 Estado Actual
### ✅ Funcionando:
- Registro de clientes
- Login (redirige a customizer)
- Dashboard del cliente
- Customizer (personalización)
- Sistema de menús y widgets
- Panel admin (ver/eliminar usuarios)
- Sistema de roles basado en DB
### ⚠️ Pendiente:
- Limitaciones por plan
- Detección de movimientos/actividad
- Mejorar landing page
- Integración Gitea
- UI completa para gestionar menús
---
## 🔐 Seguridad
- Passwords hasheados (Werkzeug)
- Sesiones Flask
- Filtrado por `user_id` (cada cliente solo ve sus datos)
- Roles desde base de datos (no hardcodeados)
- Verificación de permisos en cada ruta
---
## 📝 Próximos Pasos
1. **Implementar limitaciones por plan**
2. **Sistema de actividad/logs**
3. **Mejorar UI del customizer**
4. **Optimizar para VPS**
5. **Añadir más funcionalidades**
---
**Última actualización:** 14 Enero 2025
**Hash:** `gkachele-documentacion-completa-20250114`
---
**© 2025 GKACHELE™. Todos los derechos reservados.**