← All examples

02 / A small game

Memory Match

Turn over two tiles. Remember what you saw. Find all six pairs at your own pace.

Play now ↓

Your first minute

  1. Choose two cards to see their symbols.
  2. A match stays visible. A mismatch turns back after one second.
  3. Find six pairs, then reset for a new shuffle.

Small on purpose

One six-pair board. No saved progress or difficulty settings.

The app needs JavaScript. There is no account or server connection.

Open it. Run it. Change it.

A whole little project.

Source, focused tests, build scripts and a README. MIT licensed. Nothing depends on a private repository.

AFTER EXTRACTING THE SOURCE ZIP

cd memory-match
bun install --frozen-lockfile
bun run test
bun run typecheck
bun run build
bun run start

Install Bun first. Setup downloads the pinned development compiler; the built app runs locally. Read the README for its local URL.

Verify the download hashes

Compare SHA-256 with shasum -a 256 filename.

Source ZIP
08bee0813af534cae17675f6f36cddd09cc1e6fde511cd20b0467db00abea262
Git bundle
2d08b0ea54842de82fdb92911a82704e5904c8328ecb2ca6853e972cb303f0bd

The build story

From an idea
to something you can use.

The app needs to know when it is waiting, so a third click cannot break a pair.

  1. 01

    PRODUCT · INTENT

    Say what should happen.

    A person approved five small examples that visitors can try, download and learn from. HI keeps the agreed intent in plain sentences.

  2. 02

    DESIGN · EXPERIENCE

    Make the idea visible.

    The gallery and five visual directions were reviewed before implementation. The approved design pairs a clear first action with a usable mobile layout.

  3. 03

    DEVELOPMENT · PLAN & BUILD

    Agree on the rules, then build.

    A card cannot match itself. A third choice waits until a mismatch has turned back.

    SpecSync records the contract. A Sol coding agent writes the implementation in an assigned directory. chough records the stage and handoff.

  4. 04

    QA · TEST & REPAIR

    Check what actually happens.

    Tests were written against explicit unimplemented functions first. That failure is a development starting point, not a regression in a working app. Fledge runs the real tests again after implementation.

    9 behavioral tests / 84 assertions passed. An independent agent freshly extracted this source ZIP, installed its pinned dependencies, and passed the documented tests, strict source typecheck and build. Browser interaction was checked separately by the coordinator.

    Browser interaction, accessibility and fresh source extraction are checked separately. A structural SpecSync pass alone cannot prove those behaviors.

  5. 05

    EVERYONE · ACCEPT & RELEASE

    Review the result together.

    The project owner approved the design, scope and finished implementation (site revision d1ad28a3). Merge, publication and deployment are separate decisions.

The actual trail

Read the commits.

This is a project-only export of real development history. Filtering removes unrelated workspace files and redacts author email addresses, so these public commit IDs differ from the originals. Commit times describe saved revisions, not hours of agent effort. The saved Git name is the workspace identity; it does not establish human authorship or review.

  1. 7748a960d
    test(examples): add failing behavioral tests before app implementation
  2. 44f29346d
    feat(examples): implement five standalone browser games and apps
Open the Git history on your machine
git clone memory-match.bundle memory-match-history
cd memory-match-history
git log --oneline
git show HEAD

The history retains the apps/memory-match/ project path. The source ZIP starts directly at the project root. No private remote is needed.

A closer look.

Memory Match running in the browser
Actual browser capture · One card revealed by pointer on independently extracted source build. Source and capture identity are recorded in the verification package.

Make your own small thing

What would you change?

Start with one sentence about what you want. Keep the change small enough to try, explain and check.

Meet the workflow ↗Try another example →