Este proyecto es una aplicación Next.js para el aprendizaje de idiomas basado en videos, para "English Speaking Club".

- Gestión de videos: Subida, procesamiento y reproducción de contenido educativo
- Sistema de playlists: Creación y gestión de colecciones de videos
- Transcripciones automáticas: Generación de subtítulos para videos
- Área de estudio: Interfaz dedicada para educadores y creadores de contenido
- Autenticación de usuarios: Integración con Clerk para gestión de cuentas
El proyecto utiliza la arquitectura de aplicación App Router de Next.js con la siguiente estructura:
src/
├── app/ # Rutas y páginas de la aplicación
│ ├── (auth)/ # Rutas de autenticación
│ ├── (home)/ # Rutas principales de navegación
│ ├── (studio)/ # Área de estudio para creadores
│ └── api/ # Endpoints de API
├── components/ # Componentes reutilizables
├── db/ # Configuración y modelos de base de datos
├── hooks/ # Hooks personalizados
├── lib/ # Utilidades y funciones auxiliares
├── modules/ # Módulos funcionales organizados por dominio
│ ├── auth/ # Funcionalidad de autenticación
│ ├── playlists/ # Gestión de playlists
│ └── studio/ # Funcionalidad del área de estudio
└── trpc/ # Configuración de tRPC para API tipada
- Frontend: React 19, Next.js 15, TailwindCSS
- Backend: Next.js API Routes, tRPC
- Base de datos: NeonDB (PostgreSQL) con Drizzle ORM
- Autenticación: Clerk
- Procesamiento de video: Mux
- Transcripciones: IA para generación de subtítulos
- Despliegue: Vercel
- Node.js 18+ o Bun
- Cuenta en servicios externos:
- Clerk (autenticación)
- Mux (procesamiento de video)
- NeonDB (base de datos)
- UploadThing (almacenamiento de archivos)
-
Clona el repositorio
-
Instala las dependencias:
bun install
-
Configura las variables de entorno: Crea un archivo
.env.localbasado en.env.examplecon las siguientes variables:# URL de la aplicación NEXT_PUBLIC_APP_URL=http://localhost:3000 # Autenticación Clerk NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= CLERK_SECRET_KEY= NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/ NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/ CLERK_SIGNING_SECRET= # Base de datos DATABASE_URL= # Redis (Upstash) UPSTASH_REDIS_REST_URL= UPSTASH_REDIS_REST_TOKEN= # Mux para procesamiento de video MUX_TOKEN_ID= MUX_TOKEN_SECRET= MUX_WEBHOOK_SECRET= # QStash para tareas en cola QSTASH_TOKEN= UPSTASH_WORKFLOW_URL=https://your-tunnel.ngrok.app QSTASH_CURRENT_SIGNING_KEY= QSTASH_NEXT_SIGNING_KEY= # UploadThing para almacenamiento de archivos UPLOADTHING_TOKEN= # API para transcripciones OPENAI_API_KEY= DEEPSEEK_API_KEY= -
Inicializa la base de datos:
bun db:push
La aplicación utiliza webhooks para comunicarse con servicios externos:
- Accede al panel de administración de Clerk
- Ve a "Webhooks" y crea un nuevo webhook
- Configura la URL del endpoint como:
{NEXT_PUBLIC_APP_URL}/api/users/webhook - Selecciona los eventos a escuchar:
user.createduser.updateduser.deleted
- Copia el "Signing Secret" y colócalo en la variable de entorno
CLERK_SIGNING_SECRET
- Accede al panel de administración de Mux
- Ve a "Settings" > "Webhooks" y crea un nuevo webhook
- Configura la URL del endpoint como:
{NEXT_PUBLIC_APP_URL}/api/videos/webhook - Selecciona los eventos a escuchar:
video.asset.createdvideo.asset.readyvideo.asset.erroredvideo.asset.deletedvideo.asset.track.ready
- Genera un nuevo "Signing Secret" y colócalo en la variable de entorno
MUX_WEBHOOK_SECRET
Para probar webhooks en entorno local:
- Instala ngrok:
npm install -g ngrok - Ejecuta:
ngrok http 3000 - Usa la URL generada por ngrok como base para tus webhooks
- Actualiza
UPSTASH_WORKFLOW_URLcon la URL de ngrok
Para ejecutar el entorno de desarrollo:
# Ejecutar solo el servidor de desarrollo
bun dev
# Ejecutar servidor y webhook para desarrollo completo
bun dev:allAbre http://localhost:3000 en tu navegador para ver la aplicación.
El proyecto incluye flujos de trabajo automatizados para videos:
- Generación de títulos
- Creación de descripciones
- Procesamiento de subtítulos
Los webhooks manejan automáticamente:
- Creación de activos de video cuando se suben
- Actualización de metadatos cuando están listos
- Manejo de errores en procesamiento
- Generación de miniaturas y previsualizaciones
- Seguimiento del estado de las pistas de subtítulos
La aplicación está optimizada para ser desplegada en Vercel:
bun buildAsegúrate de configurar todas las variables de entorno en tu plataforma de despliegue y actualizar las URLs de webhook a tu dominio de producción.