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?
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.
A rewrite became a long sequence of visible corrections
-
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
Treat the URL as an interface
/rank?set=PT,USranks a Portuguese–American set;/compare?set=PT,US&set=SGcompares it with Singapore. Adding.mdbefore 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
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
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.
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
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.
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.
git clone https://github.com/chatcode-lab/multipass.git
cd multipass
npm install
npm run dev