Skip to content

Rebrand from MouseTerm to Dormouse#70

Merged
nedtwigg merged 24 commits into
mainfrom
dormouse-rebrand
May 18, 2026
Merged

Rebrand from MouseTerm to Dormouse#70
nedtwigg merged 24 commits into
mainfrom
dormouse-rebrand

Conversation

@nedtwigg
Copy link
Copy Markdown
Member

Cons:

  • not immediately clear that it's a terminal

Pros:

  • more distinctive
  • easier to launch our not-so-terminal-ish features under
    • e.g. MouseTerm Tether? MouseTerm Mobile? vs Dormouse Pocket
  • dormouse (aka dormir = sleep mouse) and its hibernation behaviors are a great match for our alert features
    • europeans seem to know about this, but americans do not - meh, interesting learning opportunity at worst

nedtwigg and others added 17 commits May 15, 2026 16:48
Hero copy:
- Hook: "So many terminals. Which one needs attention?"
- Reveal: "A dormouse / knows when / to wake up."
- Footnote: "Multitasking terminal for mice (and hotkey wizards too)"
  (demoted from headline to footnote)

Body copy MouseTerm → Dormouse throughout Home, SiteHeader brand text,
Dependencies copy, NotifySignupForm button ("Tether ships" → "Pocket ships").
Coming-next section reframed as Dormouse Pocket; image alt updated.
Install steps and artifact filenames flipped to Dormouse-*. Marketplace
URLs point to diffplug.dormouse (publish target).

HTML head + og:/twitter: meta refreshed with new title, description,
site_name, canonical, and dormouse.sh URLs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- pages/Tether.tsx → pages/Pocket.tsx
- Route /tether → /pocket
- All internal symbols (Tether* → Pocket*, TETHER_* → POCKET_*) and
  CSS body classes (tether-marketing-body → pocket-marketing-body,
  tether-terminal-body → pocket-terminal-body)
- Share title, aria-label, and page body updated to "Dormouse Pocket"
- "Tether" kept as the verb in body copy
  ("Tether a terminal session to your phone…")

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
vscode-ext/package.json:
- name: mouseterm → dormouse
- displayName: "Dormouse — Terminal Multiplexer"
  (descriptive suffix for marketplace SEO; brand is "Dormouse" elsewhere)
- description rewritten with persistence + alert framing
- homepage → dormouse.sh
- All command IDs mouseterm.* → dormouse.*
- Command titles "MouseTerm: …" → "Dormouse: …"
- View container + view IDs (mouseterm-panel/view → dormouse-panel/view)
- activationEvents updated
- Keywords: added "dormouse" and "persistent"
- vsix output filename + dogfood script names

vscode-ext/src/*.ts:
- MouseTermViewProvider → DormouseViewProvider
- All command registrations and the executeCommand("…view.focus")
  call updated to dormouse.* IDs
- Webview panel serializer + createWebviewPanel viewType: mouseterm
  → dormouse
- Warning messages "MouseTerm:" → "Dormouse:"
- Output channel name → "Dormouse"
- Storage keys: mouseterm.session, mouseterm.selectedShellPath →
  dormouse.session, dormouse.selectedShellPath (userbase=0, no migration)

Cross-cutting message-type rename (extension ↔ webview wire protocol):
- All `mouseterm:*` ExtensionMessage / WebviewMessage discriminators
  → `dormouse:*` (init, saveState, flushSessionSave[Done], newTerminal,
  selectedShell, openThemeDebugger)
- Lib side: vscode-adapter.ts (+ test), Wall.tsx window event
  ("mouseterm:new-terminal" → "dormouse:new-terminal"), ThemeDebugger
  OPEN_THEME_DEBUGGER_EVENT constant

Lib-side miscellany:
- themes/store.ts localStorage keys
  ("mouseterm:installed-themes/active-theme" → "dormouse:…")
- ansi.ts playground PROMPT visual: user@mouseterm → user@dormouse
- KillModal story content + Playground.tsx comment matched
- shell-defaults.ts comment

Internal TS type `MouseTermTheme` left as-is — purely internal, 27-site
cascade, no user-facing impact. Separate refactor.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tauri.conf.json:
- productName: MouseTerm → Dormouse
  (this is what produces Dormouse.app / Dormouse-windows-x64-setup.exe /
   Dormouse-linux-x86_64.AppImage on next bundle build)
- identifier: com.mouseterm.standalone → sh.dormouse.standalone
  (userbase=0, no migration concern)
- Window title: Dormouse
- Updater endpoint URL → dormouse.sh

Rust crate rename (Cargo.toml):
- [package] name: mouseterm → dormouse
- [package] description rewritten
- [lib] name: mouseterm_lib → dormouse_lib
- main.rs entry call: dormouse_lib::run()
- lib.rs: log dir / log file names (~/Library/Logs/Dormouse/dormouse.log,
  %LOCALAPPDATA%/Dormouse/dormouse.log, /tmp/dormouse.log fallback)
- lib.rs: window event "mouseterm://files-dropped" →
  "dormouse://files-dropped"
- lib.rs: panic message + temp-dir test prefix
- Test fixture paths (\\Users\\…\\Local\\Dormouse\\…)

Frontend / Tauri JS bridge:
- standalone/index.html <title>
- AppBar.tsx: window event "mouseterm:new-terminal" →
  "dormouse:new-terminal"
- tauri-adapter.ts: matching files-dropped listener, STATE_KEY
  ("mouseterm.session" → "dormouse.session")
- updater.ts: STORAGE_KEY ("dormouse:update-result"), changelog URL
  (mouseterm.com → dormouse.sh); GitHub repo URL left as-is (repo not
  renamed in this pass)
- updater.test.ts: matching STORAGE_KEY + changelog URL expectations

Capability description:
- standalone/src-tauri/capabilities/default.json

scripts/dogfood.sh:
- Install dirs ($LOCALAPPDATA/Dormouse, /Applications/Dormouse.app)
- Bundle filename patterns (Dormouse_*-setup.exe, Dormouse_*.dmg)
- Binary names ($RELEASE_DIR/dormouse, dormouse.exe)
- PowerShell process filter -Name dormouse,node
- The `pnpm --filter mouseterm-standalone` workspace filter stays —
  npm package names are internal infrastructure, not renamed in this
  pass

Internal npm/pnpm workspace package names left as-is (mouseterm-lib,
mouseterm-standalone, mouseterm-sidecar) — purely internal, no
user-facing impact; separate refactor.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
.github/workflows/release.yml:
- Upload path for inner binary: mouseterm.exe → dormouse.exe
- VS Code build pnpm filter: --filter mouseterm → --filter dormouse
  (matches the new vscode-ext/package.json name)
- `--filter mouseterm-lib` workspace filter unchanged (internal pkg name)

scripts/sign-and-deploy.sh:
- FNAME_WIN/MAC/LINUX renamed: MouseTerm-* → Dormouse-*
- Windows inner-exe lookup accepts both Dormouse.exe / dormouse.exe
- Comment about AppleDouble extraction updated

scripts/bump-version.sh:
- Comment refs to the Cargo.lock `mouseterm` entry → `dormouse`

website/public/standalone-latest.json left unchanged: it points to the
already-published v0.9.1 release whose artifacts were uploaded as
MouseTerm-*. sign-and-deploy.sh regenerates this file on the next
release; the new entries will use Dormouse-*.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Root README:
- Title and tagline reframed: "A dormouse knows when to wake up.
  Multitasking terminal for mice (and hotkey wizards too)."
- Opening paragraph re-anchors with the homepage hook ("So many
  terminals — which one needs attention?")
- Try-it links updated to dormouse.sh and the new marketplace IDs
- Added a "Pocket (coming soon)" bullet to the features list
- Folder structure description: website builds dormouse.sh

vscode-ext/README.md:
- Title and all body copy MouseTerm → Dormouse
- All URLs mouseterm.com → dormouse.sh
- Command palette entries: "Dormouse: Focus" / "Dormouse: Open in Editor"

GitHub repo URL still points at diffplug/mouseterm (not renamed in this
pass; GitHub redirects renamed repos so this is forward-compatible).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Docs:
- AGENTS.md, DESIGN.md, PRODUCT.md: MouseTerm → Dormouse in prose
- docs/specs/*.md: prose + URLs (mouseterm.com → dormouse.sh) +
  command IDs (mouseterm.* → dormouse.*) + message types
  (mouseterm:* → dormouse:*) + view container IDs to match code
- docs/specs/deploy.md: example artifact filenames, log paths, env vars
- docs/specs/glossary.md, shortcuts.md: brand prose
- docs/specs/layout.md: `mousetermTheme` symbol → `dormouseTheme`
- pnpm filter `--filter mouseterm` (vscode-ext build) updated to
  `--filter dormouse`. The `--filter mouseterm-lib` and
  `--filter mouseterm-standalone` filters stay (internal pkg names).

Storybook fixtures:
- UpdateDebugDialog.stories.tsx: example error path /Applications/Dormouse.app
- Smoke.stories.tsx: "Dormouse Tokens" panel header / semantic-token caption
- MobileTerminalUi.stories.tsx: TETHER_WALL_* → POCKET_WALL_*,
  story export name TetherWall → PocketWall, scenario id

Code-side identifier renames discovered during doc sweep:
- lib/src/components/Wall.tsx: `mousetermTheme` → `dormouseTheme`
- standalone/src-tauri/src/lib.rs: `MOUSETERM_LOG_FILE` env var
  → `DORMOUSE_LOG_FILE`
- website/src/lib/tutorial-state.ts: localStorage key
  "mouseterm-tut-v3" → "dormouse-tut-v3" (userbase=0, no migration)

Left as-is:
- CHANGELOG.md historical entries (per "leave historical changelog" guidance)
- Internal npm workspace package names (mouseterm-lib, mouseterm-standalone,
  mouseterm-sidecar, mouseterm-website) — purely build-tool plumbing
- github.com/diffplug/mouseterm URLs — repo not renamed in this pass
- .claude/commands/release-notes.md — agent self-modification guard
  prevented edit; needs a manual MouseTerm → Dormouse pass

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
build:vscode and dogfood:vscode used --filter mouseterm to match the
vscode-ext package name. That was renamed to "dormouse" in
vscode-ext/package.json; update the filters to match. Workspace
filters for mouseterm-lib, mouseterm-standalone, mouseterm-website,
mouseterm-root remain unchanged (internal package names).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Workspace package names renamed (private packages, internal only —
no published npm-registry impact):

- mouseterm-root       → dormouse-root        (package.json)
- mouseterm-lib        → dormouse-lib         (lib/package.json)
- mouseterm-standalone → dormouse-standalone  (standalone/package.json)
- mouseterm-website    → dormouse-website     (website/package.json)
- mouseterm-sidecar    → dormouse-sidecar     (standalone/sidecar/package.json)

Cascading updates:

Imports (TS/TSX): every `from "mouseterm-lib/…"` and dynamic
`import("mouseterm-lib/…")` → `from "dormouse-lib/…"` across lib,
standalone, and website source/test files.

Path / alias mappings:
- standalone/tsconfig.json, website/tsconfig.json, lib/tsconfig.app.json:
  path mappings keyed on "mouseterm-lib/*" → "dormouse-lib/*"
- standalone/vite.config.ts, standalone/vitest.config.ts,
  website/vite.config.ts: alias keys
- lib/.storybook/main.ts: any moduleNameMapper / alias

`workspace:*` deps:
- standalone/package.json + website/package.json: dependency entry
  "mouseterm-lib" → "dormouse-lib"

pnpm `--filter` references:
- root package.json scripts (build/build:vscode/dev:lib/dev:website/
  dev:standalone/build:standalone/build:website/storybook)
- .github/workflows/release.yml (--filter dormouse-lib test)
- standalone/scripts/dogfood.sh
- docs/specs/deploy.md, docs/specs/vscode.md, docs/specs/tutorial.md
- .claude/settings.json permission allowlist patterns

pnpm-lock.yaml regenerated via `pnpm install`.

Verified: all 514 tests pass (lib 460, website 38, standalone 16);
dev server serves /, /pocket, /playground with 200 OK and the build
output reports `dormouse-root@ dev:website` / `dormouse-website@0.1.0
predev`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…iginal word reveal

The hook now contains three lines instead of two:
  1. "So many busy terminals."     (visible on load)
  2. "Which needs attention?"      (visible on load)
  3. "A dormouse knows when to wake." (revealed during icon climb)

Line 3 fades in via a new scroll-driven span (dormouseLineRef) tied to
the icon-rise progress. New constants control the timing:
  DORMOUSE_LINE_REVEAL_START = 0.25  // starts fading in at 25% climb
  DORMOUSE_LINE_REVEAL_END   = 0.55  // fully visible at 55% climb
Once the climb finishes, the existing HOOK_FADE_REMAINING fade drops
the whole 3-line block at once.

The word reveal returns to the original copy, timing, and size:
  - "Multitasking" / "terminal" / "for mice (caramel)"
  - footnote: "(and hotkey wizards too)"
  - size: text-[clamp(2.5rem,5vw+0.5rem,4rem)]
  - WORD_THRESHOLDS [0.25, 0.40, 0.55] unchanged

Hook size stays at the smaller clamp(2rem,…,3.5rem) since line 3 is
longer than the original two-line hook, but the reveal is now back to
the larger original clamp.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
At display sizes (clamp 2-3.5rem) with default line-height (~1.4), wrapped
text inside a single <span> opens a gap roughly equal to gap-2 between
sibling <span>s. The two distances become indistinguishable, so the eye
can't tell which lines belong together.

- leading-tight (1.25) on the hook container so wrapped text in a single
  line hugs together (~8px wrap gap at 32px mobile font)
- gap-2 → gap-3 so the inter-span gap (12px) is clearly larger than the
  wrap gap, restoring the 1.5× hierarchy
- Drop the dormouse line's mt-2: the opacity reveal already signals "new
  line"; uniform rhythm reads cleaner than a manual nudge

Picks up the live-edited hook copy (lines 1–2 with opacity-80 to weight
attention toward the dormouse reveal, "Which ones need attention?").
Dormouse line stays at "A dormouse knows when to wake." — the product
alerts/wakes you; it doesn't put anything to sleep, so the verb pair
"sleep + wake" would overclaim.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Previously the third hook line lived inside hookRef, so when the hook
container faded out (during the icon's last 10% climb) all three lines
went together. With the new structure, lines 1+2 sit inside hookRef and
the dormouse line is a sibling at the layout level — its opacity is
driven independently.

Timeline:
  - icon climb 25% → 55%: dormouse line fades in
  - icon's last 10%      : hookRef (lines 1+2) fades up and out
  - dormouse holds at 1.0 through the gap
  - runway fraction 0.17 → 0.25: dormouse fades out and translates up
  - runway fraction 0.25: "Multitasking" begins to pop in (unchanged)

The fade-out range ends exactly at WORD_THRESHOLDS[0] so the dormouse is
gone the instant the word reveal starts — handing the stage off cleanly.
Added two new constants (DORMOUSE_LINE_FADE_OUT_START / END) and a
will-change-transform on both fading layers so the compositor keeps
their layers warm during the animation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The scroll smoother (HERO_SCROLL_HALFLIFE_S = 0.06) settles
asymptotically near each threshold. Opacity values like 0.004 leave a
ghost of the element rendered: visually a "hair off transparent", and
worse, any non-zero opacity disables the browser's `opacity: 0`
compositor fast-path so the ghost is sometimes painted and sometimes
not — the inconsistency that read as a race condition on scroll-up.

Add a `snapProgress(p, eps = 0.005)` helper that rounds 0..1 values
within eps of an endpoint to exactly 0 or 1, and apply it everywhere
syncScrollState writes opacity:
  - the three word reveals (Multitasking / terminal / for mice)
  - the footnote
  - the header brand fade
  - the hook (lines 1+2) fade-out
  - the dormouse line's combined fade-in × fade-out

Transforms are left raw — sub-pixel translateY drift is imperceptible
and not subject to the same compositor edge case. The header
backgroundColor/blur both scale off the snapped headerProgress, so
they also lock to clean 0 at the bottom of their range.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 18, 2026

Deploying mouseterm with  Cloudflare Pages  Cloudflare Pages

Latest commit: c2ff8ed
Status: ✅  Deploy successful!
Preview URL: https://68a43959.mouseterm.pages.dev
Branch Preview URL: https://dormouse-rebrand.mouseterm.pages.dev

View logs

nedtwigg and others added 7 commits May 18, 2026 12:36
In a stock xterm.js terminal, Shift+Enter and Enter both send `\r`, so
TUIs like Claude Code can't bind them differently and both submit.
Upgrading @xterm/xterm to a 6.1.0 beta and opting into
`vtExtensions.kittyKeyboard` lets the terminal advertise the kitty
keyboard protocol; when the inner program negotiates it, modified keys
round-trip as distinct CSI u sequences.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cargo.toml's [package].name became `dormouse` in the earlier rebrand
commit. Running `cargo check` regenerates the lockfile's package
entry; commit that so CI's `--frozen-lockfile` doesn't trip.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Home.md (new): canonical marketing-copy reference for the homepage.
Native markdown — `##` headings then prose, no metadata labels — so
it reads as the actual marketing voice. Keep in sync with Home.tsx
when copy changes.

README.md: swap the inline hero image to website/public/og-image.jpg
(the 3D dormouse-and-terminal social card), restructure the Try-it
links into Playground / VS Code marketplace / Standalone, and trim
the lead paragraphs.

Home.tsx — feature sections:
- Reorder to match Home.md: tmux first, then alerts, then copy-paste.
- Section 1 "Soft as a mouse, sharp as a tmux" (was last): leads
  with the big clamp(1.5rem,2.5vw+0.5rem,2.25rem) heading inside a
  `max-w-2xl` text well, sitting over a `max-w-5xl` full-width
  tmux video. New body copy: "Upgrade your VS Code or native
  terminal with a flexible multipane layout. Minimize the tasks
  you're not watching to a compact status indicator."
- Section 2 "Stop watching terminals spin" (was first): two-column
  `max-w-5xl grid-cols-[3fr_2fr]` with alert video on the left.
  Append BEL / OSC 9/99/777 support to the second paragraph.
- Section 3 "Newlines and copy paste like you meant" (was middle,
  retitled): two-column `grid-cols-[2fr_3fr]`. New opening
  paragraph about Shift+Enter; drop the trailing
  "Dormouse lets you copy paste like a human" line.

Home.tsx — hero animation:
- Pull hookFadeProgress out of the hookRef-only block so the dormouse
  line can share it. Dormouse fadeIn = hookFadeProgress: as lines
  1+2 fade out the dormouse fades in by the exact same amount.
  Perfect crossfade instead of the earlier mid-climb reveal.
- Drop the now-unused DORMOUSE_LINE_REVEAL_START / END constants;
  keep DORMOUSE_LINE_FADE_OUT_* for the later handoff to
  "Multitasking".

Note: README.md line 11 has an in-flight phrase that may need a
follow-up edit ("with standard terminal .,mn,.mn.,mn").

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@nedtwigg nedtwigg merged commit 5dfd5c6 into main May 18, 2026
6 checks passed
@nedtwigg nedtwigg deleted the dormouse-rebrand branch May 18, 2026 22:45
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.

1 participant