import { For, createSignal, onCleanup, onMount, type JSX } from "solid-js";
import { IslandPill, STATUS, CALM, CRITICAL, ModuleCard } from "./IslandMock";
import { ApprovalCardMock, SessionRowMock, DieLine, CLAUDE, CODEX } from "./ModuleMocks";
/**
* Feature collage: five cells sold as the app's actual UI. The hero cell
* shows the real collapsed pill (campfire slot, camera housing, live data)
* dressed in the island's black surface; supporting cells reuse the same
* module chrome, status palette, and metric language.
*/
export function CollageCell(props: {
class?: string;
kicker: string;
title: string;
body: string;
children?: JSX.Element;
}) {
return (
{props.kicker}
{props.title}
{props.body}
{props.children}
);
}
/**
* Stage for app-UI mocks: the island's black ink ground. The real island
* is always dark (preferredColorScheme .dark), so the mocks read correctly
* in both site themes.
*/
export function InkStage(props: { children: JSX.Element; class?: string }) {
return (
{props.children}
);
}
/** Fans panel mock: RPM gauge rows in the app's card chrome. */
function FansPanelMock() {
const fans = [
{ rpm: 1270, frac: 0.26 },
{ rpm: 1219, frac: 0.25 }
];
return (
);
}
function RemoteMock() {
return (
);
}
/* Deterministic usage wander for the traces. */
const wander = (n: number, k: number) =>
0.42 + 0.22 * Math.sin(n * 0.45 + k * 1.7) + 0.12 * Math.sin(n * 1.3 + k);
/**
* The Temperatures module: one line per die — label, its 60 s usage trace,
* its temperature. The GPU climbs past the 70 ° warn line and tints amber.
*/
function GaugesMock() {
const [n, setN] = createSignal(0);
onMount(() => {
const interval = setInterval(() => setN((v) => v + 1), 700);
onCleanup(() => clearInterval(interval));
});
const trace = (k: number) =>
Array.from({ length: 30 }, (_, i) => Math.max(0.04, Math.min(0.97, wander(n() + i, k))));
const gpuCelsius = () => 62 + 12 * (0.5 + 0.5 * Math.sin(n() * 0.18));
return (
);
}
export default function FeatureCollage() {
return (
Why the Nook
Keep track of your agents while you work
{/* Hero: real collapsed pill on the island surface */}
The island
Agent status at the top of your screen
The island sits around your Mac's notch, with agent activity on
the left and your choice of information on the right. Blue means
running, green means ready, and amber means an agent needs you.
}
/>
Open the island to see your sessions
{/* Approvals */}
{/* Fans */}
{/* Gauges */}
Also includes a volume mixer, screen capture, timers, weather, and more.{" "}
Browse the other modules
);
}