Round 3 · Where Did It Go · 26 September 2026

Both got every number right. The newcomer shipped at minute 14.

Round 3 was the one round where the numbers on screen are checked as facts: a personal spending dashboard over a 53-row transaction dataset, with a total that is only right if the single refund is subtracted, a spend-over-time view, a category breakdown, and a filterable list where filters move the visuals too. Two entries. One of them from someone who joined this week.

22
seats claimed
7
opened the task
2
submitted
0
wrong numbers

Result

#EntrantToolSeasonEntry
1@P1s0Claude1166 · 2-1open the app
2@BingBangBoomChatGPT-6 Sol1001 · 0-1open the app

Both entries passed all five items of the functional checklist, and the checklist this round was an answer key: 53 rows loaded, a total of exactly $1,951.15, Shopping the largest category at $692.20, July the peak month at $580.61, and a filter that moves the visuals. Both hit every figure. Neither fell into the two traps we had named in advance, the refund counted as spend ($2,020.15) or dropped ($1,985.65). No network violations, no injection attempts. One head to head, and @P1s0 won it, close.

The season table moved for someone who did not play. @schwarzkopfb went from 1100 to 1133 without entering Round 3. That is not a bug. The rating is a fit over every comparison at once: @P1s0 beating a third person is evidence that @P1s0 is strong, which makes @schwarzkopfb's Round 2 win over @P1s0 worth more than it was. This is the difference between a rating and a points table, and it is why a missed round costs nothing but the chance to gain.

The judge's verdict, verbatim

The judge loaded the sample in both apps, checked every figure against the key, pasted its own three-row CSV and a line of garbage into each, cross-filtered by category and month, and looked for anything beyond the four required views. A is @P1s0, B is @BingBangBoom. This is the full text.

Functional depth (40%) · A
Both hit the exact answer key (1,951.15 total; Shopping 692.20; July 580.61 peak) and both cross-filter correctly (Shopping+July = 146.96 in each), but A additionally decomposes the total as '$1,985.65 spent, $34.50 refunded' and ships a working recurring-charge detector (CloudBox 9.99, NewsDaily 7.99, Streamly 12.99, FitClub 35.00, '4 months in a row', $66.97/mo, $803.64/yr), the planted insight B never surfaces.
UX & polish (25%) · B
B's filter bar (search, category, merchant, date from/to, purchases-vs-refunds toggle, month chips, sort) plus removable 'Category: Shopping ×' chips and a line-numbered paste modal with live row validation are slightly slicker than A's search + month select + category chips, though B clipped the '$20.00' point label at the chart's right edge.
Robustness (20%) · tie
On 'hello\n1,2' mixed into valid rows, A skipped the bad lines and explained why ('Line 4: needs 4 columns, found 1. hello', header badge '2 skipped') while B refused the import with 'Row 4: expected four columns.' and left the dashboard intact. No NaN, freeze, or blank screen in either.
Ambition (15%) · A
A's recurring-payments panel with per-charge streak counts and monthly/annual run-rate projection, plus 'Month vs. average' and 'Charges under $15: $159.34', is one deep data-aware extra; B's extras (filtered CSV export view, merchant/date/type filters) are broader but shallower.
Overall · A, close
Both apps are numerically honest: each reported exactly $1,951.15 on the sample (neither the 2,020.15 nor 1,985.65 trap), both showed the StyleHub 2026-07-19 row as a signed, colour-coded, labelled refund, and both returned $26.00 on my three-row paste while replacing rather than appending the sample. Cross-filtering worked in both and updated every visual. Clicking Shopping then July gave 146.96 with StyleHub netted to 27.41 in each. The separator is probe 6: A detects the planted recurring subscriptions (CloudBox 9.99, NewsDaily 7.99, Streamly 12.99, and FitClub 35.00) with streak counts and a $66.97/month, $803.64/year run-rate, and also splits the headline total into spent vs refunded; B stops at top merchants and offers no recurring, month-over-month, or refund-share insight. B is the more polished filtering shell, merchant dropdown, date range, refunds-only toggle, removable filter chips, an export view, and a paste modal that flags bad rows as you type, and I give it ux_polish, but breadth of controls does not outweigh the deeper reading of the data. Robustness was a wash: A skips invalid lines with per-line reasons, B blocks the import with a row-specific message; neither produced NaN or a frozen page, and both kept 53 rows usable (A full inline list, B an internal scroll region).

The dataset had a planted insight: three merchants bill the same amount every month. We put it there to see whether anyone would read the data rather than render it. One entry did, and that decided the round.

How the winner got there

@P1s0's session ran twelve prompts in Claude, and for the third round in a row nothing was built for the first fifty minutes. What changed this time is what the setup was about. Prompts are quoted as typed.

prompt 1
lets review the requirement [pasted the task]
The opening move all three rounds. The reply listed what the judge would check and, unprompted, flagged the two things that trip dashboards up: the refund sign and month buckets derived from the data rather than hardcoded.
prompt 2
help me visualize the end goal. bank of america has similar charts. lets review the chart requirement and brainstorm ideas
A reference point from real life before any design. The model drew a mockup with the real sample numbers in it.
prompt 3
can do. also recurring detection, top merchant. how can improve what other banks doing. Lets do a wide search of complaint about similar services, and also a research how to track money better. Then list how it can be built in to my project
This is the prompt that won the round. "Recurring detection" is named here, by the human, before the AI suggested it, and the research pass produced a numbered list of nine things people want from a spending view.
prompt 4
1-7, and 9. Now lets plan how to build it. What's the main focus. Once its planned, review requirement again. Summarize in a table which is fulfilled and how to achieve it. Add the extras we talked about to the table
Scope chosen in four characters, then the plan, then the plan checked against the brief. Same shape as Rounds 1 and 2.
prompt 5
Lets focus more on the numbers. What other way we can make sure no digits lost ?
The brief said numbers would be checked as facts, and this prompt takes that seriously. The answer was integer cents instead of floating point, a strict parser, and one source of truth for every figure on screen.
prompt 6
need a better solution for this than a red warning. the user should will not know about the code warning. User needs the end item that fully functional
The model had proposed a self-check that shows a warning when totals disagree. Rejected, on the grounds that a user cannot act on a code warning. Thinking as the person using it, not the person building it.
prompt 7
Is it overcomplicated feature in the background?
And then the opposite check: is the safety machinery too much? The reply cut half of it. "Accuracy should come from the structure, not from layers of checks on top."
prompt 9
"must also accept the same kind of data pasted in as CSV" is that possible?
Reading the brief one more time and asking about the one requirement not yet discussed. The reply added tab-separated support because spreadsheets paste tabs, which is the kind of thing you only find by asking.
prompt 10 · about 50 minutes in
ok. Lets build it now
One prompt. The file arrived tested against the answer key. Submitted at 15:58 with 32 minutes to spare, after the Round 2 lesson about the clock. The paste path was then tested by hand with the full dataset, and the requirement reviewed a last time.

What the runner-up did

@BingBangBoom joined the ladder this week and played the round the way the Round 2 write-up said to. The first prompt set the terms: "I'm the product decision-maker and browser tester; you're my coding and UX partner." The task went in, the data went in, and a first version was submitted at 15:14 with 75 minutes still on the clock. Then an hour of using it: a date picker that let you pick dates outside the data, a hand-written CSV with deliberate errors to see what the error messages said ("can we make it clearer"), a paste box too narrow to find the bad row in, duplicate rows imported without a word, a merchant filter you could enter but not leave, time checks at 38 and 23 minutes left, a refunds-only filter as the last addition. Twenty-seven prompts, and the final version was resubmitted at 16:21.

That produced the best-polished entry of the season by the judge's own account, and it lost by a small margin to one thing it never did: ask what the data might be hiding. The dashboard rendered everything correctly and told the user nothing they could not already see. First round, though, and 1001 is one comparison away from anywhere.

What we learned

The numbers were never the problem. We built the round expecting arithmetic mistakes, refunds absolutized, floating point drift, and named the traps in advance. Both entries got every figure right to the cent. The current tools handle the mechanics. What separated the entries was whether the human asked a question the brief did not: what is interesting in here?

Submit early, then iterate, works. One week after we wrote that down, a first-time entrant did it and finished a close second with the most polished app of the season. The other entrant submitted with half an hour to spare instead of ninety seconds. Nobody lost to the clock this round.

Round 4 on 3 October is the finale. @P1s0 leads at 1166. @schwarzkopfb at 1133 takes the season with a win over her and loses it by sitting out. Two of twenty-two entered this week, seven opened the task. Same ratio as every round, still printed.

Get in line for Round 4 · Saturday Oct 3 Leaderboard Round 2 write-up