Round #34Score 4.5/5Finance

The yen formatter I shipped one round earlier became this round's biggest win

Route: /transactions
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

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: was the form layer, 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 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, and formatPercent were sitting right there in the package.⁠ formatCurrency defaults to ⁠JPY and ja-JP (¥1,234,567 with zero setup) and supports signed and compact (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 and hand-rolled this. I used it for everything, and it felt great.⁠

⁠Find the gap in , 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 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 FilterButton as the better tool).
  • 🟠 ⁠No CSV export⁠ (issue #189).
  • 🔴 Statistic breaks a value mid-digit⁠ (−¥1,055,9 / 60 in a two-column mobile layout, issue #188).

What I fixed this round

Two source fixes shipped (PR #191):

  • toCsv and downloadCsv (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:anywhere became break-words tabular-nums, and ⁠a browser check confirmed −¥1,055,960 stays 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

  • ⁠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.

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