A small browser extension (Chrome and Firefox) that tells you where a product actually comes from, right while you're shopping online at a Portuguese supermarket.
It adds a little badge to each product — on the search/listing page and on the product page — showing whether that brand is from the EU, from a closely-linked non-EU country (Switzerland, Norway, Iceland, Liechtenstein), or from somewhere else entirely.
| Badge | Meaning |
|---|---|
| 🇪🇺 OrigEU ❤️ Portugal | Brand is from an EU country |
| 🤝 OrigEU 🇳🇴 (EFTA) | Brand is from Switzerland, Norway, Iceland or Liechtenstein — not EU, but closely tied to it |
| 🌍 OrigEU United States | Brand is from somewhere else |
| ❓ OrigEU Unknown Source | Not in the database yet — you can suggest it from the badge itself |
Click a badge for a source link, when one has been recorded. On a product page, the badge is bigger and impossible to miss:
Click the toolbar icon to show/hide the badge, or switch it between the full text shown above and a compact flag-only style.
- continente.pt
- auchan.pt
- pingodoce.pt
- intermarche.pt
This is a personal project, not a certified label. The data is brand-level (not per-product), it's only as complete as what's been entered, and a brand's general country of origin can occasionally miss a regional or licensed exception. Treat the badge as a helpful nudge, not a guarantee — and if you spot something wrong or missing, the badge itself has a link to suggest a fix.
The badge data comes from a small database that you host yourself for free (on Cloudflare) — nobody else's server, no shared account, fully under your control.
1. Load the extension
Chrome (or any Chromium-based browser):
- Clone or download this repository
- Open
chrome://extensions - Turn on "Developer mode" (top right)
- Click "Load unpacked" and select the folder you cloned
Firefox:
- Clone or download this repository
- Firefox's loader expects a file literally named
manifest.json, and Chrome/Firefox need slightly different manifests (see note below) — copy the Firefox one into place:cp manifest.firefox.json manifest.json(do this in a separate clone/copy of the repo if you also want the Chrome version loaded from the same machine) - Open
about:debugging#/runtime/this-firefox - Click "Load Temporary Add-on…" and select the
manifest.jsonyou just copied (temporary add-ons unload when Firefox restarts — for a permanent local install, package it withweb-extand self-sign it, or submit it to addons.mozilla.org)
Then visit continente.pt, auchan.pt, pingodoce.pt or intermarche.pt and search for a product.
Why two manifests? Chrome's Manifest V3 validator rejects
background.scriptsoutright, while Firefox's Manifest V3 support doesn't usebackground.service_workerand needsscriptsinstead — there's no singlebackgroundblock that satisfies both.manifest.jsonis the Chrome version;manifest.firefox.jsonis Firefox's. They're kept in sync by hand, so if you change permissions, version, or anything else in one, mirror it in the other.
At this point every product will show "unknown" — that's expected, there's no database connected yet.
2. Deploy your own database
Follow the step-by-step guide in backend/README.md.
It's free at this scale on Cloudflare's Workers + D1, and takes about 10
minutes. At the end you'll have your own private backoffice where you add
brands and countries yourself.
3. Point the extension at it
cp lib/config.example.js lib/config.js
# edit lib/config.js: set BACKEND_URL to the Worker URL from step 2Reload the extension (chrome://extensions or
about:debugging#/runtime/this-firefox) and you're done — the badge will
start showing real data for whatever brands you've added.
ARCHITECTURE.md covers how the matching works, the supported sites'
platform details, and how to add a new site or a new browser target.
PRIVACY.md — short version: no data collection, nothing you browse or buy is ever sent anywhere.
GPL-3.0 — if you redistribute this or a modified version, it must stay open-source under the same license.

