Convierte cualquier video de YouTube en tu clase de inglés personalizada.
Plataforma SaaS que transforma videos de YouTube en mazos Anki personalizados usando IA, con audio real del video embebido en cada tarjeta.
Dominio: ankitubelearn.com | Backend: Railway | Frontend: Vercel (pendiente)
AnkiTube Learn es una plataforma diseñada para colombianos (22-38 años) que están aprendiendo inglés, especialmente aquellos que trabajan en BPO/Call Center.
- Analiza videos de YouTube usando IA para extraer frases y vocabulario relevante
- Genera tarjetas Anki (.apkg) con audio real del momento exacto del video
- Incluye contexto colombiano en cada tarjeta para facilitar el aprendizaje
- Ofrece vista previa antes de descargar el mazo completo
- Estudia con repaso espaciado (SM-2) y ejercicios de escritura/escucha
| Capa | Tecnología | Estado |
|---|---|---|
| Frontend | Next.js 14 + TypeScript + Tailwind CSS | Funcional |
| State | Zustand + TanStack React Query | Funcional |
| Backend | Python FastAPI (async) | Producción |
| Base de Datos | MongoDB Atlas + Motor async | Activo |
| Caché | Redis Cloud | Activo |
| IA | OpenRouter → Gemini → Claude (fallback) | Activo |
| Mazos | genanki → .apkg con audio | Funcional |
| YouTube | youtube-transcript-api (real) | Funcional |
| Auth | JWT + bcrypt | Funcional |
| Estudio | SM-2 (spaced repetition) + Skills | Funcional |
| Pagos | Stripe | Pendiente (Fase 2) |
| Deploy | Railway (backend) + Vercel (frontend) | Backend en producción |
Cadena de fallback IA: OpenRouter (Llama 3.2 free) → OpenRouter Secondary (DeepSeek) → OpenRouter Tertiary (Gemini Flash) → Gemini Flash → error. Circuit breaker: 3 fallos → 5 min cooldown.
AnkiTube-Learn/
├── backend/ # FastAPI API → Railway
│ ├── main.py # Punto de entrada
│ ├── config.py # Settings (pydantic-settings)
│ ├── database.py # Conexión MongoDB
│ ├── models/ # Modelos de datos (Pydantic v2)
│ ├── routers/ # Endpoints (auth, decks, feedback, licenses, admin, study)
│ ├── services/ # Lógica de negocio
│ │ ├── ai_router.py # Router IA con fallback + circuit breaker
│ │ ├── card_pipeline.py # Pipeline de 3 pasos para generar tarjetas
│ │ ├── filter_rules.py # Filtrado determinístico de candidatos
│ │ ├── audio_service.py # Generación de clips de audio (async)
│ │ ├── anki_service.py # Generación .apkg
│ │ └── youtube_real.py # Transcripción real
│ └── utils/ # Prompts, auth, freemium, rate limiting
│
├── frontend/ # Next.js 14 app → Vercel
│ ├── app/ # App Router
│ │ ├── page.tsx # Landing page
│ │ ├── dashboard/ # Dashboard de usuario
│ │ ├── preview/[deck_id]/ # Vista previa de mazos
│ │ ├── study/[deck_id]/ # Modo de estudio (SRS + Skills)
│ │ ├── admin/ # Panel admin (5 sub-páginas)
│ │ ├── login/ # Login
│ │ └── register/ # Registro
│ ├── components/ # 20+ componentes UI
│ │ └── study/ # Componentes de estudio (SRS, Writing, Listening)
│ ├── features/ # Módulos feature-based
│ ├── hooks/ # Custom hooks (useSM2, useDeck, useCurrentUser, etc.)
│ ├── stores/ # Zustand stores
│ ├── lib/api.ts # API client centralizado
│ └── types/ # TypeScript types
│
├── docs/ # Documentación detallada
└── AGENTS.md # Contexto para IA
- Python 3.12 (3.14 no es compatible)
- MongoDB Atlas (cuenta gratuita)
- Redis (opcional en local, necesario en producción)
- Node.js 18+
- npm
- OpenRouter API Key (obligatoria — proveedor primario de IA)
- Google API Key (Gemini — fallback)
- Anthropic API Key (Claude — fallback)
git clone https://github.com/Oscardtp/AnkiTube-Learn.git
cd AnkiTube-Learncd backend
python -m venv .venv
# Windows
.venv\Scripts\activate
# Mac/Linux
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Editar .env con tus credencialescd frontend
npm installCopiar backend/.env.example y completar:
# MongoDB
MONGODB_URL=mongodb+srv://usuario:password@cluster.mongodb.net/?appName=AnkiTube
MONGODB_DB=ankitube_learn
# JWT
JWT_SECRET=tu_clave_secreta_larga
# AI — OpenRouter (proveedor primario)
OPENROUTER_API_KEY=tu_api_key_de_openrouter
# AI — Gemini (fallback)
GOOGLE_API_KEY=AIza...
# AI — Anthropic (fallback)
ANTHROPIC_API_KEY=sk-ant-...
# Superadmin 2FA
SUPERADMIN_2FA_CODE=tu_codigo_6_digitos
# Development
USE_MOCK_AI=true # Cambiar a false con IA realFrontend: crear frontend/.env.local:
NEXT_PUBLIC_API_URL=http://127.0.0.1:8000cd backend
.venv\Scripts\activate # Windows
uvicorn main:app --reload- API: http://127.0.0.1:8000
- Health: http://127.0.0.1:8000/health
- Swagger: http://127.0.0.1:8000/docs (solo con DEBUG=true)
cd frontend
npm run devtaskkill /F /IM uvicorn.exe
cd backend
uvicorn main:app --reloadEl sistema usa un pipeline de 3 pasos para generar tarjetas:
- Extracción (LLM): OpenRouter extrae frases candidatas del transcript
- Filtrado (Backend): Reglas determinísticas eliminan duplicados y frases inválidas
- Selección (LLM): OpenRouter selecciona las mejores tarjetas para el nivel
Límites de créditos OpenRouter: El servidor tiene créditos limitados. max_tokens se mantiene ≤ 4000 para el Paso 1.
Generación de audio: Los clips se generan en paralelo usando asyncio.gather() con asyncio.to_thread() para las herramientas bloqueantes (yt-dlp, ffmpeg).
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/auth/register |
Registrar nuevo usuario |
| POST | /api/auth/login |
Login + JWT token |
| GET | /api/auth/me |
Perfil usuario actual |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/decks/generate |
Generar mazo desde YouTube |
| GET | /api/decks/{id} |
Obtener mazo específico |
| GET | /api/decks/{id}/download |
Descargar .apkg |
| POST | /api/decks/{id}/cards/add |
Añadir tarjeta manual |
| POST | /api/decks/{id}/claim |
Reclamar mazo anónimo |
| DELETE | /api/decks/{id} |
Eliminar mazo (soft delete) |
| GET | /api/decks/user/my-decks |
Lista mazos del usuario |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/study/{deck_id}/status |
Estado de estudio del mazo |
| POST | /api/study/{deck_id}/results |
Enviar resultados de sesión |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/feedback |
Enviar feedback (anónimo o auth) |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/licenses/activate |
Activar código tester |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/admin/metrics |
Métricas generales |
| GET | /api/admin/users |
Lista todos los usuarios |
| PATCH | /api/admin/users/{id}/role |
Cambiar rol de usuario |
| GET | /api/admin/feedback |
Todos los feedbacks |
| GET | /api/admin/flagged-cards |
Tarjetas reportadas |
| GET | /api/licenses/admin |
Listar licencias |
| POST | /api/licenses/admin |
Crear licencia |
| DELETE | /api/licenses/admin/{code} |
Eliminar licencia |
| Plan | Precio | IA | Límite |
|---|---|---|---|
| Explorador | $0 COP/mes | OpenRouter (gratis) | 1 mazo/día, max 15 tarjetas |
| Fluente | $15.000 COP/mes | Gemini Pro | Ilimitado, todos contextos |
| Nativo | $120.000 COP/año | Claude Sonnet 4 | Todo + WhatsApp directo |
Precio fundador: $39.000 COP pago único para primeros 50 usuarios.
- Backend FastAPI completo
- Generación de mazos con IA (OpenRouter + fallback)
- Transcripción real de YouTube
- Sistema de licencias tester
- Panel superadmin con 2FA
- Frontend funcional (Landing, Dashboard, Preview, Admin)
- Auth JWT completo (backend + frontend)
- Sistema de feedback
- Pipeline de 3 pasos para generación de tarjetas
- Generación de audio asíncrona y en paralelo
- Modo de estudio con SM-2 (spaced repetition)
- Ejercicios de Writing y Listening
- Deploy frontend en Vercel
- YouTube embed en preview
- Stripe + pagos
- Setup Wizard (5 preguntas)
- Curación guiada
- Recomendador de videos
- Celery + Redis (tareas en segundo plano)
- Speaking exercises
- Plan de estudio 8 semanas
- Reproductor integrado
- App React Native
- Expansión Latinoamérica
colombian_noteobligatorio — sin él, tarjeta se descarta- Audio siempre en backend — yt-dlp + FFmpeg, nunca en frontend
- Freemium = 1 mazo/día — verificado server-side
- Superadmin requiere 2FA — en cada request
- Soft delete siempre — usar
deleted_at, nunca borrar de MongoDB - Mock = schema real —
youtube_mock.pymisma firma que el real - Pydantic v2 — siempre usar
Field(default=...)no= ""directamente
taskkill /F /IM uvicorn.exe
cd backend
.venv\Scripts\activate
uvicorn main:app --reloadLa cuenta tiene créditos limitados. Reducir max_tokens en ai_router.py o añadir créditos en openrouter.ai/settings/credits.
Usar Field(default="") en lugar de = "" directamente en los modelos.
Verificar que yt-dlp y ffmpeg estén instalados y en el PATH.
- Fork el repositorio
- Crea una rama (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Lee AGENTS.md para entender el contexto completo del proyecto.
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Fundador: Oscardtp Email: oscardtp15@gmail.com Sitio Web: ankitubelearn.com
"Autodidacta colombiano frustrado con métodos tradicionales."
Hecho en Colombia 🇨🇴 para ayudar a colombianos a aprender inglés de manera efectiva y contextualizada.