import Image from "next/image"; import { EmailReveal } from "./email-reveal"; import { NewsletterForm } from "./newsletter-form"; import { SubscribeModal } from "./subscribe-modal"; import { TerminalCascade } from "./terminal-cascade"; import { SearchIcon, GithubIcon, TerminalIcon, FolderIcon, NetworkIcon, GamepadIcon, BlocksIcon, LinkedinIcon, SpaceInvadersIcon, EyeIcon, BellIcon, TrendingUpIcon, ThunderIcon, } from "raster-react"; function PixelDivider() { return (
{Array.from({ length: 40 }).map((_, i) => (
))}
); } function Keycap({ children }: { children: React.ReactNode }) { return {children}; } function TerminalWindow({ title, children, }: { title: string; children: React.ReactNode; }) { return (
{title}
{children}
); } function FeatureBlock({ icon, title, desc, }: { icon: React.ReactNode; title: string; desc: string; }) { return (
{icon}

{title}

{desc}

); } function GridPaneMockup({ name, status, elapsed, children, focused, }: { name: string; status: "busy" | "idle"; elapsed?: string; children: React.ReactNode; focused?: boolean; }) { return (
{/* Pane title bar */}
{status === "busy" ? ( ) : ( <> {elapsed && {elapsed}} )} {name}
{/* Pane content */}
{children}
); } export default function Home() { return (
{/* ══════ HERO ══════ */}
{/* Nav */} {/* Two-column hero */}
{/* Left — text + CTA */}
cladm pixel art logo

CLADM

CLAUDE CODE COMMAND CENTER

Manage all your Claude Code sessions from one terminal. An embedded PTY grid with tabbed workspaces, pane controls, real-time status tracking, and full keyboard-driven workflow.

{/* Install command */}
$ bun install -g cladm _

requires{" "} bun {" "} >= 1.3 + macOS

{/* Right — terminal cascade: picker → grid */}
{/* Bottom edge - pixel staircase */}
{/* ══════ THE WORKSPACE ══════ */}

// THE WORKSPACE

Every Claude Code session runs in an embedded terminal pane — no separate windows. See all your projects at once, switch focus with a click, and never lose track of what Claude is doing.

{/* Grid workspace mockup */}
{/* Tab bar */}
acme-api · quantum-dash
ml-pipeline · infra-k8s
+ add pane
{/* Pane grid */}
{/* Pane 1: acme-api */}
> I'll analyze the authentication module and
{" "}fix the token refresh bug you mentioned.
Reading src/auth/token.ts
Reading src/auth/middleware.ts
Grep: refreshToken pattern
Found 3 files with stale token logic. _
{/* Pane 2: quantum-dash */}
I've updated the chart component to use
the new streaming data format. Changes:
src/components/chart.tsx
src/hooks/useChartData.ts
src/types/stream.d.ts
Waiting for your input...
{/* Pane 3: ml-pipeline */}
> Building the BERT fine-tuning pipeline
{" "}with the new training dataset.
Writing src/train.py
Processing: epoch 3/10{" "} ████████ ░░░░░░░░░░░░{" "} 30%
{/* Pane 4: infra-k8s */}
> Updating the Kubernetes deployment
{" "}manifests for staging.
Reading k8s/staging/deployment.yaml
Reading k8s/staging/service.yaml
Scaling replicas 2 → 4 for load test _
{/* Feature callouts */}
Embedded PTY Grid

Each pane runs a real pseudo-terminal via forkpty(). Full I/O, ANSI colors, resize — no tmux needed.

Tabbed Workspaces

Group sessions into tabs. Inline pane names with status icons show what's running at a glance.

Pane Controls

Traffic-light buttons on every pane: close, expand, minimize, plus a folder-open button. Fully mouse-driven.

{/* ══════ SMART PICKER ══════ */}

// THE SMART PICKER

It starts with a smart project picker. cladm reads{" "} ~/.claude/history.jsonl to discover every project you've used with Claude Code — git branch, sync status, dirty state, session history, stack detection — all loaded in parallel. Select what you need, hit Enter, and the grid workspace takes over.

cladm smart picker showing project navigation and selection
{/* Picker screenshots */}

PROJECT LIST

Sorted by recent Claude usage. Git metadata, session count, and stack tags at a glance.

cladm main project list view

EXPANDED VIEW

Browse branches, past sessions with conversation previews. Resume any session directly.

cladm expanded view with sessions
{/* ══════ LIVE MONITORING ══════ */}

// REAL-TIME STATUS

{/* Status indicators */}

Session Status

Busy — Claude is actively working
3m Idle — waiting for your input
No session — not running

Status visible in both picker rows and grid pane headers. Sound + dock bounce on idle transitions.

{/* Usage tracking */}

Usage Tracking

session (5h) $2.40 / $5.00
weekly all-model $18.50 / $100
monthly total $67.20

Press u in picker mode. Tracks session, weekly, and monthly costs against configurable plan limits.

{/* ══════ FEATURES ══════ */}

// FEATURES

} title="EMBEDDED GRID" desc="Run multiple Claude Code sessions side by side in a tiled terminal grid. Each pane is a real PTY with full I/O — no separate windows needed." /> } title="TABBED WORKSPACES" desc="Group sessions into named tabs. Inline pane indicators show project names and busy/idle status at a glance." /> } title="PANE CONTROLS" desc="Traffic-light buttons on every pane: close, minimize, expand to full screen. Blue button opens the project folder." /> } title="SELECT MODE" desc="Double-click any pane to enter select mode. Copy text from the full scrollback buffer — up to 5,000 lines of history." /> } title="LIVE MONITORING" desc="Track busy/idle status across all sessions in real time. Elapsed timers show how long each session has been waiting." /> } title="USAGE TRACKING" desc="Session, weekly, and monthly cost bars against configurable plan limits. Track all-model and sonnet-only usage." /> } title="NOTIFICATIONS" desc="Sound + dock bounce when any session finishes. Never miss a completed task across dozens of parallel sessions." /> } title="AUTO-DISCOVERY" desc="Reads ~/.claude/history.jsonl to find every project. Git branch, sync status, dirty state — all loaded in parallel." /> } title="DIRECT PTY" desc="Native pseudo-terminal management via forkpty(). No tmux dependency. Zero configuration. Just works." />
{/* ══════ CONTROLS ══════ */}

// CONTROLS

{/* Picker mode */}

Picker Mode

{[ ["↑ ↓", "Navigate"], ["Space", "Toggle select"], ["→", "Expand project"], ["←", "Collapse"], ["Enter", "Launch grid"], ["/", "Filter"], ["a", "Select all"], ["n", "Deselect all"], ["s", "Cycle sort"], ["u", "Usage panel"], ["i", "Idle sessions"], ["f", "Open folder"], ["g", "Go to session"], ["q", "Quit"], ].map(([key, desc]) => (
{key}
{desc}
))}
{/* Grid mode */}

Grid Mode

{[ ["Click", "Focus pane"], ["Dbl-click", "Select mode"], ["Alt+1-9", "Switch tab"], ["Alt+n/p", "Next/prev tab"], ["+ button", "Add pane"], ["Esc", "Back to picker"], ].map(([key, desc]) => (
{key}
{desc}
))}
Pane Buttons
{[ ["● blue", "Open folder"], ["● green", "Expand pane"], ["● yellow", "Minimize"], ["● red", "Close pane"], ].map(([key, desc], i) => (
{key}
{desc}
))}
{/* ══════ QUICK START ══════ */}

// QUICK START

${" "} git clone{" "} https://github.com/alezmad/cladm.git
${" "} cd cladm
${" "} bun install
${" "} bun link {" "} # registers `cladm` globally
${" "} cladm _

Try with mock data:{" "} cladm --demo

{/* ══════ NEWSLETTER ══════ */}
{/* ══════ AUTHOR ══════ */}
// BUILT BY
Alejandro Mourente
{/* ══════ FOOTER ══════ */}
); }