Align the root guidance, existing skill entry points, and README with resource API directories, complete response envelopes, and named component folders. Keep the root guidance as the single source of project rules.
Unify compact workspace controls and panel transitions, move directory actions into the context menu, and remove backlink UI.
Reorganize settings with searchable sections, per-setting resets, shortcut search, and accurate save feedback.
Remove sharing UI, APIs, authentication helpers, and storage code; provide a transactional cleanup script with retirement tests. Reject directories during orphan image cleanup and cover mixed-batch preservation.
Separate interface typography from document text and enlarge controls across the workspace and public reader. Keep tree menus within the viewport and make constrained dialogs scrollable.
Preserve nested image references, escape moved link paths, synchronize note creation and daily-note opening, and hydrate shared headings. Add regression coverage for settings and workspace behavior.
Add scoped public navigation, reading progress, focus and print controls without loading the editor. Polish responsive settings, graph and media layouts.
Correct share expiry units, preserve math and code during link maintenance, and normalize Markdown destinations for templates and note navigation. Verify browser flows and document the new tools.
Show images in asset directories with preview, rename, replacement, and trash recovery. Update local Markdown references when images move and restore original files if related metadata cannot be committed.
Refresh image previews after replacement and compare actual contents when deduplicating subsequent uploads.
- Share a note as a live read-only page at /s/{token} with optional password and expiry
- Share page renders with the shared parser (TOC, footnotes, math, Mermaid, code highlighting)
and only serves images from the note's own .assets directory
- Shares follow renames made through the API or externally
- Manage shares and API tokens from the command palette and file tree
- Accept read/write API tokens as Bearer credentials; management endpoints require a session
- Serve a hand-written openapi.json, checked against the route table in tests
- Index notes in a separate, rebuildable SQLite database (index.db) using FTS5 trigram,
synced from watcher snapshots so external edits are picked up; terms under 3 characters
fall back to LIKE
- GET /api/v1/search?q= returns matching notes with the first matching line and a snippet;
path matches rank first
- Sidebar search panel (Ctrl+Shift+F) with highlighted terms and keyboard navigation;
opening a result jumps to and selects the match
- Restore scroll position on tab switch with scroll snapshots; restoring scrollTop drifted
by a few lines after line heights were re-estimated
scripts/dev.sh checks toolchains and ports, installs frontend deps when
the lockfile changes, starts the Go server and Vite with prefixed logs,
and stops both on Ctrl+C or when either exits. The Vite proxy reads the
same API_PORT so custom ports keep working.
- The dev build tag reads web/dist from disk instead of embedding it,
so the backend starts without building the frontend first; Vite
serves the UI and proxies /api and WebSocket to the Go server
- Document the two-terminal dev workflow and ignore .dev-data/
- Multi-stage build: frontend, static Go binary with embedded assets,
distroless nonroot runtime (~35 MB) with a built-in healthcheck
- Explain how to fix data directory permission errors on bind mounts