← All work

passtbesser

A comparison portal with no commission parameter in its ranking

Role
Sole developer - data model, tariff engine, funnel, admin, retention
Period
2026
Status
Demo data
Stack
Next.js · TypeScript · Bun · Drizzle ORM · PostgreSQL
6
verticals
3
with real cost computation
0
commission inputs in the ranking

An Austrian price comparison portal for electricity, gas, car and home insurance, loans and mobile plans - computing real costs where that is possible, routing to a human where it is not, and able to prove afterwards what it showed and why.

01Computing what can be computed

Electricity, gas and mobile tariffs follow from consumption and a published price sheet, so the application computes them and shows a ranked list. Car insurance, home insurance and loans do not: their pricing depends on the applicant to a degree that any list produced without a connection to each provider’s own rating engine would be fiction.

For those three the identical funnel ends at a contact form instead. Same interface, different ending - because the alternative is a comparison portal that invents numbers in half its categories.

02Being able to prove it later

Every query is stored as an immutable snapshot: the inputs, the ordering that was displayed, and the ranking configuration active at that moment. That snapshot is what a shareable result link points at, and what settles a dispute months later. None of it can be reconstructed afterwards, so it is recorded at the time.

Tariffs are never overwritten. A price change creates a new record and the old one keeps its validity period, which is the only way to answer "what did this cost in March" without guessing.

The transparency page renders from the running configuration rather than hand-written prose, so the published explanation of how ranking works cannot drift from how it works. And the ranking takes no commission input - not weighted low, not configurable: the parameter does not exist in the sort.

03Money, and retention

Amounts are integers in cents and energy prices in hundredths of a cent, because floating point arithmetic on prices produces ranked lists whose totals are a cent off - exactly the kind of error that destroys trust in a comparison site while looking like a rounding quirk.

Result links carry 256-bit random tokens and expire after thirty days. Leads, with their consent evidence and recipient log, expire after a year. Both are configurable, and running the deletion job daily is a documented operating requirement, not an optional extra.

04Decisions worth explaining

The production runtime closes rather than lose a submission

Without a database URL the production runtime refuses to start. An in-memory store exists for local development and enabling it in a production build takes an explicit flag. A comparison portal that loses real enquiries and proof-of-consumption uploads on restart is worse than one that is down.

Demo data that announces itself

The tariffs are modelled on real Austrian offers but are neither current nor agreed with the named providers, and every surface says so. One environment variable switches the disclaimers off once real data is connected.

Questions about this project?

I am happy to walk through the architecture, the parts that did not work, or the code itself.