Skip to content

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 wherever parseClipboardToBlocks lives)
  • What: Track Shift in the paste path (keydown ref flag for mod+shift+V). When set, ignore text/html: escape the text/plain payload, split on newlines into paragraph blocks (single line pastes inline as plain text via insertHTML with 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
  • 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
  • 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: BlockRenderer resolves page-link icons server-side (batch fetch icons for entity links in the HTML, stamp data-icon-glyph/data-icon-img before dangerouslySetInnerHTML). Keep sanitizer stripping icon attrs on save (icon stays derived, never stale).
  • Verification: Playwright: paste an internal page URL as a link, assert ::before icon 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
  • 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.sh exits 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