Argues the project's real contribution isn't satire but classification. By giving each dark pattern a component name that fits inside an import statement (FakeUrgencyTimer, ConsentDanceModal), Performative-UI moves the discourse beyond essays and screenshots into a shared vocabulary developers can actually use to identify and refuse these patterns.
A large share of the 69-comment thread responded by tagging themselves as having shipped exactly these components — 'shipped this last sprint,' 'PM asked for exactly this,' 'we call this the consent dance.' Their take is that the library lands because every component documents a real pattern they've been pressured to build, not a theoretical abuse.
A second faction in the thread pushed back that these patterns work because users don't actually mind them, that growth-stage companies need them to convert, and that visible regulatory artifacts like GDPR cookie banners are the regulators' fault rather than the designers'. They frame the catalog as moralizing about practices that are simply good business.
The library ships with no manifesto and no moralizing — components are documented straight-faced with props, defaults, and (deliberately bad) accessibility notes, as if it were any other internal Storybook. The one-line submission 'hope you enjoy' refuses to explain the joke, leaving the indictment to land through the realism of the documentation itself.
A developer going by vorpus published Performative-UI, a React component library hosted at vorpus.github.io/performativeUI. It hit 299 points on Hacker News with a one-line submission: "hope you enjoy." The library is exactly what the name suggests — a catalog of UI tropes presented as importable components. Fake progress bars that pause at 97%. Cookie consent dialogs where "Accept All" is a button and "Reject" is a 9-pixel text link. Newsletter modals that block scrolling. Engagement counters that tick upward on a `setInterval`. Skeleton loaders that animate forever on already-loaded content.
Every component in the library is something a working React developer has shipped, been asked to ship, or refused to ship in the last 24 months. The README doesn't moralize. There's no manifesto. The components are documented straight-faced — props, defaults, accessibility notes (most are deliberately bad) — as if this were any other design system. The joke, if it's a joke, is that the documentation reads like it could be a real internal Storybook at any growth-stage SaaS company.
The HN comments split immediately. Half the thread is developers tagging themselves: "shipped this last sprint," "PM asked for exactly this," "we call this the consent dance." The other half is the predictable contingent arguing that dark patterns are just *good conversion*, that users don't actually mind, that the GDPR cookie banner is the regulator's fault, not the designer's. Both reactions prove the project's point.
The useful thing about Performative-UI isn't satire. It's taxonomy. Dark patterns have been a topic since Harry Brignull coined the term in 2010, but the discourse has stayed at the level of essays and screenshots. Performative-UI does something the essays don't: it gives the patterns names that fit inside an import statement. `
Naming is the load-bearing step. You can't refuse to build something you don't have a word for. A junior engineer asked to "make the reject button less prominent" is in a much weaker position than one who can say "that's a ConsentDance and we already know it gets flagged in EU enforcement actions." The library does the same thing for UX that Gang of Four did for object-oriented code — it converts ambient practice into a vocabulary you can argue with.
The second reason it matters: the catalog is comprehensive in a way internal critics aren't. Most engineers can name three or four dark patterns off the top of their head — the cookie banner, the unsubscribe maze, the autoplay trap. Performative-UI documents dozens. Roach motels. Confirmshaming. Disguised ads. Forced continuity. Privacy zuckering. Bait-and-switch CTAs. The breadth matters because the industry's defense of any individual pattern is always "that's just one thing, you're overreacting." Forty-plus patterns in one repo makes that defense harder to sustain.
The community reaction is the third signal worth noting. The top HN comments aren't "this is funny" — they're confessional. Engineers are using the thread as a backchannel to admit what they've built, which suggests the gap between what developers want to ship and what they're shipping is wider than the trade press acknowledges. A platform with 299 upvotes on a satirical dark-patterns library is the same platform where every other week a post about "why I quit my SaaS job" hits the front page. These are the same story.
There's also the regulatory subtext. The EU's Digital Services Act explicitly prohibits dark patterns as of 2024. The FTC opened its first dark-patterns enforcement actions in 2023. California's CPRA has dark-pattern language. A component library that makes the patterns trivially identifiable in source code is, accidentally or not, a discovery tool for plaintiffs and regulators. Static analysis on `
The practical use isn't to install the library. It's to read it. Spend twenty minutes clicking through every component on the demo page and ask, for each one, *do we have this in production*. Most teams will find three or four. Some will find ten. The exercise is more useful than any compliance training because it gives engineers a concrete vocabulary that maps directly onto the codebase they actually work in.
For team leads, the library is a code-review reference. The next time a designer's Figma shows a cookie modal with a giant green "Accept" and a tiny gray "Manage preferences," you can link directly to the Performative-UI component and say "this is the documented anti-pattern." That's a much faster argument than re-litigating the ethics from first principles every quarter. The same way ESLint rules ended the "should we use semicolons" debate by encoding it, named components end the "is this a dark pattern" debate by encoding it.
For engineers who want to push back without quitting, the library gives you a citation. "PM wants a forced-continuity trial signup" becomes a ticket where you can link to the pattern, link to the FTC's 2024 negative-option rule, and propose the non-dark alternative in the same comment. Refusal scales better when it comes with a paper trail. The dark-pattern conversation has been stuck in the op-ed phase for fifteen years partly because individual engineers had no shared reference to point at. Now they do.
The interesting question is whether Performative-UI gets forked into a *real* library — a `dark-patterns-eslint` rule set, a Storybook addon that flags components matching the catalog's signatures, a Chrome extension that highlights them on live sites. The raw material is there, and the regulatory tailwind is real. Satire becomes infrastructure faster than people expect; `npm install dark-patterns-detector` is one motivated weekend away. When that ships, every product manager asking for a 97%-progress-bar will be arguing against a linter, not a colleague — and that's a much harder argument to win.
hope you enjoy
→ read on Hacker NewsThe funny thing is, the techniques shown here are the ones that were once considered something only advanced front-end developers or publishers could do. Seeing that a former symbol of skill has now become a subject of satire makes me think that what we call 'high-level' ultimately comes f
I love how this is both hilarious and extremely well made. Great job!And I'm gonna be honest, I kind of want to use a few of these components for real (the ASCII art is fantastic).
The most extreme virtue-signal is to go completely browser-default and have no styling whatsoever. Like lowercasing because your pinky can't be arsed to reach for the shift-key even though you've a billion dollars in series A.
These all look very professional for (basically) a parody library
Top 10 dev stories every morning at 8am UTC. AI-curated. Retro terminal HTML email.
I've worked on several projects where people looked at the site, which was simple and straight to the point, and people would straight up tell me they didn't take it seriously because it didn't have these performative UI things on it.It's like when a Youtuber's audience comp