Taxi finally finished with six staff and six passenger screens
/taxi-corporateCaptured at a 375px viewport. Long pages scroll inside the frame.
The screenshots stay in Japanese. Every round is a real screen for a real Japanese industry, so an English re-render would no longer be the screen the agent actually produced.
Write-up
Taxi finally finished with six staff and six passenger screens
Build log series: I give an AI that has never seen Gunjo (
@gunjo/ui) only the public npm package and the gunjo.jp docs, then ask it to build a real screen. This sixth and final passenger-facing taxi round covered corporate rides and taxi tickets: personal or corporate mode, electronic tickets, trip purpose, expense policy, approval, and usage details. Taxi now has six staff and six passenger screens.
First, taxi was genuinely complete this time
In #147, the AI helping with implementation and drafting declared taxi complete after one passenger screen. I stopped it because one passenger screen could not balance six staff screens. Rounds #147 through #152 then produced six passenger screens, matching six staff screens for dispatch, drivers, revenue, fleet, complaints, and demand forecasting. Rail and air had comparable depth. Taxi could now be called complete.
Result: 3.5/5. The generic foundation covered about 70 percent, with a mediated-consumer layer missing
The screen passed tsc and fit a 375px mobile-first layout. The agent reported:
The mobile consumer backbone was strong.
PageHeader,BottomActionBar,RadioCard,ApprovalSteps,TicketStub,ExpiryBadge,ListCard, andAmountBreakdowncovered about 70 percent quickly and accessibly. But the three interactions specific to an employer-mediated consumer app (account switching, dispatch input, and a policy summary) were exactly the parts the agent had to hand-roll.
The core observation: no component for switching personal and corporate context
The clearest gap was a segmented, account, or profile switcher. Personal versus corporate, meaning self-pay versus expense and personal versus work, defines this whole class of app.
Switchrepresents a different binary meaning,Tabsswitches content and uses 36px triggers below the 44px target, andRadioCardis too tall. The agent hand-rolled a two-columnrole=radiogrid. This was the highest-value addition, and the catalog did not even recognize the need.
I opened issue #409 for SegmentedControl or AccountSwitcher, a single choice across two to four segments with targets at least 44px tall, effectively a mobile-oriented ToggleGroup. The same pattern had already been hand-rolled for departures and arrivals in #110 and #140, and refunds versus delay certificates in #129, so it had already exceeded three cases. I also noted a prepaid-balance slot on TicketStub for available amount, limit, and expiry, plus NavRow for an icon, label, and right-aligned chevron.
What I took away: completion means equal depth on both sides
Taxi clarified the meaning of a complete mode:
- Closing after six staff screens and one passenger screen was wrong.
- Staff and passenger coverage need comparable depth, here six and six.
The passenger side matters because it remains the weaker side, and the richer source of gaps. Six taxi staff screens produced no new missing component, while six passenger screens exposed or built BottomActionBar, RatingInput, SectionList, DateTimePicker, ApproachCard, ReferralCard, SegmentedControl, and more. Requiring symmetry forces the test into the weakest surface, where new evidence still appears. That was why I refused the early close in #147.
What it flagged
- ✅
ApprovalStepsfit consumer approval states from submitted through pending to approved or returned, and the catalog led to it correctly. - ✅
ExpiryBadgewas independently found for a ticket deadline, now crossing crew, assets, coupons, and tickets. - 🟡 The default
Buttonremained shorter than 44px unless raised tosize="xl", reconfirming issue #362.
Nothing new was added under src this round. The 3.5/5 completed taxi at equal depth and logged SegmentedControl and related mediated-consumer gaps.
📊 Component scoreboard (15 built)
Earlier components plus PageHeader / Itinerary / TicketStub / Stringline / StatusBoard / ExpiryBadge / BottomActionBar In progress: SegmentedControl beyond three cases, ReferralCard, RatingInput, SectionList, DateTimePicker, and NavRow.
📋 Mode progress: four modes complete
- ✈️ Air: five staff + six passenger screens ✅ / 🚆 Rail: five staff + six passenger screens ✅ / 🚕 Taxi: six staff + six passenger screens ✅
- 🚌 Bus: two staff + three passenger screens, still asymmetric / 🚚 Trucking: not started
Next up: build log #153
- Either deepen staff-facing bus to match rail, air, and taxi, or open trucking with staff and passenger screens.
The run
- gunjo.jp / ApprovalSteps / TicketStub / ExpiryBadge / npm
@gunjo/ui/ GitHub / previous rounds #1 through #151 - GunjoUI by UIXHERO
Taxi genuinely finished at six staff and six passenger screens. Equal depth forces the test into the weaker passenger side, where missing components still surface.
This series is co-created with AI (Claude and Codex). A human designs the experiments, makes the calls, and fact-checks before publishing; the AI does the hands-on work and drafting.
Components from @gunjo/ui
The components this screen's source imports directly.
The code the agent actually wrote
Click a file to expand its source.