Skip to content
brorn
No. 022 · Other apps

ticket.me

Box-office monitor for several kinds of events (football, concerts, talks) around Porto: notifies the phone the moment ticket sales open.

Live
Period
2026-08 → now
Platforms
iPhone (PWA) · Desktop
Role
Solo: design, build, ship
Tech
Fig. 1 · Events and status
Fig. 2 · On the phone
Fig. 3 · Alerts

§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
  1. 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.

  2. 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.

  3. 03

    Attributing evidence between similar events

    And removing duplicates by strong keywords.

  4. 04

    Research by AI agents without a paid API

    Running for hours, validated with Zod and consensus across runs.

  5. 05

    Pure engine separate from the app

    npm workspaces, used by the scheduled job without starting the Next.js app.

  6. 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