156 Commits
Author SHA1 Message Date
eezd e028614dba Adapt built-in themes to the supplied editor snippets 2026-10-21 16:34:02 +08:00
eezd 828d50f242 Support live collection shares with stable member scopes 2026-10-21 16:16:53 +08:00
eezd ffc95d6dbc Add tree multiselection, batch actions and Markdown export 2026-10-21 16:10:49 +08:00
eezd f473ec64b6 Manage folder images in a gallery and hide asset directories 2026-10-21 16:05:01 +08:00
eezd fbce545d98 Allow custom command shortcuts and heading bindings 2026-10-21 16:02:58 +08:00
eezd 7344bb19dc Polish sidebar controls, font input and tab menus 2026-10-21 15:57:33 +08:00
eezd d253536009 Add image listing and asset management
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.
2026-10-21 15:14:07 +08:00
eezd 8b54ccba18 Remove setup code from first-run initialization 2026-10-21 14:19:11 +08:00
eezd 8b54258df5 Update project collaboration and implementation guidelines 2026-10-21 14:11:24 +08:00
eezd 34d2acbbd5 Add Markdown and ZIP notebook import 2026-10-21 12:56:38 +08:00
eezd 903a617439 Move app installation entry into About settings 2026-10-21 12:32:15 +08:00
eezd 606e08ca39 Use port 21000 and document CDN hostname requirements 2026-10-21 12:18:57 +08:00
eezd 96596110ec Add Docker Compose deployment and HTTPS proxy configuration 2026-10-21 12:04:53 +08:00
eezd 9e9ab03c2b Add About settings with build identity and API documentation 2026-10-21 11:47:27 +08:00
eezd fcd0fdd7a4 Recognize sibling ordered list items when rewriting asset links 2026-10-21 11:32:48 +08:00
eezd f188f0fc32 Add synchronized editor spelling and tab width preferences 2026-10-20 19:08:43 +08:00
eezd f9cfb138ea Resync initial event connections and render nested task blocks 2026-10-20 18:59:54 +08:00
eezd 2df1ab87df Preserve code samples and watcher state during file updates 2026-10-20 18:59:41 +08:00
eezd 3a8248e560 Preserve drafts and asset paths across note moves 2026-10-20 18:59:26 +08:00
eezd 8c13dfeaec Convert pasted web content to Markdown and import remote images 2026-10-20 18:18:00 +08:00
eezd 84e89c8fe4 Support live recursive folder shares and follow subject moves 2026-10-20 17:20:23 +08:00
eezd 89472fe6fd Subscribe to vault events before completing WebSocket upgrades 2026-10-20 17:01:29 +08:00
eezd e66fee9dac Include note filenames in new share links 2026-10-20 14:41:43 +08:00
eezd ac81544e03 Propagate synchronization and plugin failures correctly 2026-10-20 12:58:41 +08:00
eezd 1e33f50c5e Block encoded unsafe links and revoked event credentials 2026-10-20 12:55:00 +08:00
eezd df064155c7 Preserve vault state on failed file operations 2026-10-20 12:46:55 +08:00
eezd 7e52d9a00b Fix note saves and drafts across asynchronous edits 2026-10-20 12:43:11 +08:00
eezd 8ce4a11b33 Add managed plugins with lifecycle cleanup and editor extensions 2026-10-20 11:53:29 +08:00
eezd 9fd7e2a948 Add built-in white and black themes 2026-10-20 10:26:49 +08:00
eezd 7f65162115 Add synced themes, color modes and custom CSS snippets 2026-10-20 10:06:58 +08:00
eezd 1562519f08 Add installable PWA shell with safe updates and offline status 2026-10-19 13:22:56 +08:00
eezd 64915a7b94 Add tab reordering, sidebar resize and collapse, and outline panel
- Drag tabs to reorder; context menu to close, close others, close right
- Resizable sidebar width (synced setting), collapsible with Mod+\
- Outline panel (Mod+Shift+O): right column on desktop, overlay on mobile
- Mobile: title opens quick switcher, swipe left closes the drawer,
  44px touch targets
2026-10-17 17:44:05 +08:00
eezd 91da6e116e Add mobile format toolbar, image picker and move-to dialog
- Markdown format commands shared by Ctrl+B/I/K and a toolbar above the
  soft keyboard on touch devices; bold and italic stack correctly
- Fit the app to the visual viewport so the keyboard does not cover the
  caret or the toolbar
- Insert images from the photo library or a file picker
- Move notes and folders with a folder picker from the file tree menu or
  the command palette
- Open the file tree menu with a long press on touch devices
2026-10-17 17:12:43 +08:00
eezd eb63b14c8e Add settings page with synced appearance and password change
- Store app settings as one JSON document on the server, merged per key and
  pushed to other devices; cache locally to avoid a flash on load
- Settings page groups appearance, account, shortcuts, shares, API tokens and
  trash; full screen with a section list on phones
- Font size and content width settings
- Change the login password, signing out other sessions
- Settings writes and password changes only accept a login session
2026-10-17 16:23:39 +08:00
eezd 5b326a70bf Lock out a source for 15 minutes after 30 failed passwords
Login and share password failures share one counter per source. A correct
share password does not reset it, so it cannot be used to keep guessing the
login password.
2026-10-17 15:51:40 +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 7b076346a4 Drop note encryption from README 2026-10-17 14:58:07 +08:00
eezd 3c98a6bbd9 Revert "Add encrypted note storage and keyring endpoints"
This reverts commit 35d3138c7d.
2026-10-17 14:56:23 +08:00
eezd b26c5aa693 Revert "Add client-side note encryption"
This reverts commit 5cf5a45682.
2026-10-17 14:56:23 +08:00
eezd 5cf5a45682 Add client-side note encryption
- WebCrypto keyring (PBKDF2 600k + AES-GCM master key) and per-note/per-image keys
- Encrypt/decrypt commands convert the note and its own images, deleting the originals
- Unlock, setup and change-password dialogs; manual lock; lock on page close
- Encrypted images are decrypted to blob URLs; pasted images are encrypted before upload
- Rewrite image links in the browser when renaming an encrypted note
- Skip local drafts for encrypted notes and confirm before closing with unsaved changes
- Show encrypted notes as locked with an explanation outside secure contexts
2026-10-17 14:51:08 +08:00
eezd 35d3138c7d Add encrypted note storage and keyring endpoints
- Treat name.md.enc as encrypted notes; forbid coexisting twins sharing assets
- Convert between plain and encrypted notes via PUT ?convertFrom
- Store keyring at .rawmark/keyring.json with versioned writes
- Allow permanent deletion of single asset files
- Exclude encrypted notes from the search index
2026-10-17 14:24:55 +08:00
eezd 75000fc571 Add Typora extension syntax
- Parser extensions shared by the editor and the HTML renderer: ==highlight==, $inline math$
  (Pandoc rules, so amounts like $5 are not math), $$ math blocks, footnote references and
  definitions, [TOC], and YAML front matter
- Live preview: highlight, superscript/subscript, emoji names (gemoji), footnote references
  with the definition as tooltip, a clickable table of contents, styled front matter
- Math (KaTeX) and Mermaid render in place; while editing a block the source is shown with a
  live preview below. KaTeX, Mermaid and the emoji table are loaded only when a note uses them
- KaTeX is pinned to 0.18 so Mermaid shares the same copy
- Move editor focus tracking out of table.ts so block widgets and tables use the same state
2026-10-17 13:38:53 +08:00
eezd 919575f3e7 Add command palette and command registry
- Commands (with optional shortcuts and availability checks) are registered in one place;
  global shortcuts are dispatched from it, and plugins can use registerCommand later
- The quick switcher lists commands when the input starts with '>' (VS Code style),
  opened with Ctrl+Shift+P or F1 (Firefox reserves Ctrl+Shift+P), plus buttons in the
  sidebar footer and the mobile top bar; recently used commands come first
- Built-in commands: quick open, search, new note/folder, save, rename, delete, close tab,
  trash, log out
- Mount the trash dialog at the workspace level so it is not positioned inside the
  transformed mobile drawer
2026-10-17 12:14:11 +08:00
eezd d096f0da70 Add quick switcher and fix directory refresh races
- Ctrl+P quick switcher with fuzzy matching on note titles and folders; empty input lists
  recent notes with the previous note first; creates the note (and folders) when no note
  has that name; also reachable from the mobile top bar
- Track recently opened notes, following renames and moves
- Serialize directory refreshes and discard responses that raced with local edits; a stale
  response could drop an optimistically added note, and debounced callers could wait
  forever, leaving the workspace startup unfinished
- Wait for a pending note creation before renaming it
- Focus the editor after opening a note from the switcher or search
2026-10-16 21:45:01 +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 a11e0ec498 Fix redo shortcut on Windows, table rendering at doc start, and save on tab close
- Bind Mod-Shift-z to redo on all platforms (CodeMirror only binds it on Linux/macOS)
- Render tables based on editor focus so a note starting with a table is not shown as source
- Send the save request without waiting for the IndexedDB draft write, and flush on pagehide;
  Firefox could drop the last edit when a tab was closed right after typing
- Fall back to clipboardData.items when pasting images with an empty files list
2026-10-16 19:19:16 +08:00
eezd b3f05b501a build: add one-command dev launcher
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.
2026-10-16 18:48:58 +08:00
eezd dc7e43bc3c build: support running the server with go run during development
- 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/
2026-10-16 18:46:13 +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 02d904056c feat(web): add Vue workspace with file tree, tabs, autosave and live sync
- Login and first-run setup screens
- File tree with inline create/rename, context menu, drag-and-drop
  move and trash with undo; all operations update the UI first and roll
  back on failure
- Tabs keep a CodeMirror state each; edits autosave after 500 ms with
  If-Match revisions, unsent edits persist in IndexedDB, and conflicts
  or remote deletions surface as banners with explicit choices
- WebSocket events sync external edits, moves and deletions into open
  tabs; reconnects trigger a full resync
- Pasted or dropped images show instantly and upload to note.assets/
- Responsive layout with a swipe-in sidebar drawer on phones
- Switch to TypeScript 6: vue-tsc does not support TypeScript 7 yet
2026-10-16 18:37:14 +08:00