docs: actualizar memoria, errores, ideas, infraestructura y readme detallado

This commit is contained in:
2026-10-13 22:53:34 -05:00
parent 8519590cc7
commit 9cdc6f702c
5 changed files with 204 additions and 56 deletions
+112 -34
View File
@@ -1,61 +1,139 @@
# app_compartir
# 🚀 app_compartir
Aplicación web de alto rendimiento en Go para compartir archivos, fotos, documentos y texto/código al instante entre dispositivos (móvil y PC), sin depender de clientes de mensajería como WhatsApp.
> **Pasa fotos, notas, PDFs y archivos entre tu teléfono y tu ordenador en segundos — sin necesidad de abrir WhatsApp ni mandar mensajes a tu propio chat.**
Una aplicación web ágil, moderna y ligera desarrollada en **Go**. Permite transferir cualquier tipo de archivo o texto con generación instantánea de enlace y código QR para escanearlo con la cámara del móvil.
---
## Características
## 🎯 ¿Qué problema resuelve?
- ⚡ **Sin fricción:** Subida mediante Drag & Drop, selección de archivos, pegado desde portapapeles (`Ctrl+V`) o editor de notas/código.
- 📱 **QR instantáneo:** Generación automática de código QR para escanear y abrir de inmediato en el teléfono.
- 👁️ **Visor universal (`/v/{id}`):**
- **Imágenes:** Zoom interactivo, pantalla completa y alta fidelidad.
- **Video y Audio:** Reproductor HTML5 integrado.
- **PDFs:** Visor interactivo incrustado en el navegador.
- **Texto y Código:** Formato monospace con botón para copiar al portapapeles en 1 clic.
- **Otros archivos:** Ficha de descarga con detección de tipo MIME y peso exacto.
- ⏳ **Política de retención 24h para invitados:**
- Los archivos subidos en **Modo Invitado (Guest)** se purgan automáticamente tras 24 horas del disco y de la base de datos.
- Los usuarios autenticados con **WebControl** o **Google OAuth** disponen de **almacenamiento permanente** y panel de gestión para sus archivos.
Pasarse una foto de la PC al celular, un fragmento de código, una contraseña temporal o un PDF habitualmente obliga a abrir WhatsApp Web, buscar tu propio chat ("Chat contigo mismo"), enviar el archivo (que a menudo se recomprime) y luego borrarlo.
**app_compartir elimina toda esa fricción:**
1. Arrastras el archivo o pegas una captura con <kbd>Ctrl+V</kbd> en el navegador.
2. Apuntas con la cámara de tu móvil al código QR que aparece en pantalla.
3. ¡Listo! Se abre el visor en tu móvil de forma inmediata.
---
## Requisitos
## ✨ Características Principales
- Go 1.22+
### 📤 Subida sin complicaciones
- **Drag & Drop:** Arrastra cualquier archivo a la ventana.
- **Portapapeles directo:** Presiona <kbd>Ctrl+V</kbd> en cualquier parte de la página para subir capturas de pantalla o texto copiado al instante.
- **Pestaña Texto / Código:** Comparte fragmentos de código, notas de reuniones o enlaces sin crear archivos de texto manualmente.
## Instalación y Arranque
### 📱 Escaneo QR y Enlaces Cortos
- Cada elemento compartido genera una URL corta (`/v/slug`) y un **código QR nativo en pantalla**.
- Puedes escanearlo directamente desde cualquier smartphone sin instalar ninguna app adicional.
### 👁️ Visor Universal Integrado (`/v/{id}`)
No requiere descargar el archivo a ciegas para ver qué es:
- 🖼️ **Imágenes:** Visor con zoom al 100%, pantalla completa y alta calidad (PNG, JPG, GIF, WebP, SVG).
- 🎥 **Video:** Reproductor HTML5 integrado para previsualizar grabaciones o clips (MP4, WebM).
- 🎵 **Audio:** Reproductor nativo para notas de voz o música (MP3, WAV, OGG).
- 📄 **PDFs:** Lector embebido interactivo en el navegador.
- 💻 **Texto / Código:** Formato legible con resaltado monospace y botón para **Copiar texto** al portapapeles con un clic.
- 📦 **Otros archivos:** Ficha técnica con tamaño exacto, tipo de archivo y botón directo de descarga.
---
## 🔒 Política de Retención: Invitado vs Cuenta Registrada
| Característica | 👤 Modo Invitado (Guest) | 🛡️ Cuenta Registrada (WebControl / Google) |
|---|---|---|
| **¿Requiere inicio de sesión?** | **No** (usar y compartir de inmediato) | Sí (login fácil con 1 clic) |
| **Tiempo de vida del archivo** | ⏰ **24 horas exactas** | ♾️ **Permanente** (no expira) |
| **Eliminación automática** | Sí, el worker purga archivo y registro tras 24h | **Nunca** (se conserva hasta que lo borres) |
| **Panel "Mis Archivos"** | No disponible | ✅ Sí (`/mis-archivos`) con historial y métricas |
| **Eliminación manual** | No requerida (se auto-destruye) | ✅ Sí, botón para eliminar cuando quieras |
---
## 🛠️ Stack Tecnológico
- **Lenguaje:** Go (Go 1.22+ / 1.27 con routing nativo `net/http`)
- **Base de Datos:** SQLite local en modo WAL (vía `modernc.org/sqlite`, 100% puro Go sin dependencias CGO)
- **Generador QR:** `github.com/skip2/go-qrcode` (generación ultrarrápida de QR PNG)
- **Frontend:** HTML5, Tailwind CSS y FontAwesome
- **Autenticación:**
- Telcotronics **WebControl** (`https://api.siax-system.net/api/auth/login`)
- **Google OAuth2**
---
## 🚀 Puesta en Marcha Rápida
### 1. Requisitos
- Go 1.22 o superior instalado en el sistema.
### 2. Configurar entorno
Copia la plantilla de variables de entorno:
```bash
# Copiar variables de entorno
cp .env.example .env
```
# Descargar dependencias y compilar
Parámetros disponibles en `.env`:
```env
PORT=8085
BASE_URL=http://localhost:8085
DATA_DIR=./data
SESSION_SECRET=clave_secreta_para_cookies
WEBCONTROL_API_URL=https://api.siax-system.net
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
```
### 3. Compilar y Arrancar
```bash
# Descargar dependencias
go mod tidy
# Compilar binario autónomo
go build -o app_compartir main.go
# Ejecutar el servidor (puerto 8085 por defecto)
# Ejecutar el servidor
./app_compartir
```
---
## Variables de Entorno
| Variable | Descripción | Default |
|---|---|---|
| `PORT` | Puerto de escucha HTTP | `8085` |
| `BASE_URL` | URL pública de la aplicación | `http://localhost:8085` |
| `DATA_DIR` | Carpeta para base de datos y uploads | `./data` |
| `SESSION_SECRET` | Clave secreta para cookies de sesión | `super-secret-...` |
| `WEBCONTROL_API_URL` | URL de la API de WebControl | `https://api.siax-system.net` |
| `GOOGLE_CLIENT_ID` | Client ID de Google OAuth | (opcional) |
| `GOOGLE_CLIENT_SECRET` | Client Secret de Google OAuth | (opcional) |
Abre tu navegador en: **`http://localhost:8085`**
---
## Pruebas automatizadas
## 🧪 Pruebas Automatizadas
El proyecto cuenta con tests automatizados que comprueban la regla estricta de caducidad a las 24 horas para invitados y la permanencia de usuarios registrados:
```bash
go test -v ./...
```
---
## 📂 Estructura del Código
```text
app_compartir/
├── internal/
│ ├── auth/ # Sesiones HTTP-only, WebControl y Google OAuth
│ ├── cleaner/ # Worker periódico de purga automática 24h para invitados
│ ├── config/ # Variables de entorno y rutas
│ ├── db/ # DAL de SQLite, esquema y consultas seguras
│ ├── handlers/ # Controladores HTTP: upload, visor, QR, auth, descarga
│ ├── models/ # Estructuras de datos (Share, User, Session)
│ └── storage/ # Generador de slugs seguros y almacenamiento en disco
├── web/
│ └── templates/ # Plantillas HTML (base, index, visor, login, mis archivos)
├── .agente/ # Documentación interna del agente y ecosistema Telcotronics
├── main.go # Servidor HTTP principal y ciclo de vida de la app
├── main_test.go # Tests de integración de retención y purga
└── README.md # Esta guía
```
---
## 🏢 Ecosistema Telcotronics
Este proyecto forma parte del ecosistema Telcotronics y se encuentra registrado en la infraestructura compartida del MCP (`mcp.telcotronics.net` / `infraestructura.md`).
Para más detalles técnicos y reglas del agente, consultar [`agents.md`](agents.md).