Vibe coding · AI agents · Responsible product judgment

Road to El Salvador

An economic-literacy road trip built with Codex and Claude—and directed like a product, not a prompt dump.

I vibe-coded this with AI agents: Codex for implementation, testing, and visual inspection; Claude for event content. The skill I want judged is the direction layer—acceptance criteria, failure finding, evaluation design, and cutting anything the evidence could not support.

The public site is the Bitcoin Road Trip build. The still below is a 3-minute showcase screen, and that showcase is not what the live link opens.

Road to El Salvador three-minute showcase start panel over a desert highway.
A seeded three-minute showcase carries reviewers through the complete 2,800-mile product story.

01 · Evidence

Evidence

The public build serves 12 reviewed events and makes no model call by default. The evaluation is reproducible without secrets or API spend.

destinations
8
passing tests
107
line coverage
91.52%
evaluated event scenarios
50
An 81-second captioned walkthrough of the seeded showcase, from assumptions through arrival.

02 · Product frame

Problem and audience

Economic tradeoffs are often taught as slogans: one asset wins, another loses, and uncertainty disappears. I wanted a short experience for students and economically curious players that makes tradeoffs tangible without pretending to be a financial model or advice.

The game turns a 2,800-mile drive from Los Angeles to San Salvador into a sequence of decisions about fuel, repairs, liquidity, inflation, volatility, transaction fees, custody, and morale. The design goal is not to tell players what to buy. It is to make them notice what each choice protects—and what it risks.

03 · Experience

The experience

Players manage a worn SUV, a cash reserve, a Bitcoin position, vehicle health, and crew morale across eight destinations. City stops offer practical purchases and repairs. Contextual events introduce route-specific economic and travel decisions. An abstract roadside-risk drill tests attention without turning people or cultures into targets.

The three-minute showcase is seeded so a reviewer always sees driving, a city decision, an evaluated event, the risk drill, arrival, and the final scorecard. The standard mode keeps the longer variable run. At arrival, the score combines the real purchasing power of cash and Bitcoin rather than celebrating Bitcoin alone.

04 · AI disclosure

Vibe coding with Codex and Claude

This is how I work as a vibe coder: I set the product intent, then run AI agents hard against it. Codex helped implement, test, visually inspect, and iterate on the game and its portfolio materials. Claude produced or helped produce contextual event content. Public visitors receive reviewed event snapshots; optional live generation is disabled by default.

The agents moved fast. My job was the direction layer—audience, acceptance criteria, model boundaries, evaluation process, corrections, scope cuts, and final decisions. I treated every agent output as a proposal that had to survive evidence, not as finished authority.

05 · Corrections

What failed and how I corrected it

Visual testing at phone size exposed a broken HUD that a successful build did not reveal. I reorganized the information hierarchy and verified both 390×844 and 430×932 layouts with no horizontal overflow.

The original leaderboard looked like proof of replay value, but its storage was non-durable and its scores were not trustworthy. I removed the UI, storage path, API, and marketing claim instead of presenting a prototype as production infrastructure.

Claude’s event output originally had a loose boundary. I replaced it with one shared contract: exactly two choices, strict text limits, whitelisted effect names, bounded values, sanitized prompt state, and reviewed fallbacks for malformed output or unavailable service.

The original economy guaranteed Bitcoin appreciation while cash declined. I rebuilt it so Bitcoin can rise, stay near its start, or crash; cash conditions vary; and fees, custody, volatility, emergency reserves, and repairs all matter. The game now labels itself a fictional educational simulation, not financial advice.

I also removed human targets from the minigame. The finished scene uses abstract road, scam, fee, and custody risks.

06 · Evaluation

Evaluation results

The repository runs a deterministic 50-scenario event evaluation in CI. In the final offline report, all 50 scenarios produced a valid event after validation, every injected invalid effect was rejected, every timeout, malformed-output, or unavailable-API case returned a reviewed fallback, route relevance was 100%, near-duplicate headline pairs were 0%, and the automated safety scan found no flagged framing.

This is deliberately reported as 50 evaluated event scenarios, not 50 Claude outputs. No Anthropic API key was available for the final run, so live-model latency, token usage, cost, and output quality were not measured. The limitation is part of the result, not hidden in a footnote.

The wider release candidate passes 107 automated tests with 91.52% line coverage in the measured modules. The complete showcase was captured on desktop and verified at both target phone sizes.

Arrival scorecard comparing total real portfolio value, real cash, real Bitcoin, days, events, risks, and scenario.
The score measures total real purchasing power and labels the outcome as one scenario, not a prediction.

07 · Scope control

What I removed

I removed the leaderboard because it could not support trustworthy persistence or scores. I removed default live generation because a public portfolio should not burn credits or fail when a model is unavailable. I removed guaranteed asset outcomes because they undermined the educational claim. I removed human targets because the interaction did not justify its cultural and ethical cost.

Those decisions are the heart of the project: responsible AI product work often means narrowing the system until every visible claim can be defended.

08 · Operational limits

Handoff quality and operational limits

The public game is deterministic where a reviewer needs reliability and variable where the learning model needs uncertainty. Its event schema is shared by reviewed content, API responses, and fallbacks. The release commands regenerate tests, coverage, event results, screenshots, social art, and the demo video. A separate JSON file locks the portfolio facts so another project cannot silently invent stronger metrics.

The initial app bundle was cut from roughly 731 KB to 221 KB by separating Three.js. There is no account system, analytics pipeline, persistent player data, or leaderboard.

09 · Reflection

What I learned

I learned to treat agent output as a proposal. Visual evidence changed the interface. A trust review removed the leaderboard. Contract tests constrained model output. Product judgment changed the economy and the risk scene. A couple of friends have played it.