2.4 KiB
type, status, source, repo, repo_url, language, branch, tags, updated
| type | status | source | repo | repo_url | language | branch | tags | updated | ||
|---|---|---|---|---|---|---|---|---|---|---|
| project | active | git.alwisp.com | jason/ui-tracker | https://git.alwisp.com/jason/ui-tracker | TypeScript | main |
|
2026-05-29 |
ui-tracker
Repository: jason/ui-tracker · branch main · TypeScript
Summary
Unifi Store stock monitor — watches store.ui.com for product restocks and sends Telegram alerts; single Docker container for Unraid with a React admin UI
Current status
Active. Synced from Gitea on 2026-05-29.
Documentation overview
Source: PROJECT.md
UI Stock Tracker — Project Documentation
Status: ✅ Complete and running Last updated: 2026-03-29
Purpose
Monitors product pages on store.ui.com for stock availability and sends a Telegram alert the moment a watched item comes back in stock. Runs as a single persistent Docker container on Unraid with a clean web UI for managing tracked products.
Stack
| Layer | Technology |
|---|---|
| Frontend | React 18 + TypeScript, Vite, Lucide icons |
| Backend | Node.js 20 + TypeScript, Express |
| Database | SQLite via better-sqlite3 (WAL mode) |
| Scraper | Puppeteer-core + system Chromium |
| Alerts | Telegram Bot API (direct HTTP) |
| Container | Single Docker container — nginx + Node.js managed by supervisord |
| Web server | nginx — serves frontend, proxies /api/ to Node.js on port 3001 |
Container Architecture
One container runs three processes via supervisord:
supervisord
├── nginx → serves React build on :8080, proxies /api/ → localhost:3001
└── node → Express API, SQLite, Puppeteer scheduler, Telegram sender
The SQLite database is stored on a mounted volume at /app/data/tracker.db so it persists across rebuilds.
Key Features
Stock Detection
Puppeteer navigates to each product URL and waits for React hydration (2.5s delay), then scans all <span> elements for exact text matches:
"Add to Cart"→in_stock"Sold Out"→sold_out- Neither found →
unknown
Product name is pulled from the og:title meta tag (with Ubiquiti store suffix stripped). Thumbnail is pulled from og:image.
Alert Logic
- Alert fires once when an item transitions to
in_stockandalert_sent = 0
…(truncated — see repo)
Notes
- Project file auto-created from repo documentation.