← Todos los proyectos

Entregado Abril — Mayo 2026 · Líder del proyecto y desarrollador

Migración corporativa Dropbox → Google Workspace

40 usuarios y 680 GB movidos entre dos nubes, con evidencia de que no se perdió nada.

680 GBmigrados
40usuarios
4sucursales
0archivos perdidos

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

Panel de la herramienta de migración con el avance global, el volumen y el estado de los trabajos
Panel — avance global, volumen y estado de los 32 trabajos.
Lista de trabajos de migración con barras de progreso y estados
Trabajos — progreso por carpeta, con pausa, reanudación y reintento.

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.
PythonFastAPIasyncioSSEOAuth 2.0Google Drive APIDropbox APINginxsystemd

¿Tienes algo parecido entre manos?