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 **Mousepad** (editor de texto do XFCE): barra de menus superior, barra de ferramentas, área de
texto limpa e barra de status na parte inferior. 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 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). restauração) e autenticação por **token** (Bearer para API / cookie HttpOnly para o navegador).
``` ```
┌──────────────────────────────────────────────────────────────────────┐ ┌──────────────────────────────────────────────────────────────────────────┐
│ ☰ Notas Arquivo Editar Exibir Ajuda │ ← barra de menus │ ☰ Notas Arquivo Editar Exibir Ajuda │ ← barra de menus
├──────────────────────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────────────────────────┤
│ +Nova 💾Salvar ⬇Baixar │ B I S H1 H2 • 1 ❝ 🔗 </> { } │ Formato ▾ │ ← barra de ferramentas │ ✚Nova 💾Salvar ⬇Baixar │ B I S H1 H2 ≡• 1 ❝ 🔗 </> { } │ Formato ▾ │ ← barra de ferramentas
│ [ Editar | Preview ] 🕘Versões │ │ [ Editar | Preview ] 🕘Versões │
├──────────────┬──────────────────────────────────────┬──────────────── ├─────────────────┬────────────────────────────────────────────────────────┤
│ Buscar… │ Título da nota categoria │ HISTÓRICO DE │ │ Buscar… │ ┌ nota.md ● ─┬─ outra.md ─┐ ✚ │ ← abas │
│ CATEGORIA ▾ ├──────────────────────────────────────┤ │ REVISÕES │ │ CATEGORIAS +pasta├─────────────┴─────────────┴──────────┴────────────────┤
│ TAGS │ # Placas │ │ hash · autor │ │ 🗂 Todas as notas│ Título da nota 🗀 devops +1 ▾ │
│ #linux 2 │ **nvme** em `/dev/nvme0` │ │ mensagem · data│ │ 🗄 Sem categoria ├────────────────────────────────────────────────────────┤
│ NOTAS │ - controladora #linux │ ├────────────────┤ │ 📂 devops 1 │ 1 │ # Placas │
│ nota1 .md │ … │ │ diff unificado │ │ · 📁 k8s 2 │ 2 │ │
│ nota2 .txt │ │ │ +restaurar │ │ TAGS │ 3 │ **nvme** em `/dev/nvme0` │ ← números de linha, │
├──────────────┴──────────────────────────────────────┴────────────────┤ │ #linux 2 #devops1│ 4 │ - controladora #linux │ cores, marcador │
│ nota.md .md Ln 4, Col 12 128 caracteres · 20 palavras ●● │ ← barra de status │ 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 ## Funcionalidades
- **3 formatos por nota**: Texto puro (`.txt`), Markdown (`.md`) e HTML (`.html`), alternáveis no - **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 ├── cmd/notas/ # main: flags, env, graceful shutdown
├── internal/ ├── 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) │ ├── 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) ├── web/ # frontend estático (go:embed no binário)
│ ├── index.html css/app.css js/app.js │ ├── index.html css/app.css js/app.js
├── Dockerfile # multi-stage: golang:alpine → scratch ├── 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** 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 (sem usuários múltiplos); a imagem final é `scratch` non-root (uid 65534) — sem shell para
`exec` de depuração, por design. `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 ## Testes
```bash ```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 ./... go vet ./...
node --check web/js/app.js node --check web/js/app.js
``` ```