artlu.ai
100 days. 100 features.
Just AI and an internet connection.
day 64/100 · 82 shipped · 18 to go
← all projects
$ video · spoolcast-dev-log-04

the bug an AI couldn't catch — spoolcast dev log 4

may 2, 2026 · 4m 24s · style: wojak-gpt2

style library

Modern wojak / doomer-chad meme comic style, built natively on GPT Image 2 (text-to-image + image-to-image). Sister library to wojak-comic (which was built on nano-banana-2). Use this when the session's preferred_model is the GPT Image 2 family.

style anchor
style anchor
Modern wojak / doomer-chad meme comic style, built natively on GPT Image 2 (text-to-image + image-to-image). Sister library to wojak-comic (which was built on nano-banana-2). Use this when the session's preferred_model is the GPT Image 2 family.
builder character
the main hooded figure — mid-register wojak (not fully doomer, not fully chad). Alias for the style anchor; serves double-duty as both the style anchor and the builder character reference.
ai-figure character
a wojak-universe AI figure that is slowly breaking down from overuse. Full-body standing. EMOTIONAL REGISTER: flat-affect, NO displayed emotion, NO smile, NO frown — a dead expressionless stare. Depression is the absence of emotion, not the display of sadness. FACE LINEWORK: brows, nose, mouth drawn in the classic rough / jagged / slightly-disjointed wojak linework (uneven strokes, hand-drawn imperfections). EYES: replaced with hollow loading-spinner icons (dashed rings) set in dark-shadowed sockets. CRACKS: visible hairline cracks spider across the face and forehead as if the outer shell is fracturing from overuse. At least one crack wide enough to reveal a glimpse of AI circuitry underneath — thin circuit-trace lines, a small exposed chip pattern. Fractures read as structural fatigue, not injury. FOREHEAD: a crooked rectangular ink-stamp reading 'AI' in bold capital letters, partially crossed by a crack. HOODIE: pale cream / off-white hoodie, hood down, noticeably lighter than the weary narrator's gray hoodie. POSTURE: slight slouch, arms hanging at sides. PLAIN background, no environment, no other characters, no other text. Single clear readable subject.

summary

writing
Claude · screenplay, shot-list, scene prompts
images
generated
audio
Puck · 63 beats
render
Remotion
audit
passed

chunks

#1 · C1

Act 1 — cold open

I built a tool to update my own projects.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "MCP".
#2 · C2

Act 1 — cold open

I asked it to update one project.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#3 · C3

Act 1 — cold open

But instead of updating the one I asked for, it updated a different one.
! narration ✓ render
Chat-UI mockup of the MCP's response message. The response text reads roughly: 'Updated project: homepage showcase — artlu.ai (demos grid + top/showcase flag split). Slug regenerated.' The wrong-project name is highlighted in red. Browser/chat-UI chrome contrasts with the wojak anchor.
#4 · C4

Act 1 — cold open

But when I checked, it told me — in writing — that it had done the right thing.
✓ narration ✓ render
Same chat-UI response held; push-in zoom on the success-confirmation phrasing in the response (e.g. 'Updated successfully.' or '✓ Slug regenerated.'). Red highlight on the wrong-name still visible above. The contradiction is the point.
#5 · C5

Act 1 — cold open

Hmm...
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic scene: the builder character at desk, eyebrow raised, eyes narrowed at the laptop screen with a clearly skeptical / suspicious expression. Slightly leaned-in posture. The chat-UI from the previous beats is still visible on the laptop in the background but de-emphasized. Held longer than other cold-open chunks — silent doubt.
#6 · C6

Act 1 — setup

Before we dive in — quick context. I run a tracker for my projects. Fifty-eight of them.
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "artlu.ai/project/spoolcast" | "artlu.ai/project/tribe".
#7 · C7

Act 1 — setup

Each one has a unique identifier — a slug, the short readable bit at the end of a web address. Like 'spoolcast,' or 'tribe.'
! narration ✓ render
Wojak-comic scene: a single hand-drawn URL written across the cream paper, e.g. 'artlu.ai/project/spoolcast'. The slug part 'spoolcast' is circled in pencil. Below it, a second URL 'artlu.ai/project/tribe' with 'tribe' circled. Clear, label-style layout.
#8 · C8

Act 1 — setup

However, some projects had no slug. A few were stale — I'd renamed the project, the slug never followed.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "MCP".
#9 · C9

Act 1 — setup

So claude was running through the list, fixing each one. Through a tool I built — an MCP, a bridge that lets claude operate the tracker.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "+14" | "+3".
#10 · B1

Act 2 — bumper

title card
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "THE AUDIT".
#11 · C10

Act 2 — THE AUDIT

Fourteen had no slug. Claude added them. Three were stale. Claude updated those too.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#12 · C11

Act 2 — THE AUDIT

With the updates complete, things were moving smoothly.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#13 · C12

Act 2 — THE AUDIT

As he went through, he noticed some specific issues.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#14 · C13

Act 2 — THE AUDIT

Going great. Routine work.
! narration ✓ render
Wojak-comic scene: the builder leans back in his chair, hands behind head, relaxed confident posture. The ai-figure continues working at the laptop in the background, calmly. Quiet rhythm beat — pre-disaster calm.
#15 · C14

Act 2 — THE AUDIT

But then things took a turn — claude got to a project literally named 'artlu.ai.'
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "update_project("artlu.ai")".
#16 · C15

Act 2 — THE AUDIT

Curious, claude called the update tool. The tool responded.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#17 · C16

Act 2 — THE AUDIT

But the response was unexpected.
✓ narration ✓ render
Wojak-comic scene: pause-frame on the response bubble materializing, builder leaning slightly forward; tension on the laptop screen.
#18 · C17

Act 2 — THE AUDIT

And the response named a completely different project.
! narration ✓ render
Chat-UI mockup: the MCP response text fully visible. The response reads roughly: 'Updated project: homepage showcase — artlu.ai (demos grid + top/showcase flag split).' The wrong-name region 'homepage showcase' is highlighted in red. Same chat-UI register as C3/C4.
#19 · C18

Act 2 — THE AUDIT

The one it had actually updated — was the homepage demos grid. Not artlu.ai.
✓ narration ✓ render
Side-by-side card render: LEFT panel labeled 'asked for' shows the artlu.ai project (tracker row). RIGHT panel labeled 'updated' shows the homepage-showcase project (different tracker row). Strikethrough animation between them suggested. Tracker-UI register.
#20 · C19

Act 2 — THE AUDIT

This discrepancy caught my attention. The tool's own response gave it away.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "index.ts".
#21 · B2

Act 3 — bumper

title card
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "THE COLLISION".
#22 · C20

Act 3 — THE COLLISION

I reverted the change. Opened the source code.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#23 · C21

Act 3 — THE COLLISION

That's when I noticed something strange.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#24 · C22

Act 3 — THE COLLISION

So, I knew what to do next.
! narration ✓ render
Wojak-comic scene: builder's hand reaching toward the keyboard, decisive but quiet.
#25 · C23

Act 3 — THE COLLISION

Both tools used the same single line of code.
! narration ✓ render
Code-editor screenshot mockup: split view of pre-fix index.ts. LEFT panel shows the get_project tool body with the line `doc.data().name?.toLowerCase().includes(name.toLowerCase())` highlighted. RIGHT panel shows the update_project tool body with the SAME line highlighted. Monospace, code-editor theme, distinct from wojak anchor.
#26 · C24

Act 3 — THE COLLISION

This line of code performed a pure substring match — anything containing the search string would match. Nine of my projects did.
! narration ✓ render
Code-editor card: the single line `doc.data().name?.toLowerCase().includes(query.toLowerCase())` displayed prominently. Below it, a list of nine real-or-representative project names (e.g. 'artlu.ai', '— artlu.ai', '— artlu.ai v2', 'homepage showcase — artlu.ai', etc.) all glowing because each contains the substring 'artlu.ai'. Counter '9' visible.
#27 · C25

Act 3 — THE COLLISION

Nine matches. But only one came back. I needed to know which one — and why.
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#28 · C26

Act 3 — THE COLLISION

To find out, I looked into how the system processes matches.
! narration ✓ render
Wojak-comic scene: zooming-in on the laptop screen, the matcher logic represented as a small flowchart sketch.
#29 · C27

Act 3 — THE COLLISION

It returned the first match it found. Sorted by ID — the random label each project gets when it's saved.
! narration ✓ render
Code-editor card: same nine project names from C18, each with its randomly-generated firestore doc ID rendered next to it (monospace). The IDs are visually distinct (mix of letters and digits). A small label: 'sorted by document ID'. The first item in sorted order is at the top.
#30 · C28

Act 3 — THE COLLISION

Artlu.ai's ID started with M. The wrong project's started with 4. Four sorts before M.
✓ narration ✓ render
Two large monospace ID strings rendered side by side: 'mE3rAaf8IZqxEn4t3Rj4' (labeled artlu.ai) and '4EdEwKBbJWejkxwv8WVw' (labeled homepage-showcase). The first character of each is enlarged and color-coded — 'M' in one color, '4' in another. A small label 'sort order: 4 < M' visible.
#31 · C29

Act 3 — THE COLLISION

So the wrong project always won. Every time.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#32 · C30

Act 3 — THE COLLISION

I needed to understand why this was happening.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "get_project("artlu.ai")".
#33 · C31

Act 3 — THE COLLISION

Then I tried to verify what 'artlu.ai' actually was. Using the same tool.
✓ narration ✓ render
Wojak-comic scene: the builder at the desk, typing into a chat window. The chat shows 'get_project("artlu.ai")'. Investigative posture, brow furrowed. The MCP icon glows faintly between the chat and the tracker.
#34 · C32

Act 3 — THE COLLISION

Asked for 'artlu.ai.' Got the homepage one back.
✓ narration ✓ render
Chat-UI / terminal mockup: prompt `get_project("artlu.ai")`; response below shows the wrong project (homepage showcase) being returned. Red highlight on the wrong-name region.
#35 · C33

Act 3 — THE COLLISION

Tried the full name — 'homepage showcase — artlu.ai.' Got the homepage one back.
! narration ✓ render
Chat-UI / terminal mockup: same get_project but with the full name as the query; same wrong project comes back. Red highlight repeated.
#36 · C34

Act 3 — THE COLLISION

Tried all caps — ARTLU.AI. Same wrong answer.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#37 · C35

Act 3 — THE COLLISION

Three different ways to ask. Same broken answer. Same matcher under the hood.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#38 · C36

Act 3 — THE COLLISION

So, I realized the tool I was using to verify the results was also relying on this broken matcher.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#39 · C37

Act 3 — THE COLLISION

The thing I was using to check the work — was the same thing that was broken.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#40 · C38

Act 3 — THE COLLISION

So — I stepped outside it.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#41 · C39

Act 3 — THE COLLISION

And what I did next was simple.
! narration ✓ render
Wojak-comic scene: builder pulling up a fresh editor pane on the side, deliberate pace.
#42 · C40

Act 3 — THE COLLISION

Wrote a tiny script. Six lines. Talked straight to the database. Read the project by its ID.
✓ narration ✓ render
Code-editor card: six lines of Node.js using firebase-admin. Visible code roughly: `import admin from 'firebase-admin';` / `import key from './service-account.json' assert { type: 'json' };` / `admin.initializeApp({ credential: admin.credential.cert(key) });` / `const db = admin.firestore();` / `const doc = await db.collection('projects').doc('mE3rAaf8IZqxEn4t3Rj4').get();` / `console.log(doc.data());`. Monospace, code-editor theme.
#43 · C41

Act 3 — THE COLLISION

That gave me ground truth. The tool didn't get to lie about it.
! narration ✓ render
Terminal-style output: the firebase-admin script's console.log result, showing the REAL artlu.ai project's data — name 'artlu.ai', slug, doc id mE3rAaf8IZqxEn4t3Rj4, etc. A small ✓ stamp on 'ground truth.' Plain terminal aesthetic.
#44 · B3

Act 4 — bumper

title card
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "THE FIX".
#45 · C42

Act 4 — THE FIX

The fix was small. About ten lines.
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#46 · C43

Act 4 — THE FIX

The fix involved a helper function to handle name matching.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#47 · C44

Act 4 — THE FIX

With ground truth, the fix became clear.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#48 · C45

Act 4 — THE FIX

A helper function. Try an exact name match first. If nothing matches exactly, fall back to substring.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "findProjectDoc" | "get_project" | "update_project".
#49 · C46

Act 4 — THE FIX

Patched the lookup tool. Patched the update tool. Same helper, used in both places.
! narration ✓ render
Concept diagram in wojak-comic style: a single helper labeled 'findProjectDoc' in the center; two arrows fan out from it to two boxes labeled 'get_project' and 'update_project'. Hand-drawn, tidy. No characters.
#50 · C47

Act 4 — THE FIX

Time to test the changes. Rebuilt. Restarted. Asked the tool for 'artlu.ai.' It returned the right one.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#51 · C48

Act 4 — THE FIX

But there was a catch.
✓ narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.
#52 · C49

Act 4 — THE FIX

That bug had been in the tool since day one.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a hand-drawn calendar with 'today' marked. Below it, the word 'artlu.ai' shown literally fitting inside several longer names that contain it (e.g. '— artlu.ai', 'homepage showcase — artlu.ai'). Visual: 'artlu.ai' is the smaller string sitting inside the bigger ones. Render exactly this text on the frame, hand-lettered in the session style: "today" | "artlu.ai" | "— artlu.ai" | "homepage showcase — artlu.ai".
#53 · C50

Act 4 — THE FIX

It only fired today. Because today was the first time one project's whole name was hiding inside other project names.
✓ narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a hand-drawn page or notebook labeled 'tests' that's mostly blank, with a few entries written but no entry for the substring-collision case. A pencil rests on the page. Quiet, reflective tone. Render exactly this text on the frame, hand-lettered in the session style: "tests".
#54 · C51

Act 4 — THE FIX

The kind of input I never thought to test for — because I'd never written it down as a thing to test for.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "tests".
#55 · C52

Act 4 — THE FIX

Here's the harder thing. I trusted the tool because I wrote it.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a hand-drawn page of code with two overlays: the LITERAL line (`includes(...)`) drawn small, and the INTENDED meaning (`exact match`) drawn large above it. The intended version is what the eye reads. Render exactly this text on the frame, hand-lettered in the session style: "what you meant" | "what's on the page".
#56 · C53

Act 4 — THE FIX

When you read your own code, you read what you meant. Not what's on the page.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic scene: builder gesturing outward, a question-mark beside him; small question-form visual.
#57 · C54

Act 4 — THE FIX

But is this a problem that only I have?
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic frame: a wide hand-drawn map / globe sketch with three pins dropping. Quiet, opening-the-aperture tone.
#58 · C55

Act 4 — THE FIX

And it's not just me.
✓ narration ✓ render
Wojak-comic frame: a wide hand-drawn map / globe sketch with three pins dropping. Quiet, opening-the-aperture tone.
#59 · C56

Act 4 — THE FIX

For example, when AWS went down in 2017, their status page kept showing green. Because the status page lived on AWS.
✓ narration ✓ render
News-headline-style card: 'AWS S3 outage, Feb 28 2017 — status dashboard hosted on AWS, kept showing all-green during the outage.' Short paragraph and a screenshot or sketch of the dashboard with green checkmarks while real services are red.
#60 · C57

Act 4 — THE FIX

Similarly, when Crowdstrike pushed a bad update last summer, eight million Windows machines crashed. The fix couldn't reach them — they couldn't boot.
! narration ✓ render
News-headline-style card: 'Crowdstrike Falcon update — July 2024 — 8.5M Windows machines bricked into boot loop.' Short paragraph; sketch or screenshot of a Windows blue screen of death (BSOD).
#61 · C58

Act 4 — THE FIX

Ask an AI to grade its own work. The scores go up. Same model. Same blind spots.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: three small icons stacked — a server tower (AWS), a Windows desktop (Crowdstrike), an AI brain (LLM) — all bent in the same self-referential loop shape. Same shape across three scales. Render exactly this text on the frame, hand-lettered in the session style: "different scales" | "same shape".
#62 · C59

Act 4 — THE FIX

Different scales. Same shape.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a literal hand-drawn wooden ruler attempting to measure itself. The ruler is bent into a small loop, one end of it touching its own surface. Quiet, philosophical tone — the metaphor is the entire frame, no other elements. Centered composition.
#63 · C60

Act 4 — THE FIX

You can't measure a ruler with itself.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a small hand-drawn tool (a wrench / hammer / box labeled 'tool') with a green check mark coming out of it. But behind the check, the input it received is visibly wrong (a small mismatched shape entering the tool from the left). The mismatch is part of the visual — viewer sees the tool emitting OK while the input is malformed. Render exactly this text on the frame, hand-lettered in the session style: "✓".
#64 · C61

Act 4 — THE FIX

Every tool you build assumes something about what gets fed into it. The day that assumption breaks — the tool will tell you everything's fine.
! narration ✓ render gpt-image-2-image-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic scene: the builder at the desk, having closed the chat window, now opening a separate plain editor. Quiet, reflective posture — looking at the editor, hand on chin. The MCP icon visible but de-emphasized in the background. Held longer than other Act 4 chunks. Quiet payoff.
#65 · C62

Act 4 — THE FIX

And the only way you find out... is to step outside it.
! narration ✓ render gpt-image-2-text-to-image
Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic style sign-off card on cream paper. Centered hand-lettered text: 'Built with spoolcast.' Below it, smaller: 'Subscribe for more.' Optional small spoolcast wordmark or icon. No characters. Render exactly this text on the frame, hand-lettered in the session style: "Built with spoolcast." | "Subscribe for more.".
#66 · C63

Act 4 — outro

Built with spoolcast. Subscribe for more.
✓ narration ✓ render
Wojak-comic style sign-off card on cream paper. Centered hand-lettered text: 'Built with spoolcast.' Below it, smaller: 'Subscribe for more.' Optional small spoolcast wordmark or icon. No characters.
I built a tool to update my own projects. I asked it to update one project. But instead of updating the one I asked for, it updated a different one. But when I checked, it told me — in writing — that it had done the right thing. Hmm... Before we dive in — quick context. I run a tracker for my projects. Fifty-eight of them. Each one has a unique identifier — a slug, the short readable bit at the end of a web address. Like 'spoolcast,' or 'tribe.' However, some projects had no slug. A few were stale — I'd renamed the project, the slug never followed. So claude was running through the list, fixing each one. Through a tool I built — an MCP, a bridge that lets claude operate the tracker. Fourteen had no slug. Claude added them. Three were stale. Claude updated those too. With the updates complete, things were moving smoothly. As he went through, he noticed some specific issues. Going great. Routine work. But then things took a turn — claude got to a project literally named 'artlu.ai.' Curious, claude called the update tool. The tool responded. But the response was unexpected. And the response named a completely different project. The one it had actually updated — was the homepage demos grid. Not artlu.ai. This discrepancy caught my attention. The tool's own response gave it away. I reverted the change. Opened the source code. That's when I noticed something strange. So, I knew what to do next. Both tools used the same single line of code. This line of code performed a pure substring match — anything containing the search string would match. Nine of my projects did. Nine matches. But only one came back. I needed to know which one — and why. To find out, I looked into how the system processes matches. It returned the first match it found. Sorted by ID — the random label each project gets when it's saved. Artlu.ai's ID started with M. The wrong project's started with 4. Four sorts before M. So the wrong project always won. Every time. I needed to understand why this was happening. Then I tried to verify what 'artlu.ai' actually was. Using the same tool. Asked for 'artlu.ai.' Got the homepage one back. Tried the full name — 'homepage showcase — artlu.ai.' Got the homepage one back. Tried all caps — ARTLU.AI. Same wrong answer. Three different ways to ask. Same broken answer. Same matcher under the hood. So, I realized the tool I was using to verify the results was also relying on this broken matcher. The thing I was using to check the work — was the same thing that was broken. So — I stepped outside it. And what I did next was simple. Wrote a tiny script. Six lines. Talked straight to the database. Read the project by its ID. That gave me ground truth. The tool didn't get to lie about it. The fix was small. About ten lines. The fix involved a helper function to handle name matching. With ground truth, the fix became clear. A helper function. Try an exact name match first. If nothing matches exactly, fall back to substring. Patched the lookup tool. Patched the update tool. Same helper, used in both places. Time to test the changes. Rebuilt. Restarted. Asked the tool for 'artlu.ai.' It returned the right one. But there was a catch. That bug had been in the tool since day one. It only fired today. Because today was the first time one project's whole name was hiding inside other project names. The kind of input I never thought to test for — because I'd never written it down as a thing to test for. Here's the harder thing. I trusted the tool because I wrote it. When you read your own code, you read what you meant. Not what's on the page. But is this a problem that only I have? And it's not just me. For example, when AWS went down in 2017, their status page kept showing green. Because the status page lived on AWS. Similarly, when Crowdstrike pushed a bad update last summer, eight million Windows machines crashed. The fix couldn't reach them — they couldn't boot. Ask an AI to grade its own work. The scores go up. Same model. Same blind spots. Different scales. Same shape. You can't measure a ruler with itself. Every tool you build assumes something about what gets fed into it. The day that assumption breaks — the tool will tell you everything's fine. And the only way you find out... is to step outside it. Built with spoolcast. Subscribe for more.