Visão geral
Anotações rápidas acabam espalhadas por arquivos e conversas, sem nada que proteja a conta ou o conteúdo. O Bridnote é um único lugar para escrever, etiquetar, anexar arquivos, arquivar e proteger notas, com verificação em duas etapas e registro da atividade da conta. É um serviço no ar, disponível em bridnote.com, e também é onde tomo e defendo decisões de engenharia de ponta a ponta, do modelo de dados ao comportamento da interface. A contrapartida de código aberto tem o seu próprio estudo de caso, o Bridopen; as notas protegidas e o editor de texto formatado pertencem a este código privado.
Minha contribuição
Sou o único autor do repositório: 75 commits entre setembro e outubro de 2026. Projetei as camadas e escrevi o backend, as migrations do banco, os templates HTML, o código do navegador, a integração do editor e as suítes de testes. Também escrevi a configuração de contêineres, o workflow de release e a documentação, inclusive os registros de decisão de arquitetura.
O projeto existe para exercitar decisões de ponta a ponta que eu consiga justificar por escrito: limites entre camadas, o que o servidor pode saber, migrations de esquema, releases e o comportamento da interface em uso real.
Arquitetura
Um monolito modular em camadas. Um único ponto de entrada compõe configuração, banco, storage, e-mail, repositories, services e handlers, e registra as rotas. Os módulos de negócio (notas, usuários, páginas legais) ficam separados da infraestrutura transversal que compartilham.
Regras de camada
- Handlers cuidam só de HTTP: sessão, leitura da requisição, resposta, renderização e JSON.
- Services concentram casos de uso, validação de fluxo e orquestração.
- Models guardam entidades, estados, constantes e regras puras de domínio.
- Repositories isolam SQL, leitura de linhas, transações e mapeamento de persistência.
- Templates recebem DTOs e page models, nunca regras de negócio.
Stack
- Backend: Go com o servidor HTTP da biblioteca padrão; sem framework web.
- Dados: PostgreSQL com migrations versionadas.
- Views: templates renderizados no servidor com navegação parcial, Tailwind e JavaScript puro.
- Editor: o editor de texto formatado Lexical, empacotado no build para o deploy continuar só Go.
- Entrega: Docker Compose atrás de um proxy reverso, com releases marcadas por tags no Git.
Decisões de engenharia
Três decisões que moldaram o produto, cada uma com a alternativa considerada e o que ela custa. O repositório mantém vinte e um registros de decisão no total.
1. Cifra ponta a ponta só para as notas que o usuário marcar como protegidas
- Decisão:
- as notas escolhidas são cifradas no navegador com uma frase-senha que fica com o usuário, junto com uma chave de recuperação mostrada uma única vez. O servidor guarda apenas texto cifrado dessas notas e não consegue lê-las.
- Alternativa:
- cifrar todas as notas, ou confiar em cifra de disco e em uma política de privacidade.
- Motivo:
- operador, vazamento do banco ou ordem legal recebem texto cifrado nas notas que importam, enquanto as notas comuns mantêm busca no servidor e cartões renderizados.
- Limitação:
- esquecer a frase-senha sem ter a chave de recuperação torna as notas ilegíveis para sempre, e as notas protegidas ficam fora da busca no servidor.
2. Editor visual com HTML saneado guardado como conteúdo da nota
- Decisão:
- as notas são editadas com um editor de texto formatado no modal e guardadas como HTML que o servidor sanea ao gravar. Texto puro continua aceito e é convertido.
- Alternativa:
- Markdown com barra de atalhos e prévia, ou dois formatos paralelos para texto puro e HTML.
- Motivo:
- o público não é técnico, e um protótipo que expunha marcas de Markdown foi reprovado. Um único formato gravado simplifica exportação e busca.
- Limitação:
- o editor exige JavaScript e aumenta o peso da página que o abre, e a busca precisa ignorar a formatação.
3. A nota abre em um modal e salva sozinha
- Decisão:
- ver, editar e criar uma nota acontecem em um único modal sobre a lista em que o usuário está, com salvamento automático logo após a última alteração, desfazer e refazer.
- Alternativa:
- páginas separadas de visualização, edição e criação, com botões explícitos de Salvar e Cancelar.
- Motivo:
- mudar uma palavra custava quatro cliques e uma troca de página; o modal mantém a posição na grade e elimina os passos extras.
- Limitação:
- o salvamento automático multiplica requisições pequenas, então os salvamentos têm debounce e saem um por vez; edições incompletas são sinalizadas em vez de descartadas em silêncio.
Qualidade, segurança e operação
O projeto está no ar, então esta seção fica no nível da abordagem. Os detalhes de implementação das proteções não são publicados aqui de propósito.
Testes e portão de release
- 33 arquivos de teste em Go, cobrindo handlers, services, repositories, models e pacotes de plataforma.
- 19 specs de navegador que abrem todas as telas em um Chromium real, além de um teste unitário dos scripts de navegação.
- O workflow de release roda os testes Go, o teste do front-end e os testes de navegador antes de publicar.
Proteção da conta
- As senhas são guardadas apenas como hashes com salt.
- Verificação em duas etapas opcional, lista de sessões ativas e encerramento por sessão.
- Defesas em camadas no pipeline de requisições e separação entre notas comuns e protegidas.
Dados e operação
- Migrations de banco versionadas e releases com tags, a última sendo a v0.1.5.
- Trilha de auditoria separada dos eventos da conta, que registra identificadores, nunca o conteúdo das notas.
- Os anexos ficam fora do banco e são verificados antes de serem aceitos.
- Exportação e exclusão da conta pelo usuário logado.
Resultados e limitações
O que existe hoje é uma aplicação funcional: cadastro com confirmação por e-mail, login com verificação em duas etapas opcional, recuperação de senha, notas abertas em um modal com salvamento automático, desfazer e refazer, um editor visual com estilos de texto, listas, listas de tarefas e tabelas, tarefas que se marcam direto no cartão, etiquetas e cores, ordem manual por arrastar e soltar, anexos, arquivo e lixeira com exclusão reversível, busca por texto, etiqueta e cor que ignora acentos, notas protegidas com anexos protegidos, tema claro e escuro, e exportação e exclusão da conta.
Limitações declaradas
- O código é privado. As afirmações desta página não podem ser verificadas de fora. Posso apresentar o código, os testes e os registros de decisão mediante pedido.
- Nenhum benchmark de desempenho foi publicado. Não tenho medidas de latência, vazão ou disponibilidade para afirmar sobre este projeto.
- Não há números públicos de uso. O serviço está no ar, mas ainda em desenvolvimento ativo, na versão 0.1.5; não afirmo número de usuários nem adoção.
- Notas protegidas não podem ser recuperadas sem a frase-senha ou a chave de recuperação, e ficam fora da busca no servidor por desenho.
Experimente
O Bridnote está online em bridnote.com. O código-fonte é privado; para o código em si, posso fazer uma apresentação da arquitetura, dos testes e dos registros de decisão.
As capturas desta página usam dados fictícios de demonstração, no tema claro.
Galeria
Telas da aplicação com dados de demonstração — selecione uma imagem para ampliar e percorrer a galeria.
Início: notas fixadas e outras notas, com um cartão pronto para criar uma nova.
Nota aberta no modal, com lista de tarefas, etiqueta e anexos.
Gerenciamento de etiquetas.
Arquivo.
Segurança: verificação em duas etapas, histórico de sessões e notas protegidas.