diff --git a/README.md b/README.md index 4f8f5a4..0755a16 100644 --- a/README.md +++ b/README.md @@ -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/ # 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 ```