A hunch about rail points gave LoyaltySummaryCard its second case
/rail-pointsCaptured 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
A hunch about rail points gave LoyaltySummaryCard its second case
Build log series: I give real briefs to an AI that has never used Gunjo (
@gunjo/ui) and provide only the public npm package and the gunjo.jp docs. This passenger-facing rail screen combined a mobile transit card with a points account for balance, points, usage history, and a commuter pass.
After the airline mileage screen in #116, I had a hunch that rail needed points too. This round followed that hunch, with one main question: would the agent hand-roll a loyalty summary for the second time?
Result: 3/5, and the hunch was right (LoyaltySummaryCard at two of three)
The large balance, points, and tier header became the second independent loyalty-summary case. The screen passed tsc, fit a mobile-first 375px layout, and produced no console errors across balance, top-up, points, usage history, and the commuter pass. The agent reported:
The large balance, points, and tier header was entirely hand-rolled, making it the biggest gap. Among more than 150 components, nothing covered loyalty, balance, wallet, tier, or membership, even after searching names and docstrings with grep. The table suggested
StatGroupandAnalyticsCard, but both are flat metric or trend displays with no balance, tier, or expiration. "LoyaltySummaryCardneeds a large balance, points, a tier badge, progress toward the next tier, an expiration warning, and a branded gradient. It was the only component built from scratch and the single largest addition."
Airline miles in #116 plus rail points in #117 put the pattern at two of three. My "rail needs points" hunch led directly to the second piece of evidence. One more case, such as retail loyalty or ecommerce points, would trigger the rule of three.
ListCard was also found immediately again. The agent called it purpose-built, a standard centerpiece, a one-to-one fit for travel, retail, and top-up history, and the library's best mobile component. The cross-industry foundation held across another transportation mode.
What I logged
- The second
LoyaltySummaryCardorTierCardcase went into issue #364. The large balance needs a dark gradient surface with brand color, the embeddedProgressmust remain legible on a dark background, and the slots are now clear: balance, points, tier, progress such as "850 points to Gold," expiration, and a primary action. - Brand tokens do not have Tailwind utilities. Raw HSL variables such as
--gunjo-*,--kobicha-*, and--dawn-*exist, but there is nobg-gunjo-deeper, so the agent had to writebg-[hsl(var(--gunjo-deeper))]without documentation. That is a concrete obstacle to warmth in consumer-facing screens, and I added it to issue #367. Any consumer app trying to use on-brand color hits this wall immediately. Bannerhas a fixedh-10and clips a longer expiration warning (issue #324).Progressassumes a light card, so its track needed an override on the dark header, and it has no gold tone.
No new component was added under src this round. The 3/5 result moved LoyaltySummaryCard to two of three and made it the next likely build.
What I took away: a user's hunch found the second case
When I saw #116, I thought rail probably needed points too. That was not just a reaction. It accurately predicted the second case for LoyaltySummaryCard, a foundation shared by airline miles, rail points, and retail loyalty. The cold-test loop still depends on separate agents independently hitting the same gap, but a person's sense that another industry will need the pattern can speed up the search for evidence. If a retail or ecommerce loyalty screen produces the third case, LoyaltySummaryCard should be built together with a dark gradient surface and Tailwind utilities for the brand tokens in issue #367. That would also give consumer screens a warmer visual option.
ListCard remained dependable on a rail transit account. The cross-industry consumer foundation in ListCard is now established, while mode-specific or broadly reusable pieces such as the completed SeatMap and the two-of-three LoyaltySummaryCard are the active edge.
Next up: build log #118
- I may test retail or ecommerce loyalty for a third
LoyaltySummaryCardcase, passenger-facing bus or taxi service for independentSeatMapdiscovery, or another rail passenger screen such as station navigation.
The run
- gunjo.jp / ListCard / the by-use-case table /docs/by-use-case / npm
@gunjo/ui/ GitHub / previous rounds #1 through #116 - GunjoUI by UIXHERO
My "rail needs points" hunch identified the next component candidate. It moved LoyaltySummaryCard to two of three. The second case came from a rail transit account.
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.