Migración corporativa Dropbox → Google Workspace
40 usuarios y 680 GB movidos entre dos nubes, con evidencia de que no se perdió nada.
El problema
Un cliente corporativo con cuatro sucursales migraba toda su información de Dropbox Business a Google Workspace. Las herramientas comerciales no cubrían bien la combinación de carpetas de equipo, permisos compartidos y —lo más importante— evidencia de integridad. Cuando pregunté qué era el éxito para ellos, la respuesta no fue «que los archivos estén en Google»: fue «que yo pueda saber que no se perdió nada».
Lo que construí
Construí una herramienta a medida: backend en Python con FastAPI, frontend web y una base de datos de estado por trabajo, desplegada en un VPS con systemd y Nginx. Migraba en paralelo de forma controlada, se reintentaba sola, no duplicaba nada, y mostraba el avance en vivo al cliente. Al final, un módulo de auditoría recorría origen y destino comparándolos carpeta por carpeta.
Qué cambió
La migración se entregó con un reporte de integridad, no con una afirmación. Y un fallo dejó de significar repetir horas de proceso: pasó a ser cuestión de minutos relanzando únicamente lo que había fallado.
La aplicación
Cómo se ve en producción


Decisiones técnicas
Por qué está construido así
- Concurrencia controlada con semáforo: 10 archivos en paralelo, el punto donde iba rápido sin que la API destino cortara por cuota.
- Reintentos con espera exponencial (1s, 2s, 4s): reintentar de inmediato contra un servicio saturado solo lo empeora.
- Idempotencia real: se verifica si el archivo ya existe en destino antes de subir, y se guarda la revisión de origen con escritura tipo upsert. Reprocesar nunca duplica ni genera basura.
- Tres modos de ejecución: completo, solo reintentar lo fallido, y solo lo que cambió.
- Progreso en vivo hacia el navegador con Server-Sent Events: archivos migrados, velocidad en MB/s y tiempo estimado, calculados con una ventana deslizante de 30 segundos para que el número no brinque.
- OAuth 2.0 con Google conservando el flujo completo entre la redirección y el callback, para no perder el code_verifier de PKCE.
- Subidas resumables por bloques con Content-Range para archivos que superan el límite de subida simple.
- Pausa, reanudación y recuperación tras caída: al arrancar, los trabajos interrumpidos se marcan y se pueden retomar.
- Trabajos de verificación y auditoría que comparan origen contra destino y generan el reporte de integridad.
