← All projects

Personal projectPrototype

WikiRivals

A little curiosity. Five cards. Something unexpected.

The WikiRivals prototype landing page with Collect the world, a daily pack invitation, and a fan of gold-trimmed card backs.
The daily pack experience

The design principle

A reveal can restart. Ownership stays.

Cards are committed on the server before the animation. Refreshing or retrying recovers the same opening without consuming another entitlement. Implemented as a prototype.

The short version

The idea
Turn Wikipedia articles into collectible cards, so a pack can introduce a person, place, or topic the player would never have searched for. Guest-first access lets anyone try it before creating an account.
What I built
A prototype with five-card starter and daily packs, six rarity tiers, serial numbers, and a searchable collection. Impact and Depth stats come from article signals using versioned, deterministic rules.
The WikiRivals prototype landing page with Collect the world, a daily pack invitation, and a fan of gold-trimmed card backs.
The invitation to discover something new

The landing page introduces the daily five-card discovery loop (captured from the running prototype, September 24, 2026).

Screenshot viewer. Choose Actual size, then use the arrow keys or Page Up and Page Down to inspect the image.

The invitation to discover something new

Open original (opens in a new tab)Fitted to your screen.
Screenshot source & context

The landing page introduces the daily five-card discovery loop (captured from the running prototype, September 24, 2026).

A playful reveal with durable ownership

Cards are allocated on the server before the animation completes. The browser presents that committed result, tracks opening phases, and restores revealed-card progress after interruption.

The reveal can respond to reduced-motion preferences, pause effects when the page is hidden, and announce cards to screen readers. Recovery and accessibility are part of the interaction design.

Retries return the same pack

A connection can fail after the server has assigned the cards. To make that recoverable, one database transaction locks the player and pack entitlement, checks whether the request already succeeded, assigns cards and serial numbers, and records the result.

Retrying the same request recovers that opening. Refreshing the page should not consume another entitlement or change the cards.

The result exists before the reveal
  1. CheckLock the player and entitlement
  2. CommitAllocate cards and record ownership
  3. RevealPresent or resume the saved opening

Presentation can be interrupted. Ownership must remain consistent.

Prepare the data before the player arrives

A background worker ingests and prepares Wikimedia data ahead of time. The API serves the prepared catalog, so opening a pack does not require a fresh Wikipedia request or an AI-generated result.

That separation gives scoring and rarity a reproducible basis, and keeps external-data preparation out of the interactive opening path.

Decisions & evidence

What this prototype explores

Discovery through collecting

Guest sessions, staged reveals, first-discovery markers, and a searchable collection connect the excitement of a new pack to learning about a real topic.

A recoverable experience

Opening progress is separate from durable ownership. A refresh can resume a committed opening instead of turning an animation failure into a lost pack.

Status & scope

Prototype

This page describes the implemented collecting and discovery experience. It does not claim a broad public release, a live catalog size, measured latency, trading, battles, or a marketplace. Playtest and retention results are not yet presented.

Product status: prototype.

Let's
talk.

Looking for someone who can build the whole thing?

Software engineering, applied AI, and thoughtful product work. I'd like to hear what you're building.