Commit Graph
19 Commits
Author SHA1 Message Date
eezd e239fff253 fix(platform): support Windows storage and native filesystem boundaries 2026-10-27 14:47:25 +08:00
eezd 12d13327a6 feat(release): add semantic version to application builds 2026-10-27 14:15:57 +08:00
eezd 10fd6d8efb feat(vault): initialize fresh instances with public example notes 2026-10-27 13:41:10 +08:00
eezd ccb16acbea chore: standardize project comments in English 2026-10-26 22:52:12 +08:00
eezd 11f5e4fcf4 fix(dev): load runtime metadata without frontend build artifacts 2026-10-25 13:59:54 +08:00
eezd 9449a1aa65 feat(storage): expose backup restoration and maintenance tools 2026-10-25 13:22:16 +08:00
eezd 88492fdcde feat(settings): organize categories and include optional font storage 2026-10-25 13:22:16 +08:00
eezd 56145dba72 feat(settings): show categorized storage usage on demand 2026-10-25 11:56:38 +08:00
eezd ac10de0466 feat(trash): add bulk purge and automatic retention 2026-10-25 11:56:28 +08:00
eezd 1882312435 feat(settings): manage shared interface and editor fonts 2026-10-24 20:14:48 +08:00
eezd 19aab631ec feat(ui): streamline workspace settings and remove sharing
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.
2026-10-24 12:32:23 +08:00
eezd a923c2dfb9 feat(knowledge): index note relationships and maintain moved links 2026-10-22 14:52:37 +08:00
eezd 8b54ccba18 Remove setup code from first-run initialization 2026-10-21 14:19:11 +08:00
eezd 8ce4a11b33 Add managed plugins with lifecycle cleanup and editor extensions 2026-10-20 11:53:29 +08:00
eezd 7f65162115 Add synced themes, color modes and custom CSS snippets 2026-10-20 10:06:58 +08:00
eezd 5ac01894e6 Add read-only sharing, API tokens and OpenAPI spec
- 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
2026-10-17 15:21:47 +08:00
eezd 55f0ee174e Add full-text search
- 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
2026-10-16 20:17:24 +08:00
eezd bfe0a0654d build: add Docker image and deployment notes
- 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
2026-10-16 18:37:14 +08:00
eezd c4d2bd4636 feat(server): add Go backend with vault, auth, events and REST API
- vault: path validation (no traversal, hidden segments or symlink
  escape), atomic writes with If-Match/If-None-Match revisions, moves
  that carry the note's .assets folder and rewrite its image links,
  trash with restore, content-addressed asset uploads
- auth: single-user Argon2id password, sliding sessions in SQLite,
  login rate limiting, first-run setup gated by a one-time code written
  to the data directory
- watch: fsnotify plus periodic rescans diffed against a snapshot, so
  both RawMark and external edits are broadcast as tree/changed/moved/
  deleted events over WebSocket
- api: stdlib router, SameSite=Strict cookies plus Origin checks,
  sandboxed raw file serving, embedded SPA with gzip and CSP
2026-10-16 18:23:23 +08:00