AI Case · Home-screen personalisation

Design case · Stand-in domain · Not deployed

Keep the LLM Off the Request Path

LLM cost stays near $11 a month at 1,000 or 20,000 daily users, against up to $15,300 for an LLM on every request (estimates). The home screen never waits on a model, and the ML hire waits until traffic justifies it.

Read the case
  • Stage 1Cold start
  • Stage 2Rule deepening
  • Stage 3Learned ranking
0model calls per request
$11LLM a month, est.
$15,300LLM per request, 20k users, est.
3stages, each feeding the next

The setting is a stand-in. The original is confidential client work. The domain, values and costs here belong to the stand-in.

Summary

LLM cost stays flat as traffic grows: about $11 a month at 1,000 or 20,000 daily users, against $765 and $15,300 for an LLM on every request.

Three other gains come with the design. The home screen never waits on a model, every ranking can be replayed exactly, and the logs are ready for training from day one.

Hiring is staged, too. Stage 2 gives the largest jump in personalisation for $6 more a month. The ML engineer a learned ranker needs waits until traffic justifies it.

How: the LLM runs only as offline batch jobs, tagging listings and drafting rules behind a human-in-the-loop approval gate. Costs are estimates. The design is not deployed, so there are no live metrics.

The First Draft Oversold Itself

An LLM on every request would have fixed the name, not the design.

The brief asked for LLM-driven personalisation. My first draft was a nightly batch re-ranked by one set of hand-written rules — the same for every user, with nothing for new users.

A model call per request would grow cost with every app open, make the home screen wait, and rank the same request differently twice. So the LLM stayed, off the request path.

The Setting

A used-car marketplace in Singapore, where every listing is one car and it sells.

  1. Signals must outlive the listing.Each car sells once, so listing-level collaborative filtering never warms up.
  2. Users come back often.Browsing, shortlists, saved searches and price alerts are the cheapest personalisation input.
  3. Trade-in quotes hint at budget.They also carry identity data that should not be kept.

Singapore adds the COE category, COE months remaining, annual depreciation and deregistration value — features in their own right.

One Home Request

Every signal is stored against the car’s segment, so it survives the sale.

The segment is make, model, variant, registration-year band and COE-remaining band. The trade-in lookup keeps only a budget band, body type and COE-expiry bucket. The plate number is dropped.

Filters run before scoring, so a sold car never takes a slot. Shared weights are scaled by each user’s filter habits — 1.6× on value for the user below.

Every response logs what was shown and why. The later stages learn from that log.

A Worked Request

Stage 2, weekday lunch: a Civic driver who filters by depreciation and price. Illustrative values.

  1. Honda Vezel Hybrid stays first.It arrived through the trade-in path.
  2. Toyota Corolla Altis closes in.Low depreciation matters to this user, so the gap to first narrows from 0.0231 to 0.0145.
  3. Mazda 3 Hatchback drops to third.Shown twice today without a tap, so fatigue pulls it down.

Where the LLM Works

Three jobs, none on the request path.

  1. Per new listing: tagging.A small model tags free text against a fixed dictionary, and a script rejects anything outside it.
  2. Nightly: aggregation.No LLM.
  3. Weekly: rule drafts.A larger model reads aggregates, never raw logs. A schema validator and an offline replay evaluation check each draft. An approval gate releases a policy set, and a multi-armed bandit allocates daily traffic within it.

The model proposes. Scripts check. People decide.

Fig. 01

Where the Model Sits.

Where the model sits The model works offline: it tags new listings, aggregates nightly and drafts rules weekly. Every rule change passes a human-in-the-loop approval gate. The home request reads only what is already stored and makes no model call. Offline · model here Tags new listings Aggregates nightly Drafts rules weekly Approval gate Home request reads only what is already stored 01 Pick candidates 02 Filter, then score 03 Show and log No model call Where the model sits The model runs offline behind a human approval gate. The home request reads only stored data and makes no model call. Offline · model here Tags new listings Aggregates nightly Drafts rules weekly Approval gate Home request reads only what is stored 01 Pick candidates 02 Filter, then score 03 Show and log No model call

The model runs as an offline batch job behind a human-in-the-loop approval gate. The home request reads only what is already stored.

Three Stages

Each stage produces the data the next one needs.

Stage 1Cold StartL1 · about $111 a monthLogs fairly from day one.
Stage 2Rule DeepeningL2 · about $117 a monthPer-user weights, approved weekly. The biggest jump, for $6 more.
Stage 3Learned RankingL3 · about $180 a monthLearned weights, with rules as the fallback. Only if the traffic comes.
Offline · every stageBatch LLM tagging and rule drafting, gated by human-in-the-loop approval.
Cloud cost at 1,000 daily users, estimated.

The Real Cost Is People

Moving to the next stage is a staffing decision.

Staff cost more than the cloud. Stage 1 needs 20–30% of one person’s time, Stage 2 adds 30–50% of an analyst, and Stage 3 adds half to one full-time ML engineer. All assumed. The stage costs above are cloud bills at 1,000 daily users, estimated.

What It Saves

The argument is the slope: cost follows new listings, not traffic.

Money Is the Smaller Saving

The bigger gains are not money. The home screen never waits on a model, every ranking can be replayed exactly, and the logs are shaped for training from day one.

Fig. 02

Cost Follows Listings, Not App Opens.

Monthly LLM cost by daily users Estimated monthly LLM cost. The offline design stays at 11 dollars at 1,000 and 20,000 daily users. An LLM on every request costs 765 and 15,300 dollars. 1,000 daily users $11offline design $765LLM on every request 20,000 daily users $11offline design $15,300LLM on every request Monthly LLM cost by daily users Offline design: 11 dollars at both traffic levels. LLM on every request: 765 and 15,300 dollars. Offline Every request 1,000 daily users $11 $765 20,000 daily users $11 $15,300

Monthly LLM cost, estimated from public list prices, September 2026. Tagging 8,000 new listings a month is $9 of the $11.

What Would Prove This Wrong

Three things would break it.

  1. Segments too fine.If most segments see a handful of events a week, co-interaction is noise. A coarser segment is the fallback.
  2. Tags too weak.If LLM tags disagree with a human reading of a sample, new-listing cold start fails first.
  3. Too little traffic.At 1,000 daily users, telling policies apart may take over a week. A minimum traffic share keeps each option alive.

Personalisation, Measured

A share, not a label: home requests served from personal candidates rather than the fallback. Every snapshot records which, so the number comes for free.

The levels are my own scale: L1 is context and segment, L2 individual inputs on shared weights, L3 weights learned from data.

Assumptions and Sources

Costs are estimates. AWS Asia Pacific (Singapore) on-demand and Claude API list prices, September 2026, with the batch discount for offline jobs. 8,000 new listings a month with 20% re-tagged, 5 home requests per daily user and twelve weekly draft calls. Load balancer, data transfer, monitoring, backups, failover, non-production environments and staff time are not included.

Sources. COE and bidding (LTA), PARF and deregistration value (LTA OneMotoring), loan-to-value limits (MAS). Unique-inventory cold start draws on published eBay, FINN.no, OLX and Airbnb work.

Everything else — weights, bands, thresholds, token counts — is an assumption, not a measurement.

That is one system, designed and costed before a line of code. The rest of my AI work is on the AI page.

Notice — Any screen shown here as a recreation was rebuilt from scratch for this portfolio using fictional data. No client-owned screens, source files or confidential material were used. Publicly published material is credited on the card that shows it. Recreations produced 19 Aug 2026; working files retained. This case is a design worked on paper. It began in confidential client work, so it is set in an unrelated stand-in domain. Values are illustrative and costs are estimates from public list prices.

© 2026 Jiwon Nam · South Korea