docs: README alinhado com o estado atual do app

- Diagrama ASCII redesenhado: abas, árvore de categorias no sidebar,
  gutter com números de linha e marcador de coluna
- Nota sobre o layout mobile (gaveta + painel em tela cheia)
- Tamanho do binário (~7 MB com -trimpath), estrutura de diretórios,
  seção de testes e segurança (localStorage de preferências/abas)
This commit is contained in:
lgcosta committed 2026-11-04 12:13:24 -03:00
1 parent 70887b5b48
commit 0f2c32ae3d
1 file changed
+30 -20
+30 -20
View File
@@ -4,29 +4,36 @@ Aplicação web completa para gerenciamento de notas inspirada no visual sóbrio
**Mousepad** (editor de texto do XFCE): barra de menus superior, barra de ferramentas, área de
texto limpa e barra de status na parte inferior.
Backend único em **Go** (binário estático de ~11 MB com o frontend já embutido), armazenamento em
Backend único em **Go** (binário estático de ~7 MB com o frontend já embutido), armazenamento em
disco no estilo **Git** (blobs endereçados por SHA-256 + histórico de revisões com diff e
restauração) e autenticação por **token** (Bearer para API / cookie HttpOnly para o navegador).
```
┌──────────────────────────────────────────────────────────────────────┐
│ ☰ Notas Arquivo Editar Exibir Ajuda │ ← barra de menus
├──────────────────────────────────────────────────────────────────────┤
│ +Nova 💾Salvar ⬇Baixar │ B I S H1 H2 • 1 ❝ 🔗 </> { } │ Formato ▾ │ ← barra de ferramentas
│ [ Editar | Preview ] 🕘Versões │
├──────────────┬──────────────────────────────────────┬────────────────
│ Buscar… │ Título da nota categoria │ HISTÓRICO DE │
│ CATEGORIA ▾ ├──────────────────────────────────────┤ │ REVISÕES │
│ TAGS │ # Placas │ │ hash · autor │
│ #linux 2 │ **nvme** em `/dev/nvme0` │ │ mensagem · data│
│ NOTAS │ - controladora #linux │ ├────────────────┤
│ nota1 .md │ … │ │ diff unificado │
│ nota2 .txt │ │ │ +restaurar │
├──────────────┴──────────────────────────────────────┴────────────────┤
│ nota.md .md Ln 4, Col 12 128 caracteres · 20 palavras ●● │ ← barra de status
└──────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────┐
│ ☰ Notas Arquivo Editar Exibir Ajuda │ ← barra de menus
├──────────────────────────────────────────────────────────────────────────┤
│ ✚Nova 💾Salvar ⬇Baixar │ B I S H1 H2 ≡• 1 ❝ 🔗 </> { } │ Formato ▾ │ ← barra de ferramentas
│ [ Editar | Preview ] 🕘Versões │
├─────────────────┬────────────────────────────────────────────────────────┤
│ Buscar… │ ┌ nota.md ● ─┬─ outra.md ─┐ ✚ │ ← abas │
│ CATEGORIAS +pasta├─────────────┴─────────────┴──────────┴────────────────┤
│ 🗂 Todas as notas│ Título da nota 🗀 devops +1 ▾ │
│ 🗄 Sem categoria ├────────────────────────────────────────────────────────┤
│ 📂 devops 1 │ 1 │ # Placas │
│ · 📁 k8s 2 │ 2 │ │
│ TAGS │ 3 │ **nvme** em `/dev/nvme0` │ ← números de linha, │
│ #linux 2 #devops1│ 4 │ - controladora #linux │ cores, marcador │
│ NOTAS 3 │ 5 │ … ┊ │ de coluna (80) │
│ nota1 .md │ │
│ nota2 .txt │ │
├─────────────────┴────────────────────────────────────────────────────────┤
│ nota.md .md Ln 4, Col 12 128 caracteres · 20 palavras ● não salvo│ ← barra de status
└──────────────────────────────────────────────────────────────────────────┘
```
No celular (≤760px) a barra lateral vira **gaveta** com backdrop e o painel de versões
ocupa a tela inteira; menus e toolbar rolam horizontalmente com botões só de ícone.
## Funcionalidades
- **3 formatos por nota**: Texto puro (`.txt`), Markdown (`.md`) e HTML (`.html`), alternáveis no
@@ -90,9 +97,9 @@ restauração) e autenticação por **token** (Bearer para API / cookie HttpOnly
.
├── cmd/notas/ # main: flags, env, graceful shutdown
├── internal/
│ ├── store/ # persistência em disco + revisões (estilo Git)
│ ├── store/ # persistência em disco, revisões (estilo Git) e árvore de categorias
│ ├── diffx/ # diff unificado (gotextdiff/Myers)
│ └── api/ # rotas HTTP, auth, render de Markdown
│ └── api/ # rotas HTTP, auth, CRUD de categorias, render de Markdown
├── web/ # frontend estático (go:embed no binário)
│ ├── index.html css/app.css js/app.js
├── Dockerfile # multi-stage: golang:alpine → scratch
@@ -185,11 +192,14 @@ curl -X DELETE -H "Authorization: Bearer $T" $B/api/categories/<id> #
a requisição chega por HTTPS/`X-Forwarded-Proto`. O modelo é **token único compartilhado**
(sem usuários múltiplos); a imagem final é `scratch` non-root (uid 65534) — sem shell para
`exec` de depuração, por design.
- Preferências do editor e abas abertas ficam em `localStorage` (dados não sensíveis, por
dispositivo/navegador); o token nunca vai para lá.
## Testes
```bash
go test ./... # store (revisões/GC/tags), diffx (diff unificado), api (fluxo HTTP completo)
go test ./... # store (revisões/GC/tags/árvore de categorias/migração),
# diffx (diff unificado), api (fluxo HTTP completo + CRUD de categorias)
go vet ./...
node --check web/js/app.js
```