
Black Tape Manifesto
An essay on building at 3am.
No client. No brief. No invoice. We built this on a Friday night because we'd spent three weeks making what other people wanted and forgot why we started. A WebGL essay about building for love instead of money. The text rearranges as you scroll — sentences becoming other sentences, the way a thought does at 3am.
At 3am the work stops asking to be liked.
No client to please. No invoice to earn.
Just you, a dim room,
and the thing you wanted to make
before anyone told you what it was worth.
The constraint was the point: one weekend, two people, no plan past the first sentence. We wrote the essay in a shared doc on Friday, built the shader Saturday, and spent Sunday taking things out. If a line didn't make us feel something, it didn't ship.

We almost made it interactive — click a word, branch the essay, a whole choose-your-own-path thing. Killed it Saturday night. The interactivity was us showing off, not the piece talking. The only thing left is scroll. You read it the way you read anything. The work disappears.
Ten directions. One shipped.
Every project starts as ten homepages, fully built. The client picks the one that ships. The other nine aren’t waste — they’re the proof we looked before we leapt.
pickedThe 3am room photo at low opacity behind the essay's opening lines. Atmospheric, lonely, true.
rejectedSingle italic headline at near-viewport scale, centered on near-black. The essay title carries the whole screen.
rejectedFive timestamp entries as the hero itself — the chronology is the essay. Ruled rows, two-column grid.
rejectedInverted palette: off-white ground, ink-black Newsreader italic. Reads like a printed essay or book cover.
rejectedGaramond with a floated drop cap, narrow reading column, long leading. Opens the essay directly.
rejectedSVG fractal-noise grain at 3.5% opacity, one centered italic sentence. The quietest possible screen.
rejectedStacked lines at sharply decreasing opacity — built for love / not for money / not for anyone / for this. Suggests the scroll-morph behaviour.
rejectedOpening sentence above a ruled label-value table of the stack. Every 'none' reads louder than a feature.
rejectedDesert shadow texture at 6% opacity behind a Cormorant italic pull quote. Maximum serif luxury, minimum noise.
rejectedVertical timeline label on the left margin, hairline rule, then enormous '3am.' in italic. The studio's -0.5deg rotation on the wordmark.
Next.js. Custom GLSL shaders for the text morph — no library, we wanted to understand every line of it. No CMS. No analytics. No cookie banner. Nothing watching you read.



three weeks deep in other people's briefs. opened a blank repo instead.
first shader. text bleeds into text. we both went quiet.
tried branching paths. clever. killed it by midnight.
wrote the last paragraph. then deleted the last paragraph.
shipped it. told no one. you finding this is the whole reward.
