ALADDIN AKRAMI / SELECTED WORK
All projects
ON PRISJAKT / RESEARCH CAPTUREThe same Prisjakt product card with Deal Radar in personal research mode.

03 / Browser extension / Product engineering / 2026

The price is visible.
Its history should be too.

Price-history context, placed directly on the product cards where a shopping decision starts.

Explore the project ↓Deal Radar

THE PROJECT / 03

The same product.
More context.

I built Deal Radar because a storefront price means little without its history. The extension adds a compact evidence shelf to the product card: four time horizons and an overall score explain the visible price, and the expanded panel opens the history, confidence and source details behind those numbers. It is a personal research prototype, and it runs on the real storefront.

WORK
Manifest V3 · adapters · scoring · storefront integration
SOURCES
Prisjakt and PriceRunner research adapters
OUTCOME
Personal research prototype
The same Prisjakt product card with Deal Radar in personal research mode.
With Deal Radar

Same product · same browser session · Prisjakt · 7 September 2026

01 / On the real storefront

Keep the thumbnail.
Add the missing context.

This is a real Prisjakt card that I captured with the extension disabled and then enabled, in the same session, on 7 September 2026. The shelf sits between the image and the product copy rather than covering the thumbnail: annotating a card must not hide what the retailer put there.

The captured price and scores describe that moment. I show them as interface evidence, not as a current shopping recommendation.

The same Prisjakt product card with Deal Radar in personal research mode.
With Deal Radar

Same product · same browser session · Prisjakt · 7 September 2026

Capture provenance

The browser ran the actual unpacked extension in personal research mode. Price-history requests returned HTTP 200. My local capture record preserves the settings and panel text. Demo products and synthetic history are not used in this before/after comparison.

Source: Real Prisjakt capture, radar-live-evidence.json and original card screenshots.

02 / Open the reasoning

A small score.
An inspectable basis.

I did not want a verdict label. The evidence panel shows how the visible price compares across 30 days, 90 days, six months and one year, with the daily votes, medians, credible lows and confidence behind each cell.

Overall is a recency-weighted combination: 40%, 30%, 20% and 10%, renormalised over the eligible horizons. I require at least two eligible horizons, and an unavailable period stays unavailable rather than borrowing a neighbour’s score.

The real extension evidence panel from the same browser session.
Why the same price can tell different stories

In this captured case, the one-year comparison is less unfavourable than the recent-history comparisons. Showing the horizons separately stops the annual median from flattening that distinction. The panel also keeps basis and variant warnings visible instead of treating a score as proof of a fully comparable offer.

Source: docs/scoring.md; backend/scoring.mjs; real evidence-panel capture.

03 / Avoid false certainty

One day, one vote.
An outlier stays visible.

Raw observations become one comparable price vote per calendar day. Repeated intraday snapshots should not overwhelm the history, and a single implausible low should not define what counts as a good price.

I weight each vote by credibility and use robust percentiles, so a suspicious observation loses influence without being silently deleted. A materiality band of 8% of the median stops a tiny reduction after a flat history from becoming a perfect score.

  1. COMPARE

    Product identity and price basis

  2. NORMALISE

    One comparable vote per day

  3. ASSESS

    Robust horizons and credibility

  4. EXPLAIN

    Numbers, confidence and provenance

A concrete scoring example

My deterministic fixtures give a neutral 50 for a flat 30-day history and 56 for a 1% reduction after that flat history. These are explicit synthetic test cases for the scorer, not the data used in the storefront demonstration.

Source: docs/scoring.md and backend/scoring.test.mjs.

04 / Fit the host page

An extension should
belong where it appears.

The badge is mounted inside a safe card wrapper and participates in the page layout, so it follows the card as the storefront scrolls and transforms. Layouts I cannot annotate safely are left alone.

The research adapters request the matching site’s history and score it locally in the extension worker. When a source fails, the extension pauses that source with a cooldown and an explicit retry instead of presenting an outage as an absence of good deals. A separate opt-in Prisjakt mode can filter a public result grid; the demonstration here uses ordinary visible-card annotation.

Original browser recording on Prisjakt, 7 September 2026. Personal research mode.
Product status

The extension is a personal research prototype. In September 2026 it stands at version 0.1.1 with scoring model v0.3, guarded by deterministic tests and a browser harness that loads the unpacked package against synthetic storefronts. Prisjakt and PriceRunner data access is undocumented and deliberately excluded from a production-provider role. A production data provider has not been selected or licensed, and source eligibility and interface behaviour should not be mistaken for a finished commercial service.

Source: README; docs/CURRENT.md; Manifest V3 implementation; research adapters; original browser recording.