Proyecto de empresa
Squaads Meeting Bot
Plataforma interna y autoalojada de inteligencia de reuniones para Squaads: un bot entra a Google Meet o Microsoft Teams, graba audio y vídeo, transcribe, resume y permite conversar con las reuniones mediante IA.

- Calendar, Extensión · auto-join. Auto-join con Google Calendar y extensión de navegador. Siguiente: Web · Next.js.
- Web · Next.js, OAuth · API. Next.js con inicio de sesión de Google OAuth y API. Siguiente: Cola en Postgres.
- Cola en Postgres, pending → completed. Cola de trabajos en Postgres con máquina de estados: pending → recording → transcribing → summarizing → completed. Siguiente: Worker · Docker.
- Worker · Docker, Puppeteer + FFmpeg. Worker en Docker: Puppeteer entra a la reunión y FFmpeg la graba; reclama trabajos con heartbeat y reintenta con backoff. Siguiente: S3 / MinIO.
- S3 / MinIO, Grabaciones. Las grabaciones viven en S3 / MinIO. Siguiente: Transcripción.
- Transcripción, STT. Transcripción con Groq Whisper o Deepgram. Siguiente: Resumen · LLM.
- Resumen · LLM, Con fallback. Resumen con Groq, con Gemini como fallback. Siguiente: Panel · Chat IA.
- Panel · Chat IA, Reuniones. Panel de reuniones con chat de IA sobre ellas. Fin del flujo.
- CI/CD · GitHub Actions, tests · lint · types · Docker → Vercel · Railway. GitHub Actions ejecuta tests, lint, tipos y build Docker; el despliegue continuo sale solo de main: web en Vercel y worker en Railway.
De un vistazo
- Tipo de proyecto
- Proyecto de empresa
- Rol
- Colaboré con el equipo en la fase inicial y después lideré el desarrollo prácticamente en solitario, incluido el pipeline de CI/CD y el despliegue.
- Stack
- Bun
- Next.js 16
- TypeScript
- Postgres
- Drizzle
- Docker
- Puppeteer
- FFmpeg
- Vercel
- Railway
- Enlaces
Qué demuestra
- CI en dev y main y despliegue continuo automático solo desde main, con web en Vercel y worker en Railway.
- Cola de trabajos en Postgres con máquina de estados; el worker reclama trabajos con heartbeat y reintenta con backoff.
- Proyecto de empresa liderado casi en solitario tras la fase inicial, con ADRs y desarrollo guiado por especificaciones.
Proyecto de empresa · sin demo pública: el entorno de desarrollo exige login de Google.
El Producto
Alternativa interna a los grabadores de reuniones SaaS, sobre la infraestructura propia de la empresa.
Flujo
- Unirse y grabar El bot se une a la reunión y la graba con un navegador headless (Puppeteer) y FFmpeg con Xvfb y PulseAudio dentro de Docker.
- Transcribir Con Groq Whisper o Deepgram.
- Resumir Con Groq, con Gemini como fallback.
Funciones
- Chat con IA sobre las reuniones.
- Auto-join con Google Calendar y extensión de navegador.
- Compartir reuniones por correo electrónico.
- Inicio de sesión con Google OAuth.
Arquitectura
Web y worker se despliegan por separado y se coordinan mediante una cola de trabajos en Postgres.
Monorepo Bun
apps/web (Next.js 16, React 19 y next-auth), apps/worker (Bun), apps/extension y packages/shared.
Decisiones
- Máquina de estados:
pending → recording → transcribing → summarizing → completed | error, con Postgres y Drizzle como cola. - Worker robusto: reclama trabajos con heartbeat y reintenta con backoff.
- Almacenamiento: las grabaciones viven en S3 / MinIO.
- Acceso a datos: patrón Repository.
CI/CD y Despliegue
CI en dev y main; despliegue continuo automático solo desde main.
Pipeline
En cada push y PR a dev y main, GitHub Actions ejecuta:
- Instalación con lockfile congelado
- Esquema de base de datos
- Tests contra Postgres 16 real
- Lint
- Typecheck
- ZIP de la extensión = build limpia
- Build Docker del worker
Gobernanza y despliegue
- Gobernanza: feature, PR a dev y PR a main; un guard de GitHub Actions solo admite PRs a main desde dev del mismo repositorio, y se exige aprobación.
- Web: Vercel con integración Git y
vercel.jsonversionado. - Worker: Railway con Dockerfile, migrado desde workflows de despliegue en VPS.
Seguridad y Proceso
- Endurecimiento RLS y middleware de autenticación, documentados en ADRs.
- Proceso Desarrollo guiado por especificaciones, con specs de funcionalidad numeradas.
Mi Rol
Colaboré con el equipo en la fase inicial y después lideré el desarrollo prácticamente en solitario, incluido el pipeline de CI/CD y el despliegue.