§1The problem
Tickets sell out fast and sales pages change without notice. Checking site by site doesn't work, and a naive monitor gets it wrong a lot (pages that answer “ok” but are broken, look-alike fake sites).
§2What I built
- Check engineHeadless; checks the purchase pages every hour and detects when sales open.
- Deep researchA few times a day with AI agents, cross-checking several sources by consensus.
- PWAFor iPhone and desktop, with instant push notifications and a daily summary email as a sign of life.
- Honest labelsA verification label on each event (never promising certainty).
- MorePreferences and “for you”, a watched login session, resale, and dates checked against channels.
- Page auditAn audit command plus URL fixes, and protection against look-alike sites.
- SchedulingScheduled system jobs, with exit codes and its own lock against double runs.
§3The hard parts
6 entries- 01
Avoiding a false “sales open”
A guard against pages that return 200 but are empty, two-level page sanity checks and a price-based detector.
- 02
Domain trust
A list of trusted domains and detection of look-alike addresses; a look-alike link never triggers a push or reaches the summary.
- 03
Attributing evidence between similar events
And removing duplicates by strong keywords.
- 04
Research by AI agents without a paid API
Running for hours, validated with Zod and consensus across runs.
- 05
Pure engine separate from the app
npm workspaces, used by the scheduled job without starting the Next.js app.
- 06
Push on iOS
It requires an installed PWA.
§4Result
- between page checks
- 1 h
- test files in the engine
- 32
In personal use, with hourly checks, deep research and a daily summary. The engine has 32 test files.
§5Stack
- Next.js 16 (PWA)
- TypeScript
- Drizzle ORM + SQLite (WAL)
- web-push
- nodemailer
- Playwright
- Zod
- Vitest
- AI agents via command line
- systemd (timers)
- Tailscale