Skip to content
Frank Spin.
BricksDeal.com Independent product by Frank Spin
Role
Founder and full-stack builder
Period
2025–now
Scope
Product strategy · Design · Engineering · Content

Every deal site tells you it’s a deal.

I built BricksDeal to answer the question underneath: is this actually cheap?

A discount badge only means something next to older prices. BricksDeal matches the same LEGO set across retailers, keeps every price it has seen, and shows whether today’s offer is genuinely good or just marked down from a number nobody paid.

Open BricksDeal
67
retailers compared
17,221
sets tracked
2× daily
price and stock refresh

Live product checked 20 July 2026

Live product bricksdeal.com
BricksDeal homepage with search, live catalogue counts and a featured deal.
BricksDeal homepage at a 430 pixel mobile viewport.
Homepage · live product · 20 July 2026

The price problem

A discount label does not know what the set cost last month.

Most shop pages give you today’s price and an RRP. That leaves out everything I actually wanted to know. Was it cheaper in May? Who still has it in stock? How old is that price? And is the other set on my shortlist a better use of the same money?

So this could not be a list of affiliate links. Every set needed one fixed record, with a history of offers moving around it.

LEGO 75367 · 20 JULY 2026

RRP €649.99

€469.99 lowest price on the capture date
  1. 01

    The set stays fixed

    Number, name and product details hold still while the offers around them change.

  2. 02

    Offers keep moving

    Price, stock and the time of the last check each drift on their own schedule.

  3. 03

    Country changes the market

    A comparison is only useful with the retailers and prices that region can actually buy from.

  4. 04

    Commission cannot set the order

    Affiliate revenue pays for the thing. It does not get to pick what ranks first.

The product model

Every offer resolves to one LEGO set.

The set record holds still. An offer can change price, stock and check time without spawning a second product. Every check joins the history that the deal list, the set page and the comparison all read from.

  1. 01

    Set record

    The set number anchors its name, theme and product details.

  2. 02

    Retailer offer

    A shop contributes its current price, stock and latest check.

  3. 03

    Price observation

    Every check enters the history. Rejected data stays auditable but can never become the current price.

  4. 04

    Decision context

    Current offers and “lowest ever” only count accepted observations from the shopper’s own region.

One live set

Here is what that looks like on one set.

On 20 July 2026, BricksDeal compared eight retailers for LEGO set 75367. The lowest offer was €469.99, which is 28% below the €649.99 RRP. The page showed stock, the price curve and when each figure was last checked. So “28% off” is something you can check instead of take on faith.

€469.99
lowest current offer
€649.99
recommended retail price
8
retailers compared
28%
below RRP
Set detail · live product 75367
BricksDeal set page comparing retailer offers for LEGO set 75367.
Price history and alert 20.07.2026
BricksDeal price history, price alert and forecast for LEGO set 75367.
LEGO 75367 Venator-Class Republic Attack Cruiser · captured 20 July 2026

The reader journey

What happens after someone spots a deal.

Spotting the deal is the start, not the end. From there someone has to find the right set, clear away the offers that do not apply, look at the history, and then decide: buy now, or keep watching.

01 / 05

Find a set

Search by set, browse a theme or start from a collecting interest.

Homepage · live product · 20 July 2026 1/5
BricksDeal homepage with search, live catalogue counts and a featured deal.

Responsive decisions

At 430 pixels, the order matters more than the layout.

Desktop has room to put comparisons side by side. On a phone the same information becomes a single reading order: the offer, then the details that back it up, then the price history. Most of the responsive work here was deciding what comes first.

Desktop keeps the wider market visible 1920 × 1200
BricksDeal deal list sorted by savings with filtering controls.
BricksDeal deal list at a 430 pixel mobile viewport.
BricksDeal Venator set page at a 430 pixel mobile viewport.

Mobile protects the next decision

Discovery

Most shoppers do not arrive with a set number.

Theme pages, collecting interests, retiring-set overviews and guides are all part of the product. Their job is to get someone from “I want a Star Wars set” to one specific set worth checking.

Theme discovery · 20 July 2026 bricksdeal.com
BricksDeal theme index for browsing LEGO sets by theme.
  1. 01

    Theme

    Start inside a LEGO world you already know.

  2. 02

    Interest

    Browse by the kind of thing you like building.

  3. 03

    Budget

    Turn an open search into a price range.

  4. 04

    Guide

    Editorial judgement, with today’s prices attached.

At the retailer

The decision usually happens on someone else’s page.

By the time you are ready to buy, you have left. The browser extension recognises the set or EAN on supported retailers and stays quiet unless there is a comparison worth interrupting for.

See the extension
Browser extension · 20 July 2026 Chrome
BricksDeal browser extension product page.

Under the surface

The site stays simple. The data work runs beside it.

Laravel renders the public catalogue from SQLite. Scraping, translation and SEO run in a separate Python pipeline that publishes through a protected API. None of that work sits between a reader and the page.

  1. 01Data jobs

    Collect

    Python pipeline

    Retailer scraping, translation and SEO jobs run outside the storefront.

  2. 02Publish boundary

    Publish

    Protected API

    Workers hand prepared data to Laravel instead of writing straight into the live database.

  3. 03Public runtime

    Render

    Laravel + SQLite

    The public app renders the catalogue on the server from a compact local database.

  4. 04Cache policy

    Cache by risk

    Public / private

    Catalogue pages can use shared caching. Accounts, sessions and alerts are always no-store.

Live product · checked 20 July 2026

Where the catalogue stood on 20 July 2026.

67retailers
Current retailer coverage on the Dutch market.
17,221tracked sets
Set records held with current price and stock data.
31,224live price drops
Current price drops shown across the product.
2× dailyrefresh cycle
Prices and stock are checked twice each day.

English public sitemap

4,541
set routes
510
theme routes
106
guides
68
retailer routes
17
interest routes

The product counts carry a date because stock and catalogue data move. Route counts come from the English public sitemap on that same date, and they are not the same thing as the larger historical set database. Data method Public sitemap

Reflection

Product cards were the easy part.

The hard part was deciding what a price actually means. A set record that stays put. An offer recent enough to trust. Stock you can see. A history I have not quietly tidied up. And a ranking that money cannot move.

Go and check today’s prices. Mine are already out of date.

Visit BricksDeal