Pitch: Verbum — uma plataforma de estudo bíblico construída por frustração
Qualquer católico que tenta criar um hábito de estudo da Bíblia esbarra no mesmo problema: nenhum app resolve tudo no mesmo lugar.
O leitor de Bíblia não deixa você escrever. O app de notas não entende o que é um versículo. O calendário litúrgico fica em outro lugar, desconectado de tudo. O resultado é um ciclo de abas abertas e anotações perdidas — e nenhum lugar fixo para voltar amanhã.
Esse problema me acompanhou tempo suficiente para me levar a construir o Verbum.
O que é o Verbum
Verbum é uma plataforma de estudo centrada em três ações: ler, refletir e retornar.
Ler — a Bíblia completa, organizada por testamento e corpus, pesquisável por conteúdo.
Refletir — notas em rich-text vinculadas a passagens salvas e leituras litúrgicas, exportáveis em PDF.
Retornar — a liturgia católica do dia já está lá quando você abre o app, atualizada automaticamente toda noite.

Não é um produto comercial. É um projeto pessoal que eu uso de verdade.
Leitura
Os 73 livros estão organizados por testamento e corpus. Cada capítulo tem um layout limpo, sem distrações.


A busca por conteúdo encontra versículos por texto e agrupa os resultados por livro e capítulo. Isso importa porque encontrar a palavra "misericórdia" em vinte lugares sem saber onde cada um cai na narrativa não ajuda muito. O agrupamento por livro e capítulo é o que transforma uma lista de hits em contexto.


Passagens e notas
Uma passagem é uma coleção nomeada de versículos salvos. Você agrupa versículos relacionados sob um nome — "Misericórdia", "Ressurreição" — e esse agrupamento vira uma unidade com a qual você pode trabalhar depois.
Uma nota é um documento em rich-text. Ela pode ser vinculada a uma ou mais passagens e a leituras litúrgicas, e pode ser exportada como PDF.




Liturgia diária
A liturgia do dia — Primeira Leitura, Salmo Responsorial, Segunda Leitura (quando há) e Evangelho — já está disponível quando você abre o app.

Liturgias anteriores ficam acessíveis por data, e qualquer liturgia pode ser vinculada a uma nota.


As decisões técnicas
Aqui entro em mais detalhe porque foram as partes que mais me ensinaram.
Autenticação via magic link
Sem senhas. Você entra com e-mail, recebe um link, clica e está dentro.
A razão é prática: quem usa o Verbum não necessariamente acessa todos os dias. Usuário esporádico + senha = senha esquecida. Magic link elimina esse atrito sem abrir mão de identidade — você ainda tem uma conta, ainda tem seus dados salvos, mas não precisa lembrar de nada para entrar.
Do lado do servidor, isso também simplifica bastante: sem hash de senha para gerenciar, sem fluxo de recuperação, sem superfície de ataque para credencial vazada.
Job noturno com Trigger.dev
A liturgia do dia não é buscada no momento em que você abre o app. Ela já está lá.
Todo dia à noite, um job vai buscar a liturgia do dia seguinte, processa e armazena no banco. Quando o app abre de manhã, é uma leitura simples de banco — sem chamada externa, sem espera, sem risco de o serviço de origem estar fora.
Usei o Trigger.dev para isso porque precisava de um agendador confiável com observabilidade decente. A alternativa seria um cron rodando no servidor, que funciona mas é mais difícil de monitorar e de reprocessar manualmente quando algo dá errado.
Passagens como coleções de versículos
Esse foi o problema de modelagem mais interessante do projeto.
O modelo óbvio seria salvar uma passagem como texto livre — você seleciona os versículos, copia o texto e salva como string. Simples, mas inútil para qualquer coisa além de exibição.
O que eu implementei foi diferente: uma passagem é uma entidade com referências estruturadas a versículos. Cada versículo salvo na passagem é um registro que aponta para o livro, capítulo e número do versículo. A passagem é o agrupamento dessas referências, não o texto em si.
Isso possibilita coisas que texto livre não possibilita: ligar a mesma passagem a múltiplas notas, saber de onde vieram os versículos, reprocessar o texto se a tradução mudar, e exibir as passagens com contexto correto mesmo quando os versículos vêm de capítulos diferentes.
Full-text search
A Bíblia tem mais de 31 mil versículos. Busca por substring não escala bem aqui — e também não agrupa resultados de forma útil.
O full-text search é feito no PostgreSQL com tsvector. Os versículos são indexados com pesos e a busca retorna por relevância, não por posição no texto. Os resultados são então agrupados por livro e capítulo no servidor antes de chegar ao cliente — porque o frontend não deveria ter que fazer isso, e porque o agrupamento depende de metadados que já estão disponíveis na query.
URL-based verse highlighting
Quando você seleciona versículos em um capítulo, a URL muda para refletir a seleção. O capítulo e os versículos ficam no próprio path, separados por : — algo como /bible/gn/1:3,5,7 para versículos avulsos, ou /bible/gn/1:3-7 para um intervalo. Você pode copiar essa URL, mandar para alguém, adicionar aos favoritos — e a seleção vai junto.
É uma das funcionalidades mais simples do projeto em termos de implementação, mas que muda como você referencia o que leu. A alternativa comum — salvar a seleção no banco e gerar um ID — funciona, mas cria uma dependência: o link quebra se o dado for deletado. URL com parâmetros não tem esse problema.
Stack
TypeScript · React 19 · Fastify · PostgreSQL · Redis · Trigger.dev
O que eu não esperava quando comecei era que as partes mais difíceis não seriam técnicas. Foram as de domínio: entender como a liturgia católica é estruturada, o que faz sentido numa abstração de "passagem bíblica", e como um fluxo de estudo real funciona — não o fluxo idealizado, mas o que alguém realmente faz quando abre a Bíblia com intenção de aprender.
Alguns tutoriais cobrem bem a parte técnica. Nenhum cobre a outra.