Casual

The Dark Pattern Museum

Eleven web dark patterns, each one you can actually try

Play now

The original prompt.

Copy it. Add your own twist.

Read the complete original prompt
APP NAME
The Dark Pattern Museum

APP IDEA
A short explainer about the tricks websites use to make people act against their own interest, where every trick is a working interactive demo the user can fall for once.

CORE EXPERIENCE
The app opens directly on two opening paragraphs explaining what dark patterns are and why knowing them matters, then runs through eleven named patterns. Each pattern has a heading, a short explanation, and a live fake interface the user can interact with.

INTERACTION AND STATE
Every demo is a self-contained fake UI built from ordinary elements; nothing leaves the app and no real data is collected. The demos are: a shady store that sneaks an extra item into the basket right before purchase; a newsletter prompt whose decline option insults the user; a fake friend-request list where accepting actually sends a request; a stack of irrelevant notifications that keep arriving; an unsubscribe screen split into twelve separate mailing lists; an article that hides the rest of its text behind a share button; a desperate friend request sent on the user's behalf; a signup where the yes and no buttons swap position at the last moment; a terms checkbox whose text also signs the user up for everything else; a social login that then messages the user's whole contact list; and a download page with several fake download buttons above the real one. After a demo fires, reveal briefly what just happened so the trick is legible. Include a closing paragraph.

VISUAL AND CONTENT DIRECTION
Plain light page, one narrow reading column, headings in a warm coral, body text in near-black. Each demo sits in a bordered panel styled to look like a slightly generic third-party website, deliberately a bit uglier than the surrounding page so it reads as a specimen under glass.

OUTCOME
A summary of which tricks caught the user and which they spotted, with Replay resetting every demo.

ONE-SENTENCE INSTRUCTION
Try each demo below — most of them are designed to catch you.

TASK-SPECIFIC REQUIREMENTS
The demos must actually work rather than being static screenshots, but must never collect input, send anything, or persist anything beyond this app's own local state. Keep the explanatory copy for all eleven patterns in both locales.

Server-render determinism: do not call Date.now(), new Date() or Math.random() during initial render. Read the clock and generate randomness only inside client effects, and hard-code the default locale to English rather than detecting navigator.language, so first paint is identical on server and client and never produces a hydration mismatch.

REPLICATION SCOPE

This specification is a faithful rebuild of an existing reference experience, described here in full. Reproduce it as closely as the platform allows.

Must be reproduced exactly: the complete content inventory listed above with its exact ordering and wording, the mechanic and its state transitions, the copy voice, the visual structure and the overall pacing. Do not add levels, items, scoring, achievements, timers, onboarding or extra features that are not described here. Do not drop or abbreviate any listed content.

Acceptable platform adaptations, and only these: touch input in place of mouse input; layout reflow for a phone-sized portrait host; the bilingual layer, the one-sentence instruction and the result/Replay/Share affordances required below; and host safe-area insets. Everything else stays as specified.

All content must be self-contained. Do not call any external API, data service, map, media or image service at runtime; every dataset, table, constant and asset this app needs must live inside the project.

IMPLEMENTATION INSTRUCTIONS

Treat this specification as the final implementation brief and build the complete app now.

Open directly into the live app experience. Do not add a splash screen, opening cover, welcome page or separate onboarding flow.

Include exactly one concise sentence that explains how to play or use the app. Use the sentence provided under ONE-SENTENCE INSTRUCTION. Show it inside the live app interface, not on a separate opening screen.

Internationalization is required. Implement a lightweight built-in i18n layer supporting exactly two locales: English (en) and Simplified Chinese (zh). The app must always open in English and must never auto-detect or follow the browser, device or system language. Provide one clear EN / 中文 language toggle. Every user-facing string, including the one-sentence instruction and all loading, empty, success, error and result states, must have complete English and Chinese versions. Switching languages must update the entire interface without mixed-language text or untranslated fallback strings.

Let Eazo adapt the app to its actual host and available viewport. Do not hard-code or target a particular browser size, device size, viewport width or height, App frame size, root-height formula, or host-container CSS implementation. In the live preview, keep the current primary action easy to discover and usable without requiring an initial downward scroll; avoid horizontal overflow and avoid decorative layers blocking required controls. Optional detail may scroll. Keep active media and secondary copy compact enough that the next action remains visible. In result states, show the summary plus Replay and Share before optional detail. Do not eagerly render a large collection of full-size result images in one long page; use a compact summary, carousel, pagination, expansion, or virtualization. Use accessible touch targets.

Respect the host safe areas for iPhone notches, Dynamic Island, the status bar and the bottom home indicator in the initial implementation, before the first preview. Apply the safe-area treatment to the App's entire usable content region across the live flow, result, modal, empty and error states, not only to the first header. Keep the header, language toggle, primary controls and result actions entirely inside the usable safe area. In the standard Eazo mobile host, use `padding-top: max(56px, env(safe-area-inset-top, 0px))` and `padding-bottom: max(34px, env(safe-area-inset-bottom, 0px))`, or Eazo's current official safe-area equivalent. If the header or action footer is sticky or fixed, include the matching inset in that region and reserve content clearance so it does not overlap the scrollable body. These are safe-area insets only, not fixed viewport or App-frame dimensions; continue to let Eazo adapt the overall width and height. Make sure flex children can shrink inside the remaining usable area and that required controls are not covered or pushed off screen.

Use Eazo's built-in defaults and official platform capabilities. Do not add unrelated features or expand the scope beyond this specification.

When implementation is complete, provide a working preview for QA.

Bakery Pin

Tap the left and right flippers to keep the ball alive and light targets in sequence, unfolding the bakery table upward zone by zone.

Play
THE ORIGINAL CREATION PROMPT

The idea that started this app. Copy it, change it, make it yours.

Play app ↗Open Eazo ↗