Skip to content

Lemelson/supreme-restock-tracker

Repository files navigation

Supreme Restock Tracker

Self-hosted Supreme drop & restock monitor with a local web UI. It watches the "new arrivals" feed of the Supreme online stores (US / EU / UK), takes snapshots of size and colorway availability for every new item, and shows a change feed: new drops, restocks, sell-outs, and size changes — all on your own machine, no cloud, no accounts.

Built with TypeScript, Node.js, Express and Playwright. State is stored in plain JSON files. The UI is a dependency-free vanilla JS single page app.

⚠️ Project status: unmaintained

This project has not been maintained since April 2026 and is published as-is for reference. It scrapes the public supreme.com storefront, so any change to the site's markup or bot protection can break it at any time — it may work, it may not. There are no plans for updates or support, but feel free to fork it if you find it useful as a starting point for your own tracker.

Features

  • Multi-region scanning — Supreme US, EU and UK stores, each region can be enabled/disabled and given its own scan interval.
  • Tracks the "new" feed — only items currently flagged as new on the shop page are followed, keeping the scan small and fast.
  • Size & colorway snapshots — for every item, every colorway route is visited and per-size availability is recorded.
  • Change feed — the UI shows a timeline of events:
    • discovered — a new item appeared in the feed
    • restocked — sizes came back in stock
    • sold_out — an item or colorway sold out
    • sizes_changed / colors_changed — availability shifted
    • missing_from_new — an item dropped off the "new" list
  • Per-item fast tracking — assign a shorter custom interval to specific items you care about (e.g. check one hoodie every 2 minutes while the region scans every 10).
  • Scan pacing profilescareful / balanced / fast presets control page delays and timeouts; scans are sequential with randomized jitter to keep the tracker polite.
  • Priority queue — region scans always take precedence over single-item scans, so full sweeps aren't starved.
  • Manual browser session — if the store shows a captcha / access challenge, one click opens a visible Chromium window that shares the tracker's cookie state; solve it manually, close the window, and the tracker resumes.
  • Desktop notifications — access issues are reported via terminal-notifier on macOS (optional).
  • Local-first — everything (state, cookies, snapshots) lives in ./data/ on your disk. Nothing is sent anywhere.

Quick start

Requirements: Node.js 20+.

git clone https://github.com/Lemelson/supreme-restock-tracker.git
cd supreme-restock-tracker
npm install
npx playwright install chromium
npm run start

Then open http://localhost:3310.

On macOS you can also double-click start-tracker.command / stop-tracker.command in the project root to run it in the background.

To use a different port:

PORT=8080 npm run start

How it works

┌────────────┐   queue    ┌──────────┐  Playwright  ┌──────────────┐
│ Express UI │ ─────────▶ │ Tracker  │ ───────────▶ │ supreme.com  │
│ (public/)  │            │ (queue + │              │ US / EU / UK │
└────────────┘            │ differ)  │              └──────────────┘
      ▲                   └────┬─────┘
      │        JSON state      │ snapshots
      └──────── data/ ◀────────┘
  1. On a timer, the tracker opens the region's shop page in headless Chromium and collects every product link labeled new.
  2. Each product page embeds a Shopify-style product JSON (<script id="product-…-json">) — it is parsed for variants, sizes and availability. Colorway thumbnails are clicked through to capture every color route.
  3. The new snapshot is diffed against the previous one; differences become change events in the feed.
  4. Browser cookies/session state are persisted per region under data/storage/<region>.json, so a manually solved challenge carries over to headless scans.

Project structure

Path Purpose
src/server.ts Express server: static UI + JSON API
src/tracker.ts Scan scheduler, priority queue, snapshot diffing, change events
src/supremeScraper.ts Playwright scraping: shop feed, product JSON, colorway discovery, pacing
src/store.ts JSON state store (data/state.json), migrations, dedupe
src/manual-session.ts Visible Chromium session for solving captchas, shares cookie state
src/config.ts Region defaults (URLs, intervals)
src/types.ts All shared types
public/ Vanilla JS web UI (no build step)
scripts/ One-off inspection helpers used during development

API

The UI talks to a small JSON API — usable directly if you want to script it:

  • GET /api/state — full application state
  • POST /api/scan-all — queue a scan of every enabled region
  • POST /api/regions/:id — update region settings (enabled, defaultIntervalMinutes)
  • POST /api/regions/:id/scan — queue one region scan
  • POST /api/regions/:id/manual-session — open the visible browser session
  • POST /api/products/:handle — per-item tracking settings (enabled, intervalMinutes, archived)
  • POST /api/products/:handle/scan — scan one item now

Handling captchas / access challenges

Supreme sits behind bot protection. When a scan hits a challenge, the region is marked with an error and retried later. Use the Open Manual Session button in the UI (or npm run session -- us https://us.supreme.com/pages/shop): a visible Chromium window opens with the same stored session, you solve the challenge like a human, close the window, and the refreshed cookies are saved for the headless scans.

The tracker never copies cookies from your personal browser profile.

Data & privacy

All state lives under ./data/ (gitignored):

  • data/state.json — products, snapshots, change feed, logs
  • data/storage/<region>.json — Playwright cookie/session state per region

Delete the folder to reset everything.

Disclaimer

This is a personal monitoring tool, published for educational purposes. It only reads publicly available product pages, scans sequentially with deliberate delays, and does not automate purchases (it is not a checkout bot). If you run it, keep the pacing polite and make sure your usage complies with the store's terms of service. Supreme is a trademark of its respective owner; this project is not affiliated with or endorsed by Supreme.

License

MIT

About

Self-hosted Supreme drop & restock monitor — tracks new items, size and colorway availability across US/EU/UK stores with a local web UI. TypeScript + Express + Playwright. Unmaintained since April 2026, published as-is.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors