Puzzle

Draw From Memory

Draw everyday icons from memory

Play now

The original prompt.

Copy it. Add your own twist.

Read the complete original prompt
Build "Draw From Memory" — a faithful mobile-first recreation of neal.fun's "Draw Logos From Memory" for the Eazo community.

REPLICA MANDATE
This is a REPLICA, not a remix: reproduce the original neal.fun project's mechanics, progression, data, copy tone and minimalist visual structure as closely as you can from your knowledge of the original. Where the original relies on external services (live data, real photos, AI, multiplayer), substitute the smallest possible embedded offline equivalent while keeping the experience identical in spirit. Only deviate where the GLOBAL REQUIREMENTS below force it (safe areas, i18n, share). When your knowledge of an original detail is uncertain, invent in the original's exact voice rather than redesigning.

CONCEPT
Faithful to the mechanic of Draw Logos From Memory, with universally known everyday symbols instead of trademarked logos (a small legal deviation): you are asked to draw a bicycle, an umbrella, an envelope, a music note — purely from memory — then your sketch is placed side by side with the reference and scored.

RULES & STATES
- 10 prompts per run from an embedded pool of 16 universal objects (bicycle, umbrella, envelope, music note, heart, anchor, key, scissors, teapot, snowflake, chess knight, padlock, magnet, hourglass, paper plane, wine glass), each with a clean reference drawing built from code.
- Draw phase exactly like the original: blank canvas, object name only, no peeking; a Done button locks the sketch.
- Reveal phase: your drawing and the reference side by side with a similarity score (compare normalized stroke coverage against the reference silhouette) and a dry one-line verdict.
- End: a grid of all 10 side-by-side pairs — inherently hilarious and highly shareable as the result card.
- Keep the original's clean worksheet look: off-white paper, pencil-grey strokes.

OPENING
Faithful to the original: open straight into the experience exactly like the original neal.fun page — no cover screen, no start button and no tutorial cards (unless the original itself has one). A small floating title chip may appear and dissolve on the first touch. Keep gentle ambient motion (drift, breathing, particles) so the first paint never looks frozen.

GLOBAL REQUIREMENTS
- Language: ship a lightweight built-in i18n layer with exactly two locales, English (en) and Chinese (zh). The app ALWAYS opens in English — never auto-detect or follow the system/browser language. Provide one small, comfortably tappable EN / 中文 toggle placed top-right, about 56px down from the top edge, clear of the device status bar. Chinese appears only after the user actively switches. All share output stays English regardless of locale. Never mix two languages on one screen.
- Fully self-contained: absolutely no external APIs of any kind — no AI calls, no third-party data, media or font services, no remote backend, no login. Embed all data and content in the app code.
- Real Share to the Eazo Community: on the result screen add a real Share button. Compose the result card as an image on a canvas and share it through the Eazo SDK community share (share.compose with the image attachment plus a short English text). Read the resolved { accepted } value: only when accepted is true may the button say "Sent to Eazo"; when accepted is false the button must read "Open in the Eazo app to share"; on error keep the original button. Never claim the post was shared on the plain web. Keep a Replay button next to Share.
- Mobile-first portrait, touch-only, no hover dependence. The app root must follow the host container height (position: fixed; inset: 0; height: 100%) — never 100dvh or 100svh. Size any canvas from its PARENT element using a ResizeObserver (run the fit once on mount), and convert every touch event through getBoundingClientRect() read at event time — never cache the rect and never use window.innerWidth/innerHeight for canvas sizing.
- Safe areas: keep all top UI at least 56px from the top edge. Keep every core interactive control (start button, submit, share, play controls) fully above the bottom 88px of the viewport — the Eazo mobile app overlays a native toolbar there that your code cannot detect.
- No background music and no autoplay audio.
- Complete real states: loading, empty, success, error where relevant. Every control must actually work — no alerts, console-log placeholders or fake results.
- Visual bar: rich, generous visual feedback on every touch (motion, particles, deformation, color, light) while keeping exactly ONE core rule understood within 3 seconds. Canvas 2D preferred for effects; do not use the canvas roundRect API (older iOS Safari lacks it). Never hardcode light text colors onto possibly-light backgrounds — derive text color from the theme.
THE ORIGINAL CREATION PROMPT

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

Play app ↗Open Eazo ↗