Skip to content

Commit 546bc8a

Browse files
committed
fix(ui): stop animating the pixel C — render it static everywhere
The pulse was a stylistic novelty that distracted users during the quickstart wizard. PixelC now has no animation path; the existing Throbber (block-pulse glyph) remains as the in-flight indicator.
1 parent ac88721 commit 546bc8a

3 files changed

Lines changed: 17 additions & 49 deletions

File tree

src/ui/FirstRunSetup.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,15 +203,13 @@ export function FirstRunSetup({ onDone, onQuit, store, authBase = DEFAULT_AUTH_B
203203
}
204204

205205
/**
206-
* Branded header — animated pixel C + "codebase" wordmark. The C
207-
* pulses while the wizard is open (each row brightens in sequence)
208-
* so the boot screen feels alive without overwhelming.
206+
* Branded header — static pixel C + "codebase" wordmark.
209207
*/
210-
function BrandHeader({ animate = true }: { animate?: boolean }): React.ReactNode {
208+
function BrandHeader(): React.ReactNode {
211209
return (
212210
<Box flexDirection="row" marginBottom={1}>
213211
<Box marginRight={2}>
214-
<PixelC animate={animate} />
212+
<PixelC />
215213
</Box>
216214
<Box flexDirection="column" justifyContent="center">
217215
<Text bold color="cyan">

src/ui/PixelC.tsx

Lines changed: 13 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,35 @@
11
import { Box, Text } from "ink";
2-
import { useEffect, useState } from "react";
32

43
/**
5-
* Animated pixel-C brand mark. Mirrors `web/public/favicon.svg`:
4+
* Static pixel-C brand mark. Mirrors `web/public/favicon.svg`:
65
* 5-row × 4-col grid, 9 filled pixels (3 top + 3 left + 3 bottom).
76
* Each SVG pixel renders as two block chars wide so the C reads
87
* proportionally in a 1:2 cell-ratio terminal.
9-
*
10-
* When `animate` is false, renders a static cyan C — used in the
11-
* wizard header and OAuth-running screen as a brand mark.
12-
*
13-
* When `animate` is true, scans a "bright" row top → bottom through
14-
* the C every cycle. Subtle but unmistakably alive — gives the agent
15-
* a heartbeat during long thinking turns without burning attention.
168
*/
179

1810
const FILL = "██";
1911
const GAP = " ";
2012

2113
interface PixelCProps {
22-
animate?: boolean;
2314
color?: string;
24-
dimColor?: string;
25-
intervalMs?: number;
2615
}
2716

28-
interface RowSpec {
29-
/** The textual content of the row. */
30-
text: string;
31-
/** Which animation step (0..4) this row corresponds to. */
32-
step: number;
33-
}
34-
35-
const ROWS: readonly RowSpec[] = [
36-
{ text: `${GAP}${FILL}${FILL}${FILL}`, step: 0 },
37-
{ text: FILL, step: 1 },
38-
{ text: FILL, step: 2 },
39-
{ text: FILL, step: 3 },
40-
{ text: `${GAP}${FILL}${FILL}${FILL}`, step: 4 },
17+
const ROWS: readonly string[] = [
18+
`${GAP}${FILL}${FILL}${FILL}`,
19+
FILL,
20+
FILL,
21+
FILL,
22+
`${GAP}${FILL}${FILL}${FILL}`,
4123
];
42-
const STEPS = ROWS.length;
43-
44-
export function PixelC({ animate = false, color = "cyan", dimColor = "gray", intervalMs = 180 }: PixelCProps) {
45-
const [activeStep, setActiveStep] = useState(0);
46-
47-
useEffect(() => {
48-
if (!animate) return;
49-
const id = setInterval(() => setActiveStep((s) => (s + 1) % STEPS), intervalMs);
50-
return () => clearInterval(id);
51-
}, [animate, intervalMs]);
5224

25+
export function PixelC({ color = "cyan" }: PixelCProps) {
5326
return (
5427
<Box flexDirection="column">
55-
{ROWS.map((row) => {
56-
const rowColor = !animate ? color : row.step === activeStep ? color : dimColor;
57-
return (
58-
<Text key={`pixc-${row.step}`} bold color={rowColor}>
59-
{row.text}
60-
</Text>
61-
);
62-
})}
28+
{ROWS.map((text, i) => (
29+
<Text key={`pixc-${i}`} bold color={color}>
30+
{text}
31+
</Text>
32+
))}
6333
</Box>
6434
);
6535
}

src/ui/Welcome.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export function Welcome({ modelName, source, cwd, resumedFrom }: WelcomeProps) {
6262
<Box flexDirection="column" paddingX={1} marginBottom={1}>
6363
<Box flexDirection="row">
6464
<Box marginRight={2}>
65-
<PixelC animate={false} />
65+
<PixelC />
6666
</Box>
6767
<Box flexDirection="column" justifyContent="center">
6868
<Text bold color="cyan">

0 commit comments

Comments
 (0)