Case study

Fair Go Finds: is that discount real?

An Australian deals site where members post, vote and comment, and each deal can get a verdict from its own price history on whether the discount is real. It's being readied for the Black Friday sales.

Start a projectVisit fairgofinds.au
Started
15 October 2026
Changes merged
More than 250, by 30 October 2026
Automated tests
1,447, all passing on 30 October
Built with
Next.js on Cloudflare Workers, with D1

The idea

Community deal sites work because real people post real deals and vote on them. They have gaps too: no easy way to tell whether a "50% off" is real, alerts people patch together themselves, and pages that feel dated on a phone. Fair Go Finds keeps the community part and fixes those gaps.

Price truth

Every product's price is recorded day by day. When a deal is posted, the site takes the median price over the 90 days before it, counting one price per day in Melbourne time, so a single odd reading can't skew it. It only gives a verdict once it has at least three days of prices to go on.

If a store's "was" price claims a bigger discount than the history shows, by more than 15 percentage points, the site says so. That's the inflated-RRP trick, and it's common around big sales.

One of the less obvious traps: a store page whose prices have all moved by exactly the same ratio is usually showing a different currency, not having a sale. Imports like that are rejected rather than reported as bargains.

Voting that's hard to game

  • A brand-new account's vote counts for a quarter, rising to a full vote as the account ages and earns a reputation.
  • A deal's score is hidden for its first 10 minutes, so early votes don't pile on.
  • Deals voted down far enough are delisted automatically.
  • Patterns like vote rings and one-sided support are flagged for a moderator to look at.

Where the deals come from

Members post deals, and more are imported in the background from retailers' own public product listings, within set limits and following each store's robots.txt rules, which are kept and re-read daily.

Fast on a free-to-cheap stack

The site is a Next.js app running on a Cloudflare Worker, with a D1 database, and the Worker is placed near Sydney. A deals home page can easily mean thousands of database reads, so each Worker keeps a copy of the catalogue in memory, checked against a version stamp. Measured on 19 October, that took the home page from about 26,000 database rows read to under 50 once warm.

Pages for people who aren't signed in are shared from Cloudflare's cache: fresh for a minute, then served while a new copy is built in the background, for up to 10 minutes. The site uses the phone's own fonts, so there's nothing to download before the text appears.

Built for the people who use it

  • Hot, Latest and Top listings, deal pages with a price chart and verdict, and other stores' prices side by side.
  • Threaded comments, "still works" and "dead" reports, and a one-tap copy button for codes.
  • Alerts by keyword, price, store and category, instantly or as a daily digest, plus exact-product price watches.
  • Pages for 10 sale events, stores and categories, a discount codes directory, price drops, RSS feeds, and a page explaining how prices are checked.

Checked on every change

Every pull request runs a type check, 1,447 tests, a full build, a dry-run deploy and a smoke test in a real browser that fails if the Content Security Policy blocks anything or the page scrolls sideways on a phone. Every request gets its own Content Security Policy nonce, and forms are protected against cross-site requests and rate limited.

What's next

A soft launch with founding contributors ahead of Black Friday on 27 November. As the catalogue grows past a few tens of thousands of deals, filtering and paging will move into the database itself.

Keep exploring