Skip to content

feat: calmer writing — ⌘K search, focus mode, ghost links, mycelium margin - #65

Merged
kodinkod merged 8 commits into
mainfrom
claude/sleepy-galileo-v6vsfr
Oct 2, 2026
Merged

kodinkod merged 8 commits into
mainfrom
claude/sleepy-galileo-v6vsfr

Conversation

@kodinkod

@kodinkod kodinkod commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Summary

This PR follows a design-trends review: calm interfaces, keyboard-first, AI inside the text rather than in a chat. Each part is its own commit.

  1. One search box, ⌘K. It finds notes by name, by the words inside them (full-text), and by meaning, plus matching commands, all in one list.
    • A note found by its words shows the matching line, highlighted. Enter opens the note at that line.
    • A leading > limits the list to commands. The query operators ("phrase", -word, OR, path:, file:, tag:) are listed in the footer.
    • ⌘P opens the same box in command mode; ⌘O and ⌘⇧F open it on notes.
    • The separate full-text panel is gone, so there is no longer a second search window. The toolbar trigger now says "search or run a command".
  2. Reading column and focus mode.
    • Note text sits in a centred column of about 70 characters. Settings → Readable line width turns it off.
    • Focus mode (⌘.) hides all chrome and dims everything except the paragraph being written. A small pill shows how to exit.
  3. Mycelium in the text.
    • Ghost links (local, no AI): while typing, if the words before the cursor begin a note title or alias, the rest of the title shows as faint text. Tab turns the typed words into [[Title]]; Esc dismisses it. The matcher is pure and unit tested.
    • Mycelium margin (needs AI): a quiet "Grows toward" list of up to three notes close in meaning that aren't linked yet. Click inserts the link at the cursor; ⌘/Ctrl-click opens the note.
  4. Quieter chrome.
    • The note header is now a borderless folder › note breadcrumb.
    • Present and Insert database are icons that appear on hover.
    • The Save button is gone: autosave writes on its own, and ⌘S still works.
    • The toolbar's separate search button is gone.
    • No dividing lines under the toolbar or above the status bar.
  5. Earlier in this branch: no line-number gutter, and no hypha line when a note opens.

Related issues

Follow-up to #60 and #64.

Type of change

  • Bug fix
  • New feature
  • Documentation
  • Refactor / chore
  • Breaking change

How was this tested?

  • npm run lint passes (0 errors; the 5 warnings were already there)

  • npm run build passes, and npm test passes (154/154, including 9 new ghost-link matcher tests)

  • cargo fmt --check && cargo clippy --all-targets -- -D warnings pass (no Rust changes)

  • cargo test passes (no Rust changes)

  • Manually exercised in Chromium with a mocked Tauri backend:

    • ⌘⇧F opens the single box, and "spore" finds the note with the line highlighted;
    • ⌘K finds commands;
    • focus mode hides the chrome and dims other paragraphs;
    • the ghost link completed to [[Machine learning]];
    • clicking a note in the margin inserted its link.

    Still needs a check in the real Tauri app.

Screenshots / recordings

Captured locally: the unified search with a full-text hit, the reading column, focus mode, the ghost link, the margin, and the simplified header.

Contributor License Agreement

  • I have read the Mycel CLA and I agree to it for this and all my future contributions.
  • My contribution is my original work, or I have clearly identified any third-party material and its license.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f

Notes read as prose, not code; the numbered gutter was noise while
writing. Removes lineNumbers + the active-line gutter highlight and
their theme rules. The database widget's gutter markers stay — they are
inert without a gutter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

Opening a note from the tree drew a hypha arcing from the row to the
top of the editor. Remove it (and the now-unused reach() helper and
data-spore-target hook); the note still fades in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
@kodinkod kodinkod changed the title feat(editor): drop the line-number gutter feat(editor): drop the line-number gutter and the note-open hypha line Oct 2, 2026
claude added 5 commits October 2, 2026 21:57
QuickSwitcher now lists notes (by name and meaning) and matching commands
together; a leading '>' narrows it to commands. ⌘P opens the same box in
command mode, ⌘O on notes, and the new ⌘K is the default entry point. The
toolbar trigger says what it does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
- Note text sits in a centred ~70-character column (Settings → Readable
  line width; also a palette command).
- Focus mode hides every bit of chrome — toolbar, sidebars, tabs, status
  bar, the note's path bar — and dims everything but the paragraph being
  written. A small pill says how to leave; it shows on entry and when the
  pointer nears the top edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
While typing, if the words before the cursor begin an existing note's
title (or alias), the rest of the title shows as faint text after the
cursor with a small 'Tab → link' hint. Tab replaces the typed words with
[[Title]]; Esc or moving the cursor dismisses it. Local, no AI needed.

Pure matcher in lib/ghost-link.ts (unit tested): 4+ characters, starts on
a word boundary, may span words, never inside [[…]] or inline code, never
the note being edited, shortest completing title wins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
A quiet corner list ('Grows toward') of up to three notes close in
meaning to the one being written that it does not link to yet. Click
inserts [[Title]] at the cursor; Cmd/Ctrl-click opens the note. Exists
only when semantic search does; refreshes on open and ~9 s after typing
stops (after autosave + the indexer's debounce). Hidden in focus mode.
Edits reach it through a subscription, not React state, so typing never
re-renders the editor component.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
- Note header: a borderless 'folder › note' breadcrumb instead of the
  bordered bar with the monospace path; Present / Insert database become
  icons that appear on hover; the Save button goes (autosave writes on
  its own, ⌘S still saves and pins).
- Toolbar: drop the separate full-text search button — it lives in ⌘K
  and on ⌘⇧F.
- No hairlines under the toolbar or above the status bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
@kodinkod kodinkod changed the title feat(editor): drop the line-number gutter and the note-open hypha line feat: calmer writing — ⌘K search, focus mode, ghost links, mycelium margin Oct 2, 2026
There were two search windows: the switcher in the middle of the toolbar
and the separate full-text panel (⌘⇧F). Now there is one. The ⌘K box
also queries search_fulltext and fuses its hits with name and meaning
matches; a note found by its words shows the matching line, highlighted,
and Enter opens it at that line. The query operators ("phrase", -word,
OR, path:, file:, tag:) are listed in the box's footer. ⌘⇧F opens the
same box; the old FullTextSearch panel and its store flag are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQ4Dmz33k37eT3Eeiv9v6f
@kodinkod
kodinkod marked this pull request as ready for review October 2, 2026 22:11
@kodinkod
kodinkod merged commit 6d83dda into main Oct 2, 2026
2 of 3 checks passed
kodinkod pushed a commit that referenced this pull request Oct 2, 2026
Resolve against #65/#67: full-text search now lives in the ⌘K box, so
its overlay state is gone from the UI store and App.tsx; keep the local
graph overlay state next to the new focus-mode flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VeZRNKkbb6GoBgqmhLyqN8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants