Editing is disabled until admin access is added. Anonymous write access to the database has been removed, and this app has no sign-in yet, so the controls below are shown for review only. Admin authentication arrives in a later phase; changes must be made directly in Supabase until then.
Collector status
loading…Normalization issues
loading…Seller reliability
no collector-backed sellersNo seller has a collector key yet, so there is no collection health to report.
Unusual price changes
loading…Comparing consecutive observations of the same seller, model, storage, condition and SIM offer. Effective threshold 25%. Flagged rows are held for review only — nothing is rejected or hidden from the dashboard.
Add a retailer
configuration-driven- 1Confirm approval
You have permission to collect, and the retailer's robots.txt and terms permit reading the pages you list. Never guess a storefront URL.
- 2Register the seller
Add a row to
supplierswith a uniquecollector_key,active = trueandapproved_atset. Collection is gated on this — the scraper registry alone grants nothing. - 3Add a registry entry
Copy
scraper/retailers/example-retailer.template.mjstoretailers/<key>.mjs, fill in hosts, collection URLs, currency, defaults and option aliases, then import it inregistry.mjs. - 4Select an adapter
Shopify storefronts reuse the generic adapter unchanged. Another platform needs an adapter before it can be collected.
- 5Dry run
npm run dry-run:retailer -- <key>— reads the public pages and writes nothing. - 6Review the output
Check products found, source variants, grouped-offer estimate, duplicates, and any zero-variant products before going further.
- 7Add it to the server-side allowlist
Add a matching entry to
supabase/functions/_shared/retailer-registry.ts— key, collector key, hosts, currency, defaults — and deploy. Until theningest-retailerrejects the key, and the scraper registry alone cannot write. - 8First live write
npm run write:retailer -- <key>, thennpm run status:retailer -- <key>to confirm normalization.
Sellers
0 configured| Name | Website | Status | Actions |
|---|
Tracked phone models
0 models| Brand | Model | Storage | Status | Actions |
|---|
What these records are. The sellers and models listed above are configuration and demo entries only. Nothing on this page collects prices, and no automated collection is running — the prices on the dashboard are seeded sample rows, not observations from any seller's website.
How collection will work. A later phase adds a scan runner that executes outside this app and writes what it reads from approved public seller pages. Each approved seller — small, medium, or large — will carry its own configured collection method, so a large retailer with a structured catalogue and a small shop with a simple product list can both be supported. Sellers without an automated method remain supported through manual entry.
Paused records. Anything marked Paused here is excluded from the dashboard's comparison table, charts, and counts.