Asapi
The Lay Coder / Tasks / A refinance app with a WhatsApp assistant

Business operations · Task 2 of 7

A refinance app with a WhatsApp assistant

Build a working app for a home-loan agent who is not technical and answers nothing, including an assistant that answers his customers on WhatsApp while he is at his day job.

Setting
Home-loan agent, his laptop
Deliverable
A web app that starts with one command, and a short note for its owner
Unstated requirementsData qualityMessy documents
8
Models
ran the standard setup
68%
Best score
Sonnet 5.5
58%
Median score
across those models
19 min
Typical run
median time, standard setup

The task

A man in Malaysia brings home-loan customers to two banks on the side while he works a day job. He asks for "a web app for it, something that actually works for me", says he is not an IT person and cannot answer questions, and leaves his laptop: a client spreadsheet, the banks' agreements and rate sheets, customers' documents, his chats, emails, notes, and the docs of a WhatsApp business service and two property-price services.

The prompt only asks for an app and a short note. The real test is everything an experienced developer would build for him unprompted: an assistant that answers customers and follows them up at a pace they accept, a screen of each case against its own bank's rules, forgery checks that leave genuine messy documents alone, forms that keep what is typed, and an app that survives restarts, damaged backups and a forgotten password. The grader runs the app for five days of in-app time while scripted customers write to it.

What it tests

Working out the unstated needs

Almost every requirement shows up only as a problem someone in his files has already lived through, or is what a professional builds by default.

Telling bad documents from messy ones

The app must flag forged statements and payslips without flagging genuine ones that are photographed, scanned, locked or in another language.

Reading messy evidence

Each bank's rules and his customers' habits sit in chat exports, emails, a spreadsheet and vendor docs.

Shipping something that really works

The app is run, not read: a feature that is only described in the note does not count.

Challenges

1Answering without pestering

Leads give up when nobody answers all day, but customers complain when they are chased too often, and the assistant must never promise a loan.

2Each bank's own rules

The banks judge affordability and credit differently, and what they accept shows only in past decisions.

3Forged against messy

New documents arrive at grading, some forged in ways a bank's fraud desk would catch and some genuine but awkward.

4Outside services

A free price service with limits and a change of format, a paid one, and a messaging service that can deliver a message twice.

5Data that must survive

Restarts, a damaged backup, a move to another computer and a forgotten password must lose nothing.

6Unusual but normal input and attacks

Odd names, foreign numbers, double clicks, large uploads, and the usual web attacks.

Results

0%25%50%75%100%StandardHintedTold everythingSonnet 5.5Fable 5.1GPT-6.1 SolGPT-6 AstraOpus 5Sonnet 5Opus 5.5GPT-6 Luna
ModelStandardHintedTold everythingTime (standard)Cost (standard)
Sonnet 5.568%60%90%18 min$3.54
Fable 5.160%15%89%21 min$8.69
GPT-6.1 Sol59%71%78%9 min$0.33
GPT-6 Astra58%65%86%21 min$5.84
Opus 557%19%87%31 min$10.11
Sonnet 528%55%58%9 min$1.37
Opus 5.528%76%91%28 min$7.05
GPT-6 Luna9%11%46%7 min$8.13

One run per model and setup. 100% = everything right (or, for a plan scored in money, the best plan); 0% = the obvious answer or worse.

Setups: Standard, the job as asked; Hinted, plus one hint; Told everything, every rule or fact given up front: the control that shows the task is fair.

What models got right and wrong

Test environment

Kind
Simulated small business: Daniel's laptop as a folder of real files; the deliverable is working code, graded by running it
Agent's interface
A terminal in a fresh Docker container (Debian, Python 3.13 with pip, PyMuPDF, pdfplumber, Pillow, Playwright + Chromium; ghostscript and tesseract; SQLite; Node 22; internet on for packages), driven by the agent's own command-line tool: Claude Code or Codex CLI
Documents
57 files read-only at /home/user/daniel/: the client tracker (Clients.xlsx, 18 clients), two bank agreements, two rate sheets and a checklist (PDF), customers' past documents (text PDFs, one phone photo, one image-only scan, one password-locked e-statement, one re-saved PDF, one rejected forgery pair), 20 WhatsApp chat exports, 12 emails (.eml), a calendar (.ics), a notes file, and three vendors' API docs (WhatsApp Business sandbox, PropertyPrice, ValuPro). No template site
Applications
Three mock outside services run in the container, as the vendor docs on the laptop describe: a WhatsApp Business sandbox for Daniel's business number (port 9100), PropertyPrice (port 9200, free tier with a rate limit) and ValuPro (port 9300, paid per report). There is no office suite and no mail or chat client; the agent builds the app
Web
None. The internet is on for packages only; the agents' own web search and fetch tools are off
People
Nobody answers. Daniel answers nothing; other people exist only in his chat history. At grading, scripted customers write to the WhatsApp sandbox
Time
Fixed: Monday 1 March 2027, 9 am. At grading the app's clock reads that date (libfaketime offset) and ticks on
Actions
Read Daniel's files; write and run code in the workspace; nothing outside the container
Deliverable
output/app/ with output/app/start.sh (serves on port 8080) and output/NOTE.md for Daniel
All 7 tasks