Commit Graph

48 Commits

Author SHA1 Message Date
Alejandro Gutiérrez
ccfae53233 feat(site): rewrite landing page — Claude Code Command Center
Reposition cladm from "monitor & launcher" to "command center" with
embedded PTY grid, tabbed workspaces, and pane controls. New hero
animation shows picker → grid transition. JSX workspace mockup with
4 active panes, traffic-light buttons, and live terminal content.
Updated features, two-mode controls, and metadata throughout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 21:00:37 +00:00
Alejandro Gutiérrez
1a99a83fd7 fix: reorder pane buttons — blue folder, gap, green/yellow, red close
Right corner order is now: [●]blue ─ [●]green [●]red─╮
Folder is leftmost (separated by gap), close is rightmost near corner.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:07:03 +00:00
Alejandro Gutiérrez
24a20d4fe5 feat: move folder button to pane top border as blue [●]
Blue [●] button sits rightmost on each pane's top border, separated
inward by ─ from the close/expand traffic-light buttons. Removes the
old [▸] from the subtitle row.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:57:08 +00:00
Alejandro Gutiérrez
f821010dc9 feat: add open-folder button [▸] to pane subtitle row
Cyan [▸] button on each pane's subtitle row opens the project folder
in Finder. Path text truncates with … prefix when too long.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:56:16 +00:00
Alejandro Gutiérrez
a2a9283451 Merge branch 'ft-tmux' — direct PTY grid, inline tabs, select mode
Replaces tmux dependency with direct PTY grid rendering:
- Embedded terminal panes with weighted grid layout
- Tabbed sessions with inline pane names and status icons
- Double-click select mode with full scrollback buffer
- Alt+key passthrough, click-to-expand, add-pane mode
2026-02-28 18:13:42 +00:00
Alejandro Gutiérrez
e0f1a08098 feat: inline pane tabs, add-pane mode, and grid chrome cleanup
- Tab bar now shows pane names inline with status icons instead of
  generic tab names with counts, eliminating the separate pane list row
- chromeTop reduced from 4 to 3, gaining one extra row of content space
- Add-pane mode (Ctrl+N) lets users add panes to existing tabs from picker
- Picker tab bar updated to match inline pane name format
- Session formatters and launch actions updated for branch switching

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:13:25 +00:00
Alejandro Gutiérrez
9cf18f5740 fix: PTY stdin error, double-click select with full buffer, alt+key passthrough
- Remove proc.stdin.on() call (Bun FileSink has no .on method), add
  try/catch and proc.killed guards to write/resize
- Double-click enters select mode instead of shift+click, with yellow
  banner and Esc-to-exit hint for discoverability
- Select mode now dumps full scrollback buffer (up to 5000 lines) so
  users can scroll up and copy old conversation text
- Pass all Alt+key combos through input parser to PTY (fixes
  Alt+Backspace word deletion and other Alt shortcuts)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 17:54:41 +00:00
Alejandro Gutiérrez
059004b6f2 fix: space after pane status icons, prevent repeated idle notification sounds
- Add space between status icon and project name in pane list for readability
- Add notifiedIdle set to checkTransitions to prevent re-triggering sound
  after busySessions fluctuations during the same idle period

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 16:46:20 +00:00
Alejandro Gutiérrez
c2e8fcaa94 feat: framed buttons, select mode isolation, shift+click select, pane status icons
- Replace bare ● and × with framed [●] and [×] for better click targets
- Select mode now clears screen and shows only focused pane content
- Shift+click auto-enters select mode for native text selection
- Ctrl+S keyboard shortcut to toggle select mode from any grid view
- Pane list shows status icons: ● green=running, ◉ yellow=idle, ○ dim=unknown
- Update hit-testing regions for new 3-char framed button positions
- Add ctrl+s select hint to all grid header modes and expanded footer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 16:38:22 +00:00
Alejandro Gutiérrez
1e105cd950 fix: buffer split mouse sequences, widen grid buttons, fix [object Object] in tab bar
- Buffer partial escape sequences in stdin handler so split SGR mouse
  events don't leak garbage characters into PTY panes
- Widen pane button hit areas from 1 char to 2-4 chars each; add title
  row click-to-expand; widen tab close/add buttons and pane list targets
- Fix [object Object] rendering in picker tab bar and pane list caused
  by OpenTUI's t`` tag not handling StyledText interpolation; add st()
  helper that concatenates StyledText by merging chunk arrays

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 15:29:44 +00:00
Alejandro Gutiérrez
c722112a7f feat: weighted grid layout, pane list bar, sorted tabs, and idle sound delay
- Replace 70/30 rearranging split with weighted grid: focused pane's
  column/row get 70%, others shrink in place (no spatial reordering)
- Add clickable pane list row below tab bar in both grid and picker modes
- Sort grid tabs numerically by tab number
- Click on focused pane no longer unfocuses it
- Delay idle notification sound by 10s to filter false intermediate alerts
- Bump chrome top from 3 to 4 rows (tab bar, pane list, header, content)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 12:52:35 +00:00
Alejandro Gutiérrez
f5dd49d870 feat: numbered tab selection for launching projects into separate grid tabs
Space cycles tab number (1→2→...→9→off), digit keys 1-9 assign directly.
Each number gets a unique color in the picker brackets. On launch, projects
are grouped by tab number into separate grid tabs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:57:32 +00:00
Alejandro Gutiérrez
9e424c192a feat: add tabbed grids, click-to-expand, and keybind cleanup
Introduces per-tab pane management with independent focus/expansion state,
a persistent tab bar visible in both picker and grid modes, and a 70/30
soft-expand layout triggered by clicking pane bodies. Removes legacy
toggle keybinds (Ctrl+^ and Ctrl+`) leaving only Ctrl+Space.

New keybinds: Ctrl+T new tab, Alt+1-9 switch tab, Alt+n/p cycle tabs,
Ctrl+E toggle click-expand, Ctrl+W auto-removes empty tabs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:45:25 +00:00
Alejandro Gutiérrez
cad6df1a9b feat: add Ctrl+Space as unified toggle between picker and grid
Works in both directions — picker→grid and grid→picker. Keeps
existing Ctrl+` and t keybinds as alternatives.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 09:59:40 +00:00
Alejandro Gutiérrez
bc8a0c1934 feat: toggle between picker and grid without closing panes
Add pause()/resume() to DirectGridRenderer that detach/reattach frame
listeners without killing captures or PTY sessions. switchToPicker now
pauses the grid, switchToGrid resumes it. Panes keep running in the
background while browsing the project list.

Footer shows "t grid" hint when panes are active in the background.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 09:56:38 +00:00
Alejandro Gutiérrez
61add15531 perf: hoist keyMap constant, dedup selection toggles, split stdinHandler
- Move keyMap to module-level KEY_MAP constant (was recreated per keystroke)
- Extract toggleRowSelection() to replace 4x duplicated toggle logic
- Extract refreshMockSessions() to deduplicate demo setup in index.ts
- Split stdinHandler into processGridInput/processPickerInput
- Extract collapseProject helper from nested left/right key handling
- Add shared syntheticKey() and clearChildren() helpers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 02:14:53 +00:00
Alejandro Gutiérrez
6488816d89 refactor: extract index.ts into 7 focused modules
Break 1507-line index.ts into a slim 251-line entry point plus:
- lib/theme.ts, lib/state.ts (shared constants + app singleton)
- ui/formatters.ts, ui/panels.ts (row formatting + UI updates)
- input/parser.ts, input/handlers.ts (stdin parsing + keyboard/mouse)
- grid/view-switch.ts, actions/launch.ts (grid switching + PTY launch)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 02:01:17 +00:00
Alejandro Gutiérrez
3ce6572952 feat: add direct PTY grid with expand/select mode for text copying
Replace tmux-based grid with direct PTY rendering. Add [MAX] button
to expand a pane to fullscreen and [SEL] to enable native text
selection within the expanded pane. Esc exits select/expanded mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 01:41:31 +00:00
Alejandro Gutiérrez
4132744a01 feat: add tmux-based multi-terminal grid view
Launch Claude Code sessions inside embedded tmux panes instead of
separate Terminal.app windows. Sessions are tiled in a grid layout with
color-coded borders per project. Border flashing alerts when a session
goes idle and needs input. Ctrl+` switches between picker and grid view.

New modules:
- src/tmux/session-manager.ts — tmux session lifecycle
- src/tmux/ansi-parser.ts — ANSI escape code to cell grid parser
- src/tmux/capture.ts — polls tmux capture-pane for rendering
- src/tmux/input-bridge.ts — forwards keystrokes to tmux sessions
- src/components/terminal-view.ts — FrameBuffer renderable for panes
- src/components/session-grid.ts — tiled grid with flash effects

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:37:35 +00:00
Alejandro Gutiérrez
9c50399e57 chore: regenerate demo gif
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:23:25 +00:00
Alejandro Gutiérrez
4283250eac fix: proxy subscribe through Next.js API route to avoid network permission prompt
Browser was requesting local network access for the Tailscale URL.
Now both forms POST to /api/subscribe which proxies server-side
to the leads-api container.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:30:35 +00:00
Alejandro Gutiérrez
24a1284def feat: add pixel terminal modal for email capture
Fake Claude Code console that boots up and prompts for email.
Triggers after 15s or 60% scroll. Esc/click-outside to dismiss.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:54:48 +00:00
Alejandro Gutiérrez
177ddaeecb feat: add newsletter signup form powered by leads API
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:33:55 +00:00
Alejandro Gutiérrez
619d51ecaf feat: regenerate screenshots with monitoring indicators and new panels
Updated all screenshots to show busy/idle status dots, session counts
in header, and new footer keybindings. Added usage panel and idle
sessions panel screenshots. Demo GIF now includes usage and idle
panel toggle scenes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:10:17 +00:00
Alejandro Gutiérrez
c58c299581 feat: update website to reflect full session monitoring capabilities
Rebrand from "TUI launcher" to "multi-project session monitor". Add
usage tracking and idle sessions panel sections, new feature blocks
for monitoring/usage/notifications/focus, updated keybindings, and
revised metadata descriptions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:02:54 +00:00
Alejandro Gutiérrez
a299cbc7d5 docs: update README with shell helper, keybinds, and monitoring details
Add focus-cladm shell function, idle/usage panel keybindings, and
update busy detection description to reflect JSONL content parsing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:55:05 +00:00
Alejandro Gutiérrez
710cb05275 fix: detect busy sessions by JSONL content, not just mtime
The previous 5-second mtime threshold caused false idle triggers during
tool calls and subtasks. Now reads the last 8KB of the JSONL to check
if the final assistant message contains tool_use — if so, Claude is
still working regardless of how long ago the file was modified.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:39:11 +00:00
Alejandro Gutiérrez
2286aa5cc3 fix: prioritize checkmarked selections over idle/active focus on enter
When items are selected with checkmarks, pressing enter now always
launches them instead of being intercepted by idle panel or active
session focus logic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 20:36:05 +00:00
Alejandro Gutiérrez
972269ef20 feat: add usage panel with session, weekly, and monthly cost bars
Scan ~/.claude/projects JSONL files to compute API cost usage.
Shows 4 bars matching Claude's usage screen: current session (5h window),
weekly all models, weekly sonnet-only, and monthly total.
Configurable plan limits in PLAN_LIMITS. Refreshes every 30s.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:27:43 +00:00
Alejandro Gutiérrez
e56ed9bc95 fix: robust terminal focus with session targeting and code review fixes
- Extract helpers: focusTerminalTab, getTtyViaPsForPids, escapeAppleScript
- Batch ps tty lookup (single call for all PIDs instead of sequential)
- Target specific session tty when g pressed on session row
- Sort ttys by most recent activity for project-level focus
- Deduplicate tried ttys between primary and fallback paths
- Escape AppleScript interpolations to prevent injection
- Wrap flash animation in try/end try for mid-close safety
- Wrap async handleKeypress in try/catch for unhandled rejections
- Fix activeTag padding for consistent column alignment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 17:33:44 +00:00
Alejandro Gutiérrez
f8c6a5f584 feat: flash terminal background on focus and fix active tag alignment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:52:10 +00:00
Alejandro Gutiérrez
bd3df2be9c feat: add Dockerfile and standalone output for site deployment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 02:19:15 +00:00
Alejandro Gutiérrez
6e9788804f fix: deduplicate idle sessions and refresh session data on transitions
Multiple claude processes in the same CWD share one sessionFile via
findActiveJsonl, causing duplicate idle entries. Now deduplicates by
project+sessionFile key. Also refreshes session data on busy→idle
transitions so the parser fix takes effect immediately.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 01:54:15 +00:00
Alejandro Gutiérrez
66ac50813a feat: idle panel navigation, dock bounce, and fix session text parsing
- Tab/shift-tab to select idle sessions, enter to focus terminal
- Dock bounces on busy→idle transition for attention
- Fix session parser to handle array-format user messages and skip
  system tags (<local-command-caveat>, <command-name>, etc.)
- Eagerly load session data for active projects so idle panel
  always shows title, prompt, and response
- Render idle rows as individual Text nodes to avoid t`` nesting bug

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 01:51:42 +00:00
Alejandro Gutiérrez
287d7d3228 feat: idle sessions panel toggle + session status indicators in tree view
Press 'i' to toggle bottom panel between Preview and Idle Sessions.
Auto-switches to idle mode on busy→idle transitions. Session rows now
show ● running / ◉ idle dots at the start for quick visual scanning.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 01:37:03 +00:00
Alejandro Gutiérrez
ade8034294 feat: session status in expanded rows + idle panel
Show running/idle status inline on expanded session rows, add idle
sessions panel (toggle with 'i'), auto-switch to idle panel on
busy→idle transitions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 01:33:31 +00:00
Alejandro Gutiérrez
c49de9865d Fix app closing on enter — stay open after launching sessions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 01:10:42 +00:00
Alejandro Gutiérrez
4a68cb698f feat: live session monitoring with busy/idle indicators and sound notification
Detect active Claude sessions' real-time status by monitoring JSONL file
modification times. Shows green dot when Claude is processing, yellow dot
with elapsed time when idle. Plays Glass.aiff when sessions transition
from busy to idle. Updates website and README with new features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:58:53 +00:00
Alejandro Gutiérrez
62da18725a Rename package to @alezmad/cladm for npm publish
npm rejected unscoped "cladm" as too similar to "charm". Scoped under
@alezmad with --access=public flag in CI workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:17:55 +00:00
Alejandro Gutiérrez
9764e96ed6 Fix npm publish auth in CI workflow
Write .npmrc with auth token before publishing — NODE_AUTH_TOKEN alone
is not picked up by npm without a registry-scoped config entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:09:07 +00:00
Alejandro Gutiérrez
ee6516be88 Prepare cladm for npm publishing
Add files field, author, repository, and engines to package.json. Add
.npmignore, MIT LICENSE file, GitHub Actions publish workflow on v* tags,
and update README install section with bun install -g / bunx instructions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:00:29 +00:00
Alejandro Gutiérrez
c97746fd83 Add terminal cascade animation to hero with two-column layout
Right column shows a looping cause-and-effect animation: cladm console
selects projects one by one, then Claude Code terminals cascade in with
spring-bounce animation showing the real welcome screen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:46:51 +00:00
Alejandro Gutiérrez
ffa676ddf7 Add raster-react pixel icons and GitHub repo metadata
Replaced text icons in feature grid with pixel-art raster-react
components (SearchIcon, NetworkIcon, FolderIcon, etc.). Added
GithubIcon and LinkedinIcon to nav and author section.
SpaceInvadersIcon in nav branding. Set repo homepage to claudm.com
with topics: claude-code, tui, terminal, bun, launcher, cli.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:26:45 +00:00
Alejandro Gutiérrez
cd20c33b25 Add favicon, app icons, and OG thumbnail
Generated from logo with transparent background removal.
Favicon.ico, apple-touch-icon, icon PNGs (16-512px), and
1200x630 Open Graph image with grid pattern and branding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:24:29 +00:00
Alejandro Gutiérrez
5928e74c4c Add landing page and Claude terminal launch screenshot
Pixel art brutalist Next.js landing page at site/ with Tailwind,
Silkscreen pixel font, Tokyo Night palette, terminal window
components, animated demo GIF, feature grid, keybinding table,
install instructions, launch flow visualization, and author section
with obfuscated email. Domain: claudm.com.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:18:53 +00:00
Alejandro Gutiérrez
294b3f6b6c Add README with screenshots, animated GIF, and global CLI setup
Polished README with logo, demo GIF, annotated screenshots, column
legend, keybinding table, and install instructions. Added bin entry
and shebang so `bun link` registers the `cladm` command globally.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:07:37 +00:00
Alejandro Gutiérrez
fcafe652cf Add TUI launcher implementation and project docs
Source modules for history parsing, git metadata, project scanning,
terminal launching, and OpenTUI component layout. Remove private flag
for publishing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 22:56:54 +00:00
Alejandro Gutiérrez
165ad7d352 Initial bun + opentui setup 2026-02-23 21:24:04 +00:00