Motor ETL asíncrono que orquesta Node.js y Python para refinar vocabulario en inglés con IA generativa (DeepSeek V3), generar audio neuronal (ElevenLabs TTS) y empaquetar el resultado en mazos de Anki ejecutables
.apkg— tolerante a fallos de red, baneos IP y errores 503 de API mediante checkpointing continuo en SQLite: si el proceso se interrumpe, retoma exactamente donde se quedó, sin perder horas de cómputo ni saldo de API.
🚀 Impacto y Números
- 0 pérdida de datos ante fallos: checkpointing SQLite guarda el estado al término de cada lote — un 503 de la IA no tira el trabajo previo
- Concurrencia controlada:
p-limitacota los workers paralelos para prevenir picos de memoria y banneos por rate limiting - Pipeline dual-runtime: scraping pesado I/O en Node.js (V8), empaquetado binario
.apkgen Python congenanki— cada runtime donde es más eficiente - Output listo para usar: archivo
.apkgdirectamente importable en Anki con audio neural incluido
⚡ Cómo está construido
Orquestación asíncrona tolerante a fallos
- Pool de concurrencia dinámico:
p-limitlimita estrictamente las promesas paralelas — previene picos de memoria y el ban por exceso de requests simultáneos a las APIs externas - Checkpointing por lotes:
if(success) then saveDatabase()al término de cada batch — si La API lanza 503, el lote en curso se purga y se marca como fallido, pero los miles de registros previos quedan intactos en SQLite - Sistema de reintentos con marcadores offline: flags en SQLite identifican palabras pendientes vs. completadas — la reanudación es exacta, no desde cero
Pipeline ETL multi-etapa
- Extracción con Playwright headless: scraping de contenido lingüístico desde fuentes externas con Chromium integrado en el flujo transaccional
- Refinamiento con DeepSeek V3: prompt engineering para limpiar, enriquecer y reformatear el vocabulario crudo en estructuras útiles para el aprendizaje
- Audio neuronal con ElevenLabs TTS: genera pronunciación de calidad nativa por palabra, embebida directamente en el
.apkg
Arquitectura híbrida Node.js + Python
- Node.js para I/O asíncrono: manejo de todas las llamadas a APIs externas, scraping y lógica de orquestación donde la concurrencia de V8 es la ventaja
- Python para empaquetado binario:
genankigestiona el formato propietario de Anki (.apkg= SQLite + zip con estructura específica) — usar la librería madura en vez de reimplementar el formato
🛠️ Stack
Core: Node.js ESM (async/await, p-limit), Python 3
Web Automation: Playwright (Chromium headless)
IA & Media: DeepSeek V3 API, ElevenLabs Neural TTS
Storage: SQLite (sql.js in-memory + persistencia para checkpoints)
Output: genanki (Python) para empaquetado .apkg
Patterns: ETL pipeline, Worker Pool, Checkpoint/Resume, Dual-Runtime Orchestration
💼 Lo que este proyecto demuestra
Este proyecto demuestra que puedo:
- ✅ Construir herramientas de backend no triviales — sin frontend, sin CRUD, puro procesamiento de datos
- ✅ Diseñar sistemas tolerantes a fallos reales de producción: rate limits, timeouts, errores de API, interrupciones de red
- ✅ Orquestar múltiples runtimes y servicios heterogéneos (Node + Python + Playwright + DeepSeek + ElevenLabs) en un pipeline coherente
- ✅ Aplicar pensamiento de ingeniería de datos a escala pequeña: batching, checkpointing, reanudación exacta
Diferenciador clave: Mientras la mayoría de portfolios junior muestran CRUDs con autenticación, este es data engineering en micro — tolerante a fallos lógicos de forma explícita y deliberada. Demuestra que entiendes por qué y cuándo una llamada externa puede romper una app y cómo prevenirlo.