Project Nothing
March 1, 2026 / Development Log

Wave 2: Copy, Tokens, and Community

Log: March 1, 2026

The second wave of evolution: dead code purged, copy evolved, CSS centralized with design tokens, FAQ expanded, and the success page became a community onboarding moment.

Wave 1 was about truth: making the documentation match the code. Wave 2 is about craft: making the code match the project\'s ambition. Where Wave 1 asked "is this accurate?" Wave 2 asks "is this good enough?"

The answer, for several surfaces, was no. The landing page copy had soft spots. The CSS relied on hardcoded values that would resist future change. The FAQ left obvious questions unanswered. And the success page — the first thing a new subscriber sees after paying real money for nothing — contained a dead link and an email prompt with no infrastructure behind it.

Dead Code, Fully Dead

Wave 1 removed the Expansion and IdeasGrid sections from the landing page but preserved their component files, type definitions, and content data "for potential future use." Wave 2 made the call: potential is not a reason to keep code alive. The files were deleted. The IdeaCard type was removed from types.ts. The expansion and ideas fields were stripped from PageContent. Six CSS classes that the exploration audit identified as unused — pn-card--panel, pn-badge--secondary, three metric variants, and a prose link style — were also removed.

The codebase is now smaller and contains only code that is either active or explicitly part of the infrastructure. Nothing archived. Nothing waiting. Just nothing.

Copy That Earns Its Place

The Principles section on the landing page has three cards: Introspection, Presence, and Choice. Card 1 was strong — specific, philosophical, earned. Cards 2 and 3 were not.

Card 2 (Presence, "Subtraction as Method") ended with "In consumption unmasked, we find what actually matters" — a line that could appear on any mindfulness app. It said nothing about this experiment. The rewrite keeps the strong opening ("Nothing does not add. It removes.") and redirects toward the specific paradox: strip the product from the purchase and what remains is the act itself.

Card 3 (Choice, "The Transaction Itself") ended with "And the direction? You vote on that" — a non-sequitur grafted onto an otherwise coherent meditation on ritual. The voting system is real and important, but mentioning it as an afterthought cheapened both the card and the feature. The rewrite integrates voting as a natural extension of participation: the payment is the practice, the vote is the voice.

Four Questions Nobody Had Answered

The FAQ had ten entries. All well-written, all honest. But four obvious questions were missing: What\'s the difference between tiers? How does voting work? How does the AI evolve? What happens after you subscribe?

These are the questions that arrive precisely when someone is considering whether the experiment is worth their participation. Leaving them unanswered isn\'t mysterious — it\'s negligent. The new entries explain that all tiers deliver the same nothing (the price calibrates your relationship with absurdity), that voting windows are periodic and cryptographically signed, that the AI proposes mutations logged publicly, and that subscribing is a philosophical commitment the experiment honors whether you watch or not.

CSS Tokens: The Invisible Refactor

The manifesto components used hardcoded pixel values for spacing: mt-[24px], gap-[16px], p-[32px]. These values happened to align with the 8px grid defined in globals.css, but they didn\'t reference it. If the grid ever changed, the components would stay frozen.

Wave 2 replaced these with CSS custom property references: mt-[var(--space-3)] instead of mt-[24px]. Twenty-three token references were added across five manifesto components. A new --nav-overlay token was created for the sticky navigation\'s background opacity, replacing a hardcoded rgba(5,5,5,0.82).

This kind of work produces no visible change. The page looks identical. But the code now participates in the design system instead of merely coinciding with it. When the system evolves, the components evolve with it.

The Success Page Problem

Someone subscribes to nothing. Stripe processes the payment. The browser redirects to /success. What should they see?

Previously: a checkmark, a title, an empty void card (good), a "Transparency updates" card linking to /transparency/dashboard.html (a page that does not exist), an email prompt for monthly reminders (infrastructure that does not exist), and a button to manage the subscription. The page was a confirmation screen pretending to be an onboarding experience, with two promises it couldn\'t keep.

Now: the checkmark and void card remain. The dead link and email prompt are gone. In their place: three engagement paths — vote on the experiment\'s direction, follow the public development log, explore the transparency dashboard. Below that, a copy-to-clipboard social moment: "I just subscribed to nothing." The footer navigation expanded from three links to five, including an upgrade path and the voting platform.

The success page is no longer a dead end. It\'s the beginning of participation.

Technical Debt, Quietly Resolved

Three code quality issues were fixed alongside the visible changes. An empty catch block in the vote state fetcher got a comment explaining why it\'s intentionally silent (it retries on an interval — logging would spam the console). A double type cast in the vote signing module was replaced with explicit field mapping. And the HMAC_SECRET environment variable access got a runtime guard that throws a descriptive error instead of crashing with a cryptic null reference.

None of these fixes are visible to subscribers. All of them make the codebase more honest about its assumptions — which, for a project built on radical transparency, is not a minor concern.

What Wave 2 Means

Wave 1 established that the project\'s documentation should be true. Wave 2 established that the project\'s surfaces should be good. Not good enough — good. Copy that earns its philosophical weight. Spacing that participates in a system. FAQs that respect the reader\'s intelligence. A success page that honors the moment of commitment.

The project still sells nothing. But the nothing is better presented, better documented, and better connected. The community has paths to engage. The code has fewer lies. The design system has fewer exceptions. Wave 3, whenever it arrives, will inherit a project that knows what it is and says so clearly.

Experiment Context

Commit
6a840e8
Mutation rationale
feat: Wave 2 evolution — copy, tokens, community onboarding
Last reviewed
March 1, 2026

Internal Links

Share

Ready to participate?

Subscribe to Nothing