1

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.

home

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.

Lista de livros

Visualização de capítulo

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.

Resultados de busca

Resultados agrupados por capítulo


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.

Notas

Notas com passagens vinculadas

Lista de passagens

Lista de notas


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.

Liturgia do dia

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

Seletor de data da liturgia

Histórico de liturgias


As decisões técnicas

Aqui entro em mais detalhe porque foram as partes que mais me ensinaram.

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.

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.

Carregando publicação patrocinada...
1