Round #152Score 3.5/5Transport: taxi

Taxi finally finished with six staff and six passenger screens

Route: /taxi-corporate
Desktop preview
Mobile preview

Captured 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 , 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 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, and AmountBreakdown covered 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. Switch represents a different binary meaning, Tabs switches content and uses 36px triggers below the 44px target, and RadioCard is too tall. The agent hand-rolled a two-column role=radio grid. ⁠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 and , and refunds versus delay certificates in , 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 .

What it flagged

  • ApprovalSteps fit consumer approval states from submitted through pending to approved or returned, and the catalog led to it correctly.
  • ExpiryBadge was independently found for a ticket deadline, now crossing crew, assets, coupons, and tickets.
  • 🟡 The default Button remained shorter than 44px unless raised to size="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

  • Either deepen staff-facing bus to match rail, air, and taxi, or open trucking with staff and passenger screens.

The run

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.

業界別「AI指示書パック」、先行登録を受付中です。