Plan: CreatorTrack editor shortcuts + Help page + inline page-link icons + mobile hero fix¶
URL: https://mkdocs.justinsforge.com/memory/plans/creatortrack-editor-shortcuts-help-icons-2026-07-12/
Date: 2026-07-12 Approved spec: Ctrl+Shift+V pastes clipboard as plain text adopting destination formatting (Google Docs behavior); add all four shortcut groups (Ctrl+K link, turn-into keys, block manipulation, Ctrl+A escalation); new public Help page at creatortrack.ai/help listing all editor commands, linked from the Settings "Get help" pane; fix inline page-link icons (href-based entity resolution + server-side render so SSR/public pages show icons); fix marketing mobile hero so the tasks screenshot renders below the "AI connected to every app" line. Approved by Justin 2026-07-12 ("Approved, plan + build now"). Out of scope: paint-format (copy formatting) shortcuts; icons for task/project entity links; marketing nav redesign.
Workspace: worktree /home/justinwieb/forge-suite-wt/feat/editor-shortcuts-help-icons (branch feat/editor-shortcuts-help-icons, dev :3061, DB ct_feat_editor_shortcuts_help_icons). Commit often; merge to main ONCE at the end.
Task list¶
Task 1: Add Ctrl+Shift+V plain-text paste¶
- Files:
components/workspace/BlockList.tsx,lib/blocks/editorSelection.ts(or whereverparseClipboardToBlockslives) - What: Track Shift in the paste path (keydown ref flag for mod+shift+V). When set, ignore
text/html: escape thetext/plainpayload, split on newlines into paragraph blocks (single line pastes inline as plain text viainsertHTMLwith escaped text). No inline marks survive. - Verification: Playwright on :3061, copy rich HTML, Ctrl+Shift+V into a page, assert pasted block HTML contains no
<b>/<a>/<span>marks. - Commit:
feat(editor): Ctrl+Shift+V paste as plain text
Task 2: Ctrl+K link shortcut¶
- Files:
components/workspace/BlockList.tsx,components/workspace/LinkPopover.tsx - What: In the central
onKeyDown(~line 1917 inline-marks section), mod+K opens the existing LinkPopover anchored to the current selection (same path the toolbar uses); preserve selection. - Verification: Playwright: select text, press Ctrl+K, assert LinkPopover visible.
- Commit:
feat(editor): Ctrl+K opens link popover
Task 3: Turn-into shortcuts¶
- Files:
components/workspace/BlockList.tsx - What: mod+Alt+0 text, mod+Alt+1/2/3 heading1/2/3, mod+Shift+7 numbered, mod+Shift+8 bulleted, mod+Shift+9 todo. Reuse the existing turn-into machinery the markdown prefixes use; apply to all selected blocks when multi-select.
- Verification: Playwright: press Ctrl+Alt+1 on a paragraph, assert block type heading.
- Commit:
feat(editor): turn-into keyboard shortcuts (headings, lists, todo)
Task 4: Block manipulation shortcuts¶
- Files:
components/workspace/BlockList.tsx - What: mod+D duplicate current/selected blocks (suppress browser bookmark default); mod+Shift+ArrowUp/Down move block(s) up/down; mod+Enter toggle todo checkbox on the current block.
- Verification: Playwright: Ctrl+D duplicates a block (count +1); Ctrl+Shift+Down swaps order; Ctrl+Enter checks a todo.
- Commit:
feat(editor): duplicate, move, and todo-toggle shortcuts
Task 5: Ctrl+A escalation¶
- Files:
components/workspace/BlockList.tsx - What: First mod+A selects current block content (native); if the block's content is already fully selected, second mod+A selects all blocks via the existing multi-block selection state.
- Verification: Playwright: double Ctrl+A then type, assert all blocks replaced.
- Commit:
feat(editor): Ctrl+A escalates to select-all-blocks
Task 6: Inline page-link icons, root-cause fix¶
- Files:
lib/entityLinkIcons.ts(hydrator),lib/blocks/linkFormat.ts,components/workspace/BlockRenderer.tsx,lib/blocks/richtext.ts - What: (a) Hydrator also matches internal page hrefs missing
data-entity-id(parse node id from href), stamps entity attrs so future saves persist them. (b) Server/read-only path:BlockRendererresolves page-link icons server-side (batch fetch icons for entity links in the HTML, stampdata-icon-glyph/data-icon-imgbeforedangerouslySetInnerHTML). Keep sanitizer stripping icon attrs on save (icon stays derived, never stale). - Verification: Playwright: paste an internal page URL as a link, assert
::beforeicon attr present; load a page read-only/SSR and assert icon attrs in server HTML. - Commit:
fix(editor): page icons on all inline page links incl. SSR
Task 7: Public Help page at /help¶
- Files:
app/(marketing)/help/page.tsx(new),components/marketing/Nav.tsx,components/marketing/landing.css(only if new styles needed) - What: New marketing route listing keyboard shortcuts + markdown commands + slash menu, grouped (Formatting, Blocks, Selection, Paste, Navigation), styled with existing
ctl-*classes and shared Nav/Footer. Single source of truth: export the shortcut table from a shared module (e.g.lib/editorShortcuts.ts) so editor and help page import the same list. - Verification:
curl -fsS http://127.0.0.1:3061/help | grep -i 'Ctrl' - Commit:
feat(marketing): /help page with editor command reference
Task 8: Link Help page from Settings¶
- Files:
components/profile/SettingsModal.tsx(HelpPane ~line 2168) - What: Add a prominent "Keyboard shortcuts and commands" link in HelpPane opening https://creatortrack.ai/help in a new tab.
- Verification: Playwright: open Settings > Get help, assert link href.
- Commit:
feat(settings): link Help pane to /help command reference
Task 9: Fix mobile hero image order¶
- Files:
components/marketing/landing.css(~line 1117) - What: Scope the
@media (max-width:920px).ctl-hero-visual { order:-1 }to the two-column hero only; add.ctl-hero-inner--stack .ctl-hero-visual { order: 0 }so the stacked hero keeps copy above image on mobile. - Verification: Playwright mobile viewport (390px) screenshot of /landing; tagline above screenshot.
- Commit:
fix(marketing): mobile hero image below tagline in stacked hero
Task 10: Verify end-to-end, merge ONCE, deploy¶
- Files: none new
- What: Full Playwright pass on :3061 across Tasks 1-9, typecheck/build (cap Node heap per CT deploy OOM note), merge branch to main once, deploy via
scripts/forge_creatortrack_deploy.sh, spot-check prod :3070, teardown dev slot. - Verification:
bash /home/justinwieb/forge/scripts/forge_creatortrack_deploy.shexits 0; prod smoke on app.creatortrack.ai. - Commit: merge commit
Task 11: Register and document¶
- Files:
/home/justinwieb/forge/MEMORY.md,/home/justinwieb/forge/memory/general/reference_creatortrack_editor_shortcuts.md(new) - What: Topic file covering shortcut registry module, help page, icon hydration fix; MEMORY.md index line; update daily log.
- Verification:
grep editor_shortcuts /home/justinwieb/forge/MEMORY.md - Commit:
docs(memory): CT editor shortcuts + help page + icon fix