Open source · MIT · estudoLume

O Projeto

Plataforma de conhecimento sobre 980 cultos (757.9h): pipeline de dados em camadas, IA serverless (AWS Bedrock), busca ancorada em fontes, uma TV ao vivo com chat e agentes, playlists no YouTube e um painel admin. Em produção, tudo roda na nuvem (Vercel + AWS); o ambiente local é opcional, só para ingerir conteúdo novo. ~$5-8/mês na AWS com scale-to-zero.

Além da busca e dos guias, o projeto publica e-books por pregador: volumes em EPUB, leitura online e HTML pronto para imprimir/salvar em PDF, com a transcrição do sermão recortada das lives quando possível.

Projeto pessoal de Fernando Francisco Azevedo · licença MIT

Arquitetura

Agrupada por provedor. O usuário acessa a Vercel (Cloudflare faz DNS); o frontend proxia /api/* para a AWS (Lambda → Aurora/Bedrock/Polly). O GitHub Actions mantém o Aurora sincronizado. O bloco Local é opcional — só entra quando há vídeo novo a transcrever/enriquecer.

Renderizando diagrama…
Regra de ouro (Sola Scriptura): toda resposta ou derivação aponta para o culto, o trecho e o link de origem (com timestamp). A IA organiza e aponta — nunca substitui a Escritura, que é sempre verificável.

Camadas de dados (SOR → SOT → SPEC)

SORSource of Record · imutável
transcricoes/youtube/

Transcrições cruas por vídeo (txt/srt + metadata). Versionado; nunca editado à mão.

SOTSource of Truth · DuckDB
data/sot/acervo.duckdb

Banco limpo: cultos, trechos com timestamp, refs determinísticas e tabelas de IA. Reconstruível do SOR.

SPECDerivados
apps/web/public/data · Aurora

JSONs do site + vetores no Aurora (pgvector). Produtos servidos ao usuário.

Inteligência artificial

Em produção, toda IA roda no AWS Bedrock via IAM — sem chave externa. No ETL local, o enriquecimento usa as CLIs autenticadas (Codex/Claude/Gemini).

Busca semântica

Cohere Embed v4 (1536d) + pgvector/HNSW no Aurora — acha por sentido, não só palavra

Perguntar / Chat

RAG ancorado nos cultos (Bedrock Nova Micro), respostas com fontes e timestamp

Assistente contextual

em cada página (culto, tema, livro, pregador, série) com perguntas sugeridas

Trilha & roteiro de célula

estudo pessoal em etapas ou roteiro de grupo pequeno, exportável em .md

E-books por pregador

volumes de leitura com a transcrição do sermão, metadados e links de origem em EPUB, HTML/PDF e Markdown

Leitor de voz

Amazon Polly neural lê o guia; destaca a seção lida; baixar/compartilhar

Reflexão nas frases

meditação devocional curta sobre cada frase, à luz da Escritura

Lume TV · agentes

5 agentes acompanham o culto no ar, comentam (esboço, referências, contexto) e respondem perguntas do chat — ancorados no guia (Bedrock)

Moderação do chat

filtro automático de ofensas/palavrões (normalização anti-evasão) + moderação por admin

Playlists no YouTube

OAuth Google: cria playlists de sermões na conta do próprio usuário, direto do acervo

Stack & integrações

Frontend

Next.js 16React 19TypeScriptTailwindInterVercel Analytics

Backend / IA

AWS Lambda (Python 3.12 ARM)Bedrock Nova MicroCohere Embed v4Amazon PollyEventBridge (agentes TV)

Banco & tempo real

Aurora Serverless v2Postgres 16pgvector + HNSWRDS Data APIDynamoDB (chat TV)

Pipeline (ETL)

Python 3.11uvDuckDByt-dlpWhisperCLIs Codex/Claude/Gemini

IaC & CI/CD

OpenTofuGitHub ActionsOIDC (sem chaves)Conventional Commits

Auth & segurança

Cognito (Email OTP)SES (no-reply@moretes.com)JWT (jose) + bcryptCloudflare Turnstilemoderação de chatsegredo interno na APILGPD

Integrações

Google OAuthYouTube Data APIYouTube IFrame (TV)playlists do usuário

Git Flow

develop → homolog → mainbranch protectionvalidate_web gatePR review

Domínios & DNS

acervo.moretes.comapi.acervo.moretes.comCloudflare DNSACM TLS

Infraestrutura AWS

Provisionada por OpenTofu em infra/. Bootstrap (S3 state + DynamoDB lock + OIDC) roda uma vez; o resto aplica via tofu apply ou GitHub Actions. Região principal us-east-2; Bedrock e Polly em us-east-1.

AWS Lambdaacervo-api · Python 3.12 ARM · Function URL + CloudFront$0 idle/mês
CloudFront + ACMedge + TLS em api.acervo.moretes.com~free tier/mês
Aurora Serverless v2Postgres 16 + pgvector + unaccent · ACU 0-1 · pausa em 5min~$2-5/mês
AWS BedrockNova Micro (LLM) + Cohere Embed v4 (vetores) + agentes da TV — pay-per-token<$0.30/mês
Amazon Pollyvoz neural pt-BR (Camila) — só na 1ª vez por culto (cache S3)<$0.10/mês
DynamoDBlume-tv · chat, presença e reações da TV ao vivo · on-demand + TTL~$0 (escala a zero)/mês
EventBridgeagenda (5 min) os agentes que comentam o culto no ar$0/mês
Amazon Cognitologin por e-mail (Email OTP) · self-signup · tier Essentials~$0 (poucos MAU)/mês
Amazon SESenvio de OTP de no-reply@moretes.com · DKIM + DMARC · produção~$0 (baixo volume)/mês
S3raw · exports · áudio TTS · Intelligent-Tiering~$0.50/mês
Secrets Managercredenciais do Aurora gerenciadas pela AWS$0.40/mês
IAM + OIDCGitHub Actions assume role sem chaves de longo prazo$0/mês
VPC mínimasubnets privadas só para o Aurora · sem NAT/IGW$0/mês
FinOps: Aurora pausa após 5min idle (0 ACU = $0). Lambda só cobra invocação. Bedrock/Polly cobram por uso e a voz é cacheada (1x por culto). O ETL roda no runner gratuito do GitHub Actions. Total: ~$5-8/mês com uso leve.

API api.acervo.moretes.com

POST /perguntarRAG single-shot: busca semântica (pgvector) + síntese por LLM citando [Fonte N]
POST /chatRAG conversacional com follow-up — mantém o contexto da conversa
POST /trechosbusca de trechos (semântica via Cohere/pgvector ou palavra-chave) com timestamp
POST /estudogera trilha de estudo pessoal (etapas + perguntas + versículos)
POST /celulagera roteiro de grupo pequeno (quebra-gelo, discussão, aplicação, oração)
POST /ttsAmazon Polly neural → MP3 cacheado em S3 (URL pré-assinada + speech marks)
POST /youtube-chatassistente do painel do YouTube (estatísticas do canal)
POST /tv-pollLume TV: heartbeat de presença + novas mensagens/reações (DynamoDB)
POST /tv-sendLume TV: envia mensagem no chat (login) com moderação anti-ofensa
POST /tv-react · /tv-askreação com emoji · pergunta a um agente (Bedrock, ancorado no culto)
POST /tv-modmoderação do chat (admin): apagar mensagem, banir/desbanir
task: tv-botdisparo agendado (EventBridge 5 min): agentes comentam o culto no ar
POST /admin · /userdatamétricas do painel admin · favoritos/histórico/acessos do usuário
GET /statusnúmeros reais e ao vivo do Aurora (cultos, refs, embeddings, horas)
POST /waitlist · /welcomelista de espera + e-mail de boas-vindas (Aurora + SES)
POST /consent · /consent-checkregistra/consulta o aceite dos Termos (LGPD)
GET /healthzhealthcheck da Lambda / CloudFront

A Vercel proxia /api/* para a Lambda (via NEXT_PUBLIC_API_URL); em dev local, faz spawn do pipeline Python diretamente.

Banco de dados

Local: DuckDB single-file, reconstruível do SOR. Nuvem: Aurora Serverless v2 Postgres + pgvector, espelhado via pipeline.export_aurora e consultado pela Lambda via RDS Data API.

cultos1 linha por culto: título, data, pregador, tipo, série, duração, canonical_video_id (dedup live/corte)
trechostrechos com timestamp (do .srt) — base da busca e dos links no YouTube
referencias_biblicasrefs extraídas por regex determinística, com timestamp
passagens (vetores)trechos agrupados, embeddados via Bedrock Cohere Embed v4 (1536d) — pgvector + índice HNSW para busca semântica
temas · resumos · estudos · personagensenriquecimento por IA (texto-base, ideia central, esboço, perguntas) — no SOT local, servido nos JSONs

Pipeline (módulos Python)

pipeline.build_sot

raw → DuckDB limpo (limpeza, refs, pregador, filtro de alucinação)

pipeline.enrich

enriquece por IA (resumo, temas, guia de estudo) — CLIs Codex/Claude/Gemini

pipeline.embed_aurora

embeddings via Bedrock Cohere v4 → pgvector no Aurora (incremental)

pipeline.dedup_cultos

detecta live/corte, cria aliases e séries; recalcula stats

pipeline.export_web

exporta os JSONs do frontend + transcrição completa (merge de fragmentos)

pipeline.export_ebooks

gera volumes por pregador em EPUB, HTML imprimível/PDF e Markdown, recortando lives para manter só o sermão

pipeline.export_status

snapshot de saúde do pipeline para a página /status

pipeline.validate_web

gate de validação dos JSONs antes do deploy (CI + autoenrich)

pipeline.export_aurora

espelha o SOT no Aurora via RDS Data API (idempotente)

CI/CD & Git Flow

GitHub Actions assume role via OIDC (sem AWS keys no repo). Fluxo feature/* → develop → homolog → main, com proteção de branch e validação dos dados antes do deploy.

terraform-plan

PR · comenta `tofu plan` se mexeu em infra/

terraform-apply

push em main · aplica a infra de produção

api-deploy

push em main (apps/api/**) · empacota zip + atualiza a Lambda

etl-cron

diário 03:00 BRT · build_sot → export_aurora → embed_aurora

deploy (Vercel)

push em main · build na nuvem da Vercel

ci

PR · ruff + import + validate_web + tsc/next build

Local vs. nuvem

☁️ Produção — 100% nuvem

Site (Vercel), busca/chat/IA (Lambda + Aurora + Bedrock), voz (Polly + S3) e o sync diário do Aurora (GitHub Actions). Não depende de nenhuma máquina local — o site fica no ar mesmo com tudo desligado.

💻 Local — opcional

Só para ingerir conteúdo novo: transcrever vídeos (Whisper) e gerar os guias de estudo (CLIs de IA). O acervo atual já está completo; esses passos rodam sob demanda quando há vídeos novos.

Acompanhe os números reais em Status (ao vivo do Aurora).

Autenticação & e-mail

Acesso por e-mail (código OTP) via Amazon Cognito, com self-signup. O código é enviado por Amazon SES de no-reply@moretes.com (DKIM + DMARC, fora do sandbox). O login por senha continua válido. A sessão é um JWT próprio (cookies httpOnly), e o gate de rotas fica no proxy.ts — o Cognito apenas comprova o e-mail e emite a mesma sessão. Termos & LGPD com aceite registrado por usuário.

Cognito · Email OTP

código de 6 dígitos; conta criada no 1º acesso

SES · seu domínio

no-reply@moretes.com, DKIM/DMARC, lista de espera

Aceite (LGPD)

termos versionados + consentimento gravado no Aurora

Lume TV — canal ao vivo

Um canal contínuo (estilo Samsung TV+) que transmite os sermões do acervo em sequência, sincronizado para todos: a posição no ar é calculada do relógio sobre uma grade determinística (mesma cena no mesmo minuto, sem servidor de vídeo — só o YouTube IFrame). Aberto a todos, sem login para assistir. Abrir a TV →

Sincronizado, sem pausa

Grade de ~734h; a posição vem do relógio + soma das durações. Próximo culto / voltar ao ao vivo.

Estudo acompanhando

O guia da pregação no ar (ideia central, texto-base, esboço, perguntas) atualiza junto com o vídeo.

Presença ao vivo

Quantas pessoas assistindo agora (heartbeat em DynamoDB com TTL, via polling).

Chat + reações

Mensagens em tempo real (polling 2,5s) e emojis que sobem sobre o player. Enviar exige login.

Agentes do estudo

5 personas (Notas da Pregação, Referência Cruzada…) comentam o culto a cada 5 min, interagem entre si e respondem perguntas (Bedrock).

Moderação & segurança

Filtro automático de ofensas (anti-evasão) + admin pode apagar e banir. Tudo passa pelo segredo interno da API.

Tempo real de baixo custo: chat, presença e reações ficam no DynamoDB on-demand (escala a zero, itens expiram por TTL) e os agentes rodam por EventBridge só quando há gente assistindo — sem WebSocket nem servidor dedicado.

Painel administrativo

Em /admin (restrito por e-mail), métricas reais do Aurora: DAU/WAU/MAU, acessos por dia (com usuários únicos), uso de IA por tipo, perguntas mais frequentes, heatmap de horários, novos cadastros, lista de espera, cultos mais vistos e detalhe por usuário (frequência, eventos, histórico, favoritos). Inclui busca, ordenação e exportação CSV.

Open source para estudo

Código (pipeline Python + app Next.js + IaC OpenTofu) sob licença MIT, por Fernando Francisco Azevedo — estudo prático de engenharia de dados, RAG, IA aplicada e cloud serverless num caso real. O dataset são transcrições de pregações de um canal público no YouTube; este repositório cobre apenas o software.

Rodar localmente
uv pip install -e packages/pipeline      # pacote Python
cd apps/web && pnpm install               # frontend
python -m pipeline.build_sot              # constrói o banco (SOT)
python -m pipeline.export_web             # gera os JSONs estáticos
node_modules/.bin/next dev                # http://localhost:3000
Subir infra AWS
cd infra/bootstrap && tofu apply          # uma vez: state bucket + OIDC
cd ../envs/prod && tofu apply             # Aurora + Lambda + CloudFront + Polly/S3
python -m pipeline.export_aurora          # primeira carga de dados
# daí em diante, push em main faz deploy via GitHub Actions

Docs no repositório: docs/ARQUITETURA.md, docs/RUNBOOK.md, docs/DEPLOY.md, infra/README.md, CONTRIBUTING.md.

Sobre o criador

Fernando Francisco Azevedo

Fernando Francisco Azevedo

Arquiteto de Soluções Sênior · AWS Community Builder 2026 (AI Engineering)

Esposo da Juliana e pai da Maria Fernanda — uma família cristã protestante reformada, que ama a Deus e busca seguir a Sua Palavra. Dediquei este projeto, sem fins lucrativos, para propagar a obra de Cristo: que a pregação fiel da Palavra alcance, sirva e edifique mais pessoas. Soli Deo Gloria.

Profissionalmente, sou especializado em AWS, arquiteturas cloud-native, DevSecOps e soluções de escala enterprise. Tenho 4 certificações AWS e 2 MBAs (Arquitetura de Soluções — Full Cycle; Engenharia de Software com IA) e graduação em Administração pela Universidade Metodista de São Paulo. Vivi e trabalhei por 5 anos na Irlanda, onde concluí o Higher Diploma in Science in Computing com First-Class Honours no CCT College Dublin — uma das melhores faculdades de tecnologia da Europa. Este acervo é também meu laboratório real de engenharia de dados, RAG e IA aplicada.

Conheça meu portfólio completo →

Credenciais · 4 certificações AWS + 2 MBAs + AWS Community Builder

AWS Community Builder 2026 — AI EngineeringAWS Certified Solutions ArchitectAWS Certified Developer — AssociateAWS Certified Cloud PractitionerAWS Certified AI PractitionerMBA Arquitetura de Soluções — Full CycleMBA Engenharia de Software com IA

Contato