You can also read in English 🇺🇸
Backend API para transcrição de áudio e vídeo com autenticação Google e pagamentos via Stripe.
O Caption Generator é uma aplicação que permite aos usuários fazer upload de arquivos de áudio ou vídeo e receber transcrições em tempo real. O backend gerencia autenticação, processamento de arquivos, transcrições via Whisper e pagamentos.
Este projeto tem como foco principal a aplicação prática de três conceitos técnicos essenciais:
- Node.js Streams e Server-Sent Events para processamento de arquivos em tempo real
- Integração completa com Stripe para sistema de pagamentos e assinaturas
- Terraform para automatizar o deploy e gerenciar infraestrutura na AWS
- CI/CD para deploy contínuo (GitHub Actions) na AWS
O desenvolvimento prioriza o aprendizado e experimentação dessas tecnologias, implementando uma arquitetura que demonstra como integrar streaming de dados, pagamentos seguros e Infrastructure as Code (IaC). Algumas funcionalidades foram desenvolvidas com abordagem MVP para acelerar o processo de aprendizado e prototipação dos conceitos core.
💡 Detalhes sobre a infraestrutura e deploy (CI/CD) do projeto na AWS neste link.
Este projeto implementa uma pipeline de CI/CD utilizando o GitHub Actions para automatizar todo o processo de build e deploy da aplicação.
O fluxo funciona da seguinte forma:
- Ao realizar um push na branch main, a pipeline é disparada.
- A aplicação é buildada em uma imagem Docker e enviada para o Amazon Elastic Container Registry (ECR).
- Após o envio, a pipeline se conecta a uma instância Amazon EC2 via SSH.
- A imagem mais recente é baixada da ECR e o container antigo é parado e removido.
- Um novo container é iniciado com a versão atualizada da aplicação.
Dessa forma, o processo de deploy se torna automatizado, seguro e replicável.
- 🔐 Autenticação Google via Passport.js
- 🎵 Transcrição de áudio/vídeo usando Whisper
- 💳 Sistema de pagamentos com Stripe (planos Free e Premium)
- 🔄 Processamento em tempo real com Server-Sent Events (SSE)
- 📁 Upload de arquivos com validação de tipo e tamanho
- 🗄️ Banco de dados gerenciado via Prisma ORM
- Node.js + TypeScript
- Express.js - Framework web
- Passport.js - Autenticação Google
- Stripe - Processamento de pagamentos
- Prisma ORM - Gerenciamento do banco de dados
- Supabase - Banco de dados PostgreSQL
- Whisper - Transcrição de áudio para texto
- Multer - Manipulação de arquivos
- Docker - Containerização
- Terraform - Infraestrutura como código
- GitHub Actions - Integração contínua
- Node.js (v18 ou superior)
- Docker e Docker Compose
- Conta no Google Cloud Console (para OAuth)
- Conta no Stripe
- Conta no Supabase
- Clone o repositório
git clone https://github.com/Darlan0307/Capition-Generate-API.git
cd Capition-Generate-API/backend- Configure as variáveis de ambiente
cp .env.example .envPreencha o arquivo .env com suas configurações:
PORT=4000
WHISPER_MODEL_PATH= # Caminho para o modelo Whisper (base.en, tiny.en, outro)
WHISPER_BIN= # Caminho para o binário Whisper (whisper.cli, whisper.cpp, outro)
DATABASE_URL=
DIRECT_URL=
FRONTEND_URL=
AUTH_SECRET=
JWT_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=
NODE_ENV=
STRIPE_WEBHOOK_SECRET=
STRIPE_SECRET_KEY=
STRIPE_SUBSCRIPTION_PRICE_ID=- Execute com Docker
docker compose up -dO servidor estará rodando em http://localhost:4000
Inicia o processo de autenticação com Google OAuth
Callback para processar retorno da autenticação Google
Faz upload e transcreve arquivo de áudio/vídeo
Headers:
cookie: auth-token=<jwt-token>
Body:
media: Arquivo de áudio ou vídeo
Response: Stream de eventos (SSE) com progresso da transcrição
Cria sessão de checkout do Stripe para assinatura
Processa eventos do webhook do Stripe
O projeto inclui configuração Docker com:
- Instalação do Whisper
- Configuração do ambiente Node.js
- Dependências do sistema para processamento de áudio
O projeto usa Prisma ORM com Supabase (PostgreSQL).
Para executar migrações:
npx prisma migrate devPara visualizar o banco:
npx prisma studio
