No description
  • JavaScript 63.8%
  • HTML 34.2%
  • CSS 1.7%
  • Dockerfile 0.3%
Find a file
2026-10-22 00:22:05 +02:00
data feat: initial commit for VanishDrop platform 2026-10-21 22:42:38 +02:00
docs feat: add PWA mobile app support and configurable SEO/OpenGraph preview with stealth redirection 2026-10-22 00:22:05 +02:00
public feat: add PWA mobile app support and configurable SEO/OpenGraph preview with stealth redirection 2026-10-22 00:22:05 +02:00
src feat: add PWA mobile app support and configurable SEO/OpenGraph preview with stealth redirection 2026-10-22 00:22:05 +02:00
.env.example feat: initial commit for VanishDrop platform 2026-10-21 22:42:38 +02:00
.gitignore feat: initial commit for VanishDrop platform 2026-10-21 22:42:38 +02:00
docker-compose.yml fix(docker): add network_mode bridge to prevent subnet exhaustion on Synology NAS 2026-10-21 23:14:54 +02:00
Dockerfile feat: initial commit for VanishDrop platform 2026-10-21 22:42:38 +02:00
package-lock.json feat: initial commit for VanishDrop platform 2026-10-21 22:42:38 +02:00
package.json feat: initial commit for VanishDrop platform 2026-10-21 22:42:38 +02:00
README.md feat: add PWA mobile app support and configurable SEO/OpenGraph preview with stealth redirection 2026-10-22 00:22:05 +02:00
server.js feat: add PWA mobile app support and configurable SEO/OpenGraph preview with stealth redirection 2026-10-22 00:22:05 +02:00

🛡️ VanishDrop • Plataforma de Compartición Efímera & Suite de Seguridad Autohospedada

Node.js Version Docker Ready Synology DSM Cloudflare Tunnel License

VanishDrop Logo

VanishDrop es una suite completa, privada y 100% autohospedada orientada a la privacidad, la transferencia segura de archivos multimedia efímeros, la auditoría transparente de enlaces y la creación de notas autodestructibles, complementada con un Área Privada con herramientas de diagnóstico de red y administración global.


📋 Tabla de Contenidos


✨ Características Principales

📸 1. Envíos Efímeros Multimedia (Fotos y Vídeos)

  • Formatos aceptados: Imágenes (JPEG, PNG, GIF, WebP) y vídeos (MP4, WebM, MOV) con previsualización interactiva previa al envío.
  • Control de caducidad multidimensional:
    • Por número de visualizaciones: Tras alcanzar el límite configurado, el contenido se tritura del disco.
    • Destrucción foto a foto (Modo Efímero Estricto): Al avanzar de foto, la foto anterior se destruye físicamente de forma inmediata del servidor sin posibilidad de retroceder.
    • Por fecha y hora: Expiración temporal automática.
  • Protección contra filtraciones y capturas:
    • Marcas de agua forenses semitransparentes con ID de sesión único superpuestas sobre el visor.
    • Desactivación del clic derecho, menús contextuales y descarga directa en navegadores compatibles.
  • Geolocalización GPS exacta (Conforme a RGPD): Opción para solicitar la ubicación por sensor del dispositivo. Requiere consentimiento explícito del visitante mediante el diálogo nativo del navegador.
  • Panel de Gestión Privado para el Emisor (/manage/:id?key=...):
    • Supervisión de visitas restantes y ampliación de plazos.
    • Borrado selectivo de fotos individuales o del envío completo.
    • Historial con IP, país, ciudad, sistema operativo exacto (incluyendo detección de Windows 11 vía User-Agent Client Hints) y dispositivo.
    • Exportación de registros en CSV y JSON.

🔗 2. Acortador Inteligente SMART

  • Acortador con auditoría y telemetría: Genera enlaces cortos con alias personalizado o identificador aleatorio.
  • Recopilación SMART avanzada: Resolución de pantalla, viewport del navegador, tipo de conexión de red (4G, WiFi, etc.) y orientación del dispositivo.
  • Consentimiento informado y vista previa:
    • Opción de mostrar advertencia previa para cumplimiento RGPD.
    • Opción de mostrar vista previa del destino final a pantalla completa antes de redirigir.
  • Configuración en tiempo real: Desde el panel de administración del enlace, el emisor puede activar o desactivar cualquiera de estas opciones y los cambios surten efecto de inmediato sin cambiar la URL corta.
  • Pausado y reactivación: Posibilidad de desactivar temporalmente el enlace (mostrando aviso de desconexión) o restaurarlo cuando se desee.
  • Traspaso de parámetros GET: Mantiene y propaga intactos parámetros UTM y cadenas de consulta a la web final.

🔐 3. Notas Privadas Autodestructibles

  • Cifrado en cliente con AES-256-GCM: La nota se cifra localmente en el navegador antes de transmitirse.
  • Enlace con clave en fragmento hash (#key): La clave de descifrado viaja en el hash de la URL, por lo que el servidor nunca puede descifrar el mensaje por sí mismo.
  • Protección adicional con contraseña: Opción de solicitar una clave secundaria mediante derivación criptográfica (bcrypt).
  • Autodestrucción garantizada:
    • Al hacer clic en revelar, el contenido se descifra en memoria y se elimina físicamente de la base de datos SQLite en esa misma petición.
    • Nadie podrá volver a leerla jamás.
  • Panel de Auditoría del Emisor (/note/manage/:id?key=...):
    • Permite saber si la nota sigue pendiente o si ya ha sido leída y destruida.
    • Muestra la hora de lectura, la dirección IP del lector, su ubicación en mapa, sistema operativo y navegador.
    • Botón para quemar la nota manualmente antes de que el destinatario la abra.

🎛️ 4. Área Privada & Herramientas Maestras (/admin)

Zona protegida mediante contraseña maestra (ADMIN_SECRET, clave inicial por defecto: admin1234) con doble nivel de navegación (botón Inicio en la esquina superior y acciones en la barra secundaria):

  1. Configuración de Telegram en Vivo: Prueba de conexión instantánea y sincronización automática de tokens en .env.
  2. Mi IP & Diagnóstico Forense: Detección de IP pública, cabeceras HTTP entrantes y versión de SO (diferenciando de forma fiable Windows 11 de Windows 10 mediante High Entropy Values).
  3. Rastreador de IP con Mapa Leaflet (OpenStreetMap): Localización geográfica con coordenadas, ciudad, ISP y mapa interactivo sin APIs de pago ni registros.
  4. Validador & Salto de Redirecciones HTTP: Traza saltos 301/302, inspecciona cadenas de acortadores y permite hacer clic directamente sobre cualquier paso intermedio para saltar publicidad.
  5. Limpiador de Parámetros de Rastreo: Despoja URLs de etiquetas intrusivas de afiliados y telemetría (fbclid, gclid, sv1, awc, etc.), devolviendo el enlace limpio.
  6. Fabricante MAC (IEEE OUI Live) / WHOIS: Identificación del fabricante oficial y tipo de dispositivo (tarjeta WiFi, router, smartphone, etc.) mediante consulta directa a la base IEEE.
  7. Generador de User-Agents: Cadenas de agentes de usuario actualizadas para pruebas.
  8. Gestor de Contadores SVG:
    • Creación de insignias SVG dinámicas para GitHub o páginas web (/c/:id).
    • Portal propio de analíticas con mapa OpenStreetMap en tiempo real, visitantes únicos y gráficos de evolución temporal.
  9. Gestor de Notas Privadas:
    • Tabla compacta con supervisión de todas las notas creadas, estados (Pendiente, Destruida, Caducada) y datos del lector.
    • Botón de purga con un solo clic para limpiar notas leídas o caducadas y liberar espacio en base de datos.
  10. Registradores & Envíos Activos:
    • Supervisión global con filtros instantáneos en tiempo real: Todos, Fotos / Vídeos o Enlaces Cortos.
    • Acceso directo al panel de control o a mover el registrador a la papelera.
  11. Papelera de Retención de 7 Días:
    • Los elementos borrados permanecen en cuarentena durante 7 días.
    • Filtros por tipo, botón de restauración y botón de triturado físico definitivo.

🌐 Arquitectura Multi-Dominio

VanishDrop es multi-dominio de forma nativa:

  • La base de datos guarda únicamente identificadores y rutas relativas.
  • Si configuras en Cloudflare Tunnel (o en tu proxy inverso) dos dominios diferentes apuntando al mismo puerto 3000 de tu NAS:
    • Al entrar desde https://fotos.midominio1.com, la aplicación generará todos los enlaces con ese dominio.
    • Al entrar desde https://links.midominio2.com, los generará con el segundo dominio.
  • Ambos dominios comparten la misma base de datos, por lo que cualquier enlace creado funcionará indistintamente en ambos.

🚀 Despliegue Rápido

Opción A: Docker Compose (Recomendado)

  1. Clona el repositorio:
    git clone https://forgejo.634562284.xyz/jona/VanishDrop.git
    cd VanishDrop
    
  2. Copia la plantilla de configuración:
    cp .env.example .env
    
  3. Edita tu clave secreta de administración en .env:
    ADMIN_SECRET=tu-clave-super-secreta
    
  4. Levanta el contenedor:
    docker compose up -d --build
    

Opción B: Synology NAS (Container Manager)

Dado que docker-compose.yml compila el contenedor a partir del Dockerfile, la carpeta del proyecto en tu NAS debe contener todos los archivos de la aplicación.

Método 1: Clonar vía SSH en el NAS (Recomendado y más rápido)

  1. Conéctate por SSH a tu Synology NAS como administrador.
  2. Clona el repositorio directamente en tu volumen de Docker:
    cd /volume2/docker
    git clone https://forgejo.634562284.xyz/jona/VanishDrop.git vanishdrop
    cd vanishdrop
    cp .env.example .env
    
  3. Edita tus claves en el archivo .env (especialmente ADMIN_SECRET).
  4. Abre Container Manager en DSM \rightarrow Proyecto \rightarrow Crear:
    • Nombre del proyecto: vanishdrop
    • Ruta de acceso: /volume2/docker/vanishdrop
    • Origen: Selecciona "Usar archivo docker-compose.yml existente".
  5. Pulsa en Siguiente y finaliza el asistente para compilar e iniciar el proyecto.
  6. Asocia tu túnel de Cloudflare hacia el puerto 3000 de tu NAS en el panel de Cloudflare Zero Trust.

Método 2: Subir los archivos desde File Station

  1. Descarga el proyecto en formato ZIP.
  2. En DSM, abre File Station y accede a la carpeta compartida /volume2/docker/.
  3. Crea la carpeta vanishdrop, sube el archivo ZIP y descomprímelo ahí dentro (deben quedar en la raíz de vanishdrop los archivos Dockerfile, docker-compose.yml, package.json, server.js, las carpetas src/, public/, etc.).
  4. Crea una copia de .env.example llamada .env y edita tu ADMIN_SECRET.
  5. Abre Container Manager \rightarrow Proyecto \rightarrow Crear:
    • Ruta de acceso: /volume2/docker/vanishdrop
    • Origen: "Usar archivo docker-compose.yml existente".
  6. Inicia el proyecto. La carpeta de persistencia /volume2/docker/vanishdrop/data se creará y gestionará de forma automática.

Opción C: Node.js Nativo

Requisitos: Node.js 20+ o superior.

# Instalar dependencias
npm install

# Iniciar en producción
node server.js

El servidor escuchará en http://localhost:3000.


⚙️ Variables de Entorno

Variable Descripción Valor por Defecto
PORT Puerto HTTP interno de escucha 3000
HOST Dirección IP de enlace 0.0.0.0
BASE_URL Dominio de referencia / fallback http://localhost:3000
ADMIN_SECRET Clave maestra para acceder a /admin admin1234
MAX_FILE_SIZE Tamaño máximo por foto/vídeo en bytes (10MB) 10485760
MAX_FILES Número máximo de archivos por envío 10
DATA_DIR Directorio de datos y base de datos ./data
UPLOAD_DIR Directorio donde se almacenan los archivos ./data/uploads
DB_PATH Ruta al archivo SQLite ./data/vanishdrop.db
TELEGRAM_BOT_TOKEN Token del bot de Telegram (opcional) ""
TELEGRAM_CHAT_ID Chat ID numérico para recibir alertas ""

🔐 Acceso al Área Privada: La clave inicial por defecto en el código es admin1234. Por seguridad y privacidad, esta clave no se muestra ni se autocompleta en el formulario web y debe cambiarse mediante la variable ADMIN_SECRET en tu .env o en docker-compose.yml al desplegar en producción.


📲 Integración con Telegram Bot

VanishDrop envía notificaciones en tiempo real cada vez que:

  1. Alguien abre un envío multimedia efímero.
  2. Alguien hace clic en un enlace SMART (notificando si es visitante único o recurrente).
  3. Alguien descifra y destruye una nota privada.

Cómo configurarlo:

  1. Crea un bot con @BotFather en Telegram y copia el token (123456:ABC-DEF...).
  2. Obtén tu Chat ID hablando con @userinfobot.
  3. Entra en tu panel en /admin \rightarrow pestaña Configuración Telegram, introduce los dos datos y pulsa "Probar Conexión con Bot". Se guardarán y sincronizarán automáticamente.

🔐 Protección con Cloudflare Zero Trust (Login Google + Bypass de Enlaces)

Si deseas exponer VanishDrop mediante Cloudflare y proteger la creación de envíos y el panel de administración con tu cuenta de Google, pero permitiendo que cualquier persona que reciba un enlace pueda verlo sin iniciar sesión, configura dos políticas en Cloudflare Access (Applications):

  1. Política de Bypass (Prioridad 1 - Mayor):

    • Action: Bypass
    • Include: Everyone
    • Require (Path starts with):
      • /v/ (Visor seguro de imágenes y vídeos)
      • /api/drops/ (Descarga y verificación multimedia)
      • /stats/ (Estadísticas públicas de drops)
      • /s/ (Redirección de enlaces acortados)
      • /api/shortener/track/ (Telemetría SMART y consentimiento)
      • /shortener/stats/ (Estadísticas públicas de enlaces)
      • /note/ (Lectura y descifrado de notas privadas)
      • /api/tools/notes/ (API de autodestrucción en SQLite)
      • /c/ (Insignias SVG dinámicas para GitHub/webs)
      • /counter/ (Portal de analítica de contadores)
      • /api/tools/counters/ (Métricas de contadores)
      • /css/ (Hojas de estilo)
      • /js/ (Scripts del visor y modales)
      • /assets/ (Logotipo, iconos PWA y carátula OpenGraph)
      • /manifest.json (Manifiesto para instalación como aplicación PWA)
      • /sw.js (Service Worker PWA para caché y soporte móvil)
  2. Política de Administrador (Prioridad 2):

    • Action: Allow
    • Include: Emails \rightarrow tu-cuenta@gmail.com

Para la guía paso a paso completa, consulta la Guía de Conexión con Cloudflare Tunnel.


📂 Estructura del Proyecto

VanishDrop/
├── data/                      # Datos persistentes (SQLite y uploads)
│   ├── uploads/               # Archivos temporales de imágenes/vídeos
│   └── vanishdrop.db          # Base de datos SQLite
├── public/                    # Frontend estático y vistas SPA
│   ├── assets/logo.svg        # Logotipo oficial
│   ├── css/styles.css         # Estilos glassmorphism y Tailwind CSS
│   ├── js/                    # Lógica interactiva en cliente
│   │   ├── adminDrop.js       # Panel de gestión de envíos multimedia
│   │   ├── app.js             # Lógica de la página principal
│   │   ├── manageNote.js      # Panel de gestión de notas privadas
│   │   ├── shortener.js       # Panel de gestión de enlaces acortados
│   │   ├── tools.js           # Lógica del Área Privada (/admin)
│   │   └── vanishModal.js     # Modales nativos (reemplazo de alert/confirm)
│   ├── admin.html             # Área Privada & Panel Maestro
│   ├── index.html             # Página principal (Envío, Acortador, Nota)
│   ├── manage-drop.html       # Panel privado de álbum multimedia
│   ├── manage-note.html       # Panel privado de nota autodestructible
│   ├── manage-shortener.html  # Panel privado de enlace SMART
│   ├── read-note.html         # Pantalla para leer y destruir nota
│   ├── stats-counter.html     # Portal de analíticas del contador SVG
│   ├── stats-drop.html        # Vista pública de estadísticas de drop
│   ├── stats-shortener.html   # Vista pública de estadísticas de enlace
│   └── viewer.html            # Visor seguro protegido de fotos/vídeos
├── src/                       # Código fuente del backend (Node.js/Express)
│   ├── routes/                # Controladores y endpoints REST
│   │   ├── adminRoutes.js     # API del Área Privada
│   │   ├── dropRoutes.js      # API de envíos multimedia efímeros
│   │   ├── shortenerRoutes.js # API de enlaces y redirección SMART
│   │   └── toolsRoutes.js     # API de contadores, notas y diagnósticos
│   ├── services/              # Lógica de soporte
│   │   ├── cleanupService.js  # Tarea periódica de purga automática
│   │   └── telegramService.js # Envío de alertas con Telegram Bot API
│   ├── config.js              # Carga centralizada de configuración
│   └── database.js            # Inicialización de esquema SQLite
├── .env.example               # Plantilla de variables de entorno
├── docker-compose.yml         # Manifiesto de despliegue con Docker
├── Dockerfile                 # Imagen optimizada Multi-Arch
├── package.json               # Dependencias del proyecto
└── README.md                  # Documentación oficial

🔒 Seguridad y Privacidad

  • Sin rastreadores de terceros: Los mapas utilizan baldosas libres de OpenStreetMap a través de Leaflet, sin Google Maps ni APIs propietarias.
  • Triturado criptográfico: Las notas se borran inmediatamente de SQLite en la misma transacción tras descifrarse. Los archivos multimedia efímeros se eliminan del sistema de ficheros de forma irreversible al expirar.
  • Aislamiento de la administración: Los enlaces generados para los usuarios finales o destinatarios no exponen ni contienen referencias hacia el panel de administración privado (/admin).
  • Cumplimiento RGPD: La obtención de coordenadas GPS y datos técnicos en enlaces inteligentes requiere el consentimiento expreso del usuario antes de registrarse.

VanishDrop • Desarrollado con dedicación para una web más privada y segura.