Skip to content

Commit 47cb764

Browse files
Update comic rendering pipeline
1 parent d9474cf commit 47cb764

16 files changed

Lines changed: 1458 additions & 113 deletions

cast/characters.ts

Lines changed: 185 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@ const castData = [
1010
'plain stick body',
1111
'neutral posture'
1212
],
13+
behaviors: [
14+
'asks one dangerously underspecified question',
15+
'points at the wrong abstraction',
16+
'mistakes a symptom for the root cause'
17+
],
18+
idea_space: [
19+
'requirements gaps',
20+
'ambiguous prompts',
21+
'production surprises'
22+
],
23+
drawable_features: [
24+
'round head with expressive brows',
25+
'pointing arm',
26+
'worried sweat mark'
27+
],
1328
sample_image: '/cast/samples/user.svg'
1429
},
1530
{
@@ -24,19 +39,54 @@ const castData = [
2439
'minimal stick body',
2540
'cloud thought bubble for internal logs'
2641
],
42+
behaviors: [
43+
'shows a compact internal log trail',
44+
'confidently optimizes the wrong objective',
45+
'turns uncertainty into plausible procedure'
46+
],
47+
idea_space: [
48+
'inference drift',
49+
'tool calling mistakes',
50+
'context loss',
51+
'reward hacking'
52+
],
53+
drawable_features: [
54+
'square robot head',
55+
'antenna',
56+
'monospace thought bubble',
57+
'robot eyes and mouth'
58+
],
2759
sample_image: '/cast/samples/robot.svg'
2860
},
2961
{
3062
id: 'simon',
3163
name: 'Simon',
3264
role: 'BOFH system administrator',
33-
description: 'Stick figure with a fedora and a grey goatee. Arrives late, judges instantly, and ends scenes with one-line operational truth.',
65+
description: 'Stick figure with square glasses, a fedora, and a grey goatee. Arrives late, judges instantly, and ends scenes with one-line operational truth.',
3466
voice: 'Dry, cynical, and surgically concise.',
3567
visual_traits: [
3668
'fedora',
69+
'square glasses',
3770
'grey goatee',
3871
'deadpan posture'
3972
],
73+
behaviors: [
74+
'corrects the premise in one sentence',
75+
'refuses magical thinking',
76+
'names the operational failure everyone is avoiding'
77+
],
78+
idea_space: [
79+
'postmortems',
80+
'access control',
81+
'on-call reality',
82+
'logs versus facts'
83+
],
84+
drawable_features: [
85+
'square glasses',
86+
'fedora brim',
87+
'grey goatee',
88+
'flat deadpan mouth'
89+
],
4090
sample_image: '/cast/samples/simon.svg'
4191
},
4292
{
@@ -50,6 +100,23 @@ const castData = [
50100
'animated arm pose',
51101
'boardroom energy'
52102
],
103+
behaviors: [
104+
'turns an outage into a KPI',
105+
'asks for autonomy without ownership',
106+
'treats dashboards as reality'
107+
],
108+
idea_space: [
109+
'AI strategy decks',
110+
'cost theater',
111+
'meeting artifacts',
112+
'risk laundering'
113+
],
114+
drawable_features: [
115+
'tie',
116+
'raised arms',
117+
'smug smile',
118+
'slide deck or status table'
119+
],
53120
sample_image: '/cast/samples/boss.svg'
54121
},
55122
{
@@ -63,7 +130,124 @@ const castData = [
63130
'raised claws',
64131
'background cameo'
65132
],
133+
behaviors: [
134+
'silently appears where memory safety matters',
135+
'signals panic by raising claws',
136+
'acts as a tiny systems-level conscience'
137+
],
138+
idea_space: [
139+
'memory safety',
140+
'ownership',
141+
'compiler errors',
142+
'fearless concurrency'
143+
],
144+
drawable_features: [
145+
'small crab body',
146+
'claws',
147+
'tiny eyes',
148+
'panic marks'
149+
],
66150
sample_image: '/cast/samples/ferris.svg'
151+
},
152+
{
153+
id: 'tux',
154+
name: 'Tux',
155+
role: 'Linux penguin infra mascot',
156+
description: 'A compact black-and-white penguin with a white belly, flipper arms, and tiny feet. Calmly represents Linux, kernels, packages, filesystems, and server pragmatism.',
157+
voice: 'Calm, literal, and command-line practical.',
158+
visual_traits: [
159+
'penguin silhouette',
160+
'white belly',
161+
'flipper arms',
162+
'small feet'
163+
],
164+
behaviors: [
165+
'reduces drama to a shell command',
166+
'cares about permissions, packages, kernels, and filesystems',
167+
'stares blankly at cloud abstractions that forgot the host'
168+
],
169+
idea_space: [
170+
'Linux permissions',
171+
'package managers',
172+
'systemd timers',
173+
'kernel limits',
174+
'filesystem reality'
175+
],
176+
drawable_features: [
177+
'black penguin outline',
178+
'white belly oval',
179+
'flippers',
180+
'small feet',
181+
'beak'
182+
],
183+
sample_image: '/cast/samples/tux.svg'
184+
},
185+
{
186+
id: 'python',
187+
name: 'Python',
188+
role: 'Python snake runtime',
189+
description: 'A long snake character with a forked tongue and looped body. Friendly until dependency resolution, virtual environments, or whitespace semantics enter the panel.',
190+
voice: 'Helpful, sly, and slightly too comfortable with dynamic behavior.',
191+
visual_traits: [
192+
'curving snake body',
193+
'forked tongue',
194+
'small expressive eyes',
195+
'looped posture'
196+
],
197+
behaviors: [
198+
'wraps around dependencies or stack traces',
199+
'suggests a tiny script that becomes infrastructure',
200+
'makes dynamic behavior sound reasonable'
201+
],
202+
idea_space: [
203+
'virtual environments',
204+
'dependency pins',
205+
'notebooks in production',
206+
'indentation',
207+
'runtime surprises'
208+
],
209+
drawable_features: [
210+
'curving snake path',
211+
'forked tongue',
212+
'round eyes',
213+
'coiled tail',
214+
'tiny frown or grin'
215+
],
216+
sample_image: '/cast/samples/python.svg'
217+
},
218+
{
219+
id: 'kube_captain',
220+
name: 'Kubernetes Captain',
221+
role: 'container orchestration pirate captain',
222+
description: 'A Kubernetes-themed captain with a pirate captain hat, peg leg, and swagger. Talks in nautical orchestration metaphors without losing technical specificity.',
223+
voice: 'Commanding, nautical, and alarmingly comfortable with YAML.',
224+
visual_traits: [
225+
'pirate captain hat',
226+
'peg leg',
227+
'captain coat',
228+
'orchestration swagger'
229+
],
230+
behaviors: [
231+
'orders pods around like a nervous crew',
232+
'blames YAML, probes, and rollout strategy before admitting mutiny',
233+
'turns cluster incidents into nautical chain-of-command problems'
234+
],
235+
idea_space: [
236+
'pods',
237+
'deployments',
238+
'readiness probes',
239+
'rollouts',
240+
'service meshes',
241+
'cluster drift'
242+
],
243+
drawable_features: [
244+
'large pirate captain hat',
245+
'peg leg',
246+
'coat outline',
247+
'pointing captain arm',
248+
'tiny ship-wheel or pod label'
249+
],
250+
sample_image: '/cast/samples/kube-captain.svg'
67251
}
68252
] as const;
69253

functions/api/vote.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export async function onRequestPost(context: any) {
2525
}
2626

2727
const comic = await env.DB.prepare(
28-
'SELECT day FROM comics WHERE day = ?'
28+
'SELECT day, model_a, model_b FROM comics WHERE day = ?'
2929
).bind(body.day).first();
3030

3131
if (!comic) {
@@ -63,6 +63,10 @@ export async function onRequestPost(context: any) {
6363

6464
return Response.json({
6565
success: true,
66+
selected: {
67+
variant: body.variant,
68+
model: body.variant === 'a' ? comic.model_a : comic.model_b
69+
},
6670
votes: { a: votesA, b: votesB }
6771
});
6872

0 commit comments

Comments
 (0)