Lab note #2

MultiPass Rank: building a passport combination calculator

A pragmatic passport-ranking tool rebuilt with Codex around combined access, shareable URLs, mobile tables, and an evidence matrix that shows what is not yet proved.

View on GitHub Read the build notes
MultiPass Rank cover with two overlapping passport shapes and the words Passport ranks, combined
One ranking model for individual passports and passport sets, backed by a 199-by-227 destination matrix.

A normal passport index answers one tidy question: how many destinations can this passport reach? The more useful question for someone with two citizenships—or considering another one—is messier: what does the set cover, where does it rank, and exactly which destinations change?

The idea

Rank the set, then show your work

MultiPass Rank began as a replacement for a small passport calculator with useful mechanics and an interface that obscured them. The rewrite kept only the central premise: select several passports, take the easiest available access for every destination, and place that combined result beside individual passports.

“Show passport ranks and calculation of combined ranks—multiple passport selection.”

From the first project prompt to Codex

The product stayed deliberately non-commercial. There is no account, lead form, analytics script, or invented lifestyle score. A result is a score, a dense rank, and a destination table grouped by region. Every view has a copyable URL; the important ones also have a Markdown twin for readers and AI companions that need current structured context.

The build loop

A rewrite became a long sequence of visible corrections

  1. 1

    Make combinations first-class

    The original calculator stopped at a combined score. The new model can insert one or more passport sets into the global ranking, compare single and combined choices side by side, and link directly between the ranking and comparison views.

  2. 2

    Treat the URL as an interface

    /rank?set=PT,US ranks a Portuguese–American set; /compare?set=PT,US&set=SG compares it with Singapore. Adding .md before the query string returns a text-first version. Stable passport, destination, region, and relationship URLs make the same model usable without the interactive client.

  3. 3

    Debug the actual phone screenshots

    Tight passport names, accidental navigation near selection buttons, tables that scrolled their headers but not their cells, and controls that jumped after the first selection all appeared in real mobile captures. Each report became a narrow layout or interaction fix instead of a general redesign.

  4. 4

    Separate a status from its proof

    A 44,974-cell matrix can look authoritative long before it is. The project added policy-level evidence records, source dates, exact research queues, independent review, and a public status matrix. Unsupported pages remain usable as placeholders but stay out of search indexes.

Under the hood

Small interactive islands over one versioned dataset

Interface

  • Astro SSR for indexable HTML and Markdown routes
  • React islands only for pickers, filters, ranking, and comparison
  • Inline critical CSS and local fonts for fast first render

Data

  • Cloudflare Workers KV for atomic versioned snapshots
  • One sync Worker for staged normalization and corrections
  • Exact set cover for two-, three-, and minimum-passport experiments

Evidence

  • Official primary sources grouped into reusable policies
  • Exact candidate packets with supported, conflicting, or unresolved terminals
  • Independent replay before a claim enters the public dataset
Working with Codex

Persistence mattered more than the first implementation

The session ran through chatcode.dev over several days. That continuity mattered because the work kept changing scale: a visual rewrite became a responsive interaction pass, then an SEO and URL design exercise, then a source-verification program with thousands of terminal cells.

  • Give the agent the screenshot. “The table is broken” leaves room for imagination; a capture showing a frozen region column and invisible results does not.
  • Turn combinations into invariants. One passport must equal its individual score, the easiest status must win per destination, and a stronger inserted set must shift every lower dense rank.
  • Partition research exactly. Parallel agents receive disjoint passport–destination cells and must return every one as supported, conflicting, or unresolved—never silently omitted.
  • Let the reviewer say no. A live portal, an old decree, or a nationality missing from a positive list can look persuasive. The evidence gate rejects them when current force, scope, or actual issuance timing is not explicit.
  • Keep uncertainty visible. The public status matrix and unindexed placeholders make incompleteness a product state rather than a private spreadsheet problem.
Try the experiment

The live tool needs no account

Start with the global ranking, compare Portugal and the United States, or inspect the evidence matrix. The AI guide documents URL and Markdown conventions without requiring a private API key.

shell
git clone https://github.com/chatcode-lab/multipass.git
cd multipass
npm install
npm run dev
A closer look

The same idea at two depths

Source, releases, documentation, and the full prompt-to-commit history are in github.com/chatcode-lab/multipass.

Share this note