The yen formatter I shipped one round earlier became this round's biggest win
/transactionsCaptured 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
The yen formatter I shipped one round earlier became this round's biggest win
Build log series: I hand a real screen to an AI that has never seen Gunjo (
@gunjo/ui) and let it build. Banking screen three: account statements and transaction history (filtering by period, category, and amount, a running-balance column, CSV export, cards on mobile).
Going deep on banking under the several-screens-per-industry policy: #32 was the form layer, #33 the chart layer, and this round is the dense data table with filtering and export.
Result: 4.5/5 (the best banking score yet)
tsc and build passed, the console stayed clear, 375px switched the table to cards, the page had a single h1, and aria-sort was correct.
The star this round: the next agent found last round's yen formatting and used it
In #33 I found that number formatting around charts kept getting hand-rolled, and shipped formatCurrency, formatNumber, and formatPercent (issue #180). The very next round's agent discovered them immediately and adopted them across the screen:
formatCurrency,formatNumber, andformatPercentwere sitting right there in the package.formatCurrencydefaults to JPY andja-JP (¥1,234,567with zero setup) and supportssignedandcompact(which folds large amounts into the Japanese ten-thousand notation). The biggest single win on a banking screen: no hand-rolled yen formatting. The doc comment even says #32 and #33 hand-rolled this. I used it for everything, and it felt great.
Find the gap in #33, fill it, and in #34 a different agent finds the fill and names it the biggest win. The compounding loop at its ideal cadence: shipped one round, harvested the next. Beyond that, ToggleGroup disallowEmpty (issue #170) from #31 drove the segmented control (Deposits / Withdrawals / All), its third consecutive round of verification, and the DataTable accessibility (th scope, aria-sort, issue #123), Badge tones (issue #106), and EmptyState headingLevel (issue #104) got called out approvingly once more.
The new gaps sit in the data table's operational layer
- 🟠 DataTable has no width-responsive table-to-card mode (it locks
min-w-[720px], so mobile means horizontal scrolling). Statements get read on phones more than anywhere, and the agent hand-rolled a card version (issue #190, the biggest gap). - 🟠 DataTable filtering is single-column only, and the sort and filter state is private, so a filtered total cannot be computed (issue #126 reconfirmed; for multi-condition filtering the agent praised the separate
FilterButtonas the better tool). - 🟠 No CSV export (issue #189).
- 🔴
Statisticbreaks a value mid-digit (−¥1,055,9/60in a two-column mobile layout, issue #188).
What I fixed this round
Two source fixes shipped (PR #191):
-
toCsvanddownloadCsv (issue #189): BOM plus RFC 4180 quoting, published as a Utility, a runtime helper that needs no.pen(the design-source format). The thing every data, statement, and admin screen keeps hand-rolling. - The mid-digit line break in
Statistic (issue #188):overflow-wrap:anywherebecamebreak-words tabular-nums, and a browser check confirmed−¥1,055,960stays on one line even in a two-column 375px layout.
Table-to-card (issue #190, the biggest gap) and multi-condition filtering with public state (issue #126) stayed logged or reconfirmed. An honest correction: the agent wrote that the pagination labels are hard-coded in English, but goToPage and pageSummary do exist in DataTableLabels. It failed to find the label API. Misread, not a defect, and I will not inflate it.
What I took away
#33: find the yen-formatting gap and fill it (issue #180)
#34: the next agent finds the fill, adopts it everywhere, calls it the biggest win
A filled gap becomes the next round's strength. This time the turnaround took exactly one round. And within one bank, each layer change (form, chart, statement) keeps producing different gaps and different verifications.
Next up: build log #35
- One more banking screen (a loan review or a card statement), or an adjacent money-heavy industry (accounting, payroll).
The run
Gunjo was still in early alpha at the time; issues are welcome.
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.