Skip to content

Repository files navigation

Seat Watcher

Stop refreshing BookMyShow. Start watching the seats that actually matter.

Seat Watcher is a private seat-availability radar for BookMyShow. Give it a show, the rows you care about, and the number of adjacent seats your group needs. It keeps checking the live layout, reconstructs the seat map, and alerts you the moment a matching block appears.

Caution

Seat Watcher is an independent, personal, non-commercial project. It is not affiliated with or authorized by BookMyShow. Automated access may be restricted by BookMyShow's terms, and public source code is not permission to access its service. Read the Legal and Responsible Use Notice and Privacy Notice before running or distributing this software.

Note

No behavioral tracking: Seat Watcher contains no advertising, analytics, fingerprinting, or cross-site profiling code. It does not request or store BookMyShow credentials or payment details. It processes only the account, watch configuration, seat result, and extension-status data required to provide the service. See PRIVACY.md for the exact data flow.

Node.js 22+ Microsoft Edge Playwright

Seat Watcher dashboard showing a live contiguous-seat match

Why it exists

The frustrating part of booking a popular show is not finding a seat. It is finding three or four good seats together without spending the evening refreshing a seat chart.

Seat Watcher turns that repeated manual check into one quiet rule:

Tell me when at least 3 adjacent seats open in rows H, J, or K.

Until that happens, it stays out of the way. When it does, the watch card lights up, the live seat map shows exactly where the opening is, and the browser raises an alert.

What you get

  • Row-level targeting - watch only the rows you would genuinely book.
  • Contiguous-seat detection - distinguish a real group opening from scattered singles.
  • Live visual seat maps - inspect available and sold seats without decoding a table.
  • Two monitoring modes - local Playwright checks or a paired Edge/Chrome companion.
  • Private watchlists - JSON locally, or Azure Cosmos DB with Easy Auth in the cloud.
  • Immediate alerts - in-page audio plus native browser-extension notifications.
  • No BookMyShow password - the watcher reads the public seat-layout page.

How it works

flowchart LR
    A[Choose a show, rows, and group size] --> B[Open the BookMyShow seat layout]
    B --> C[Read the rendered Konva seat canvas]
    C --> D[Rebuild rows and test adjacent runs]
    D --> E[Update the private watchlist]
    E --> F[Sound and native notification on a match]
Loading
  1. You define the match. Add a BookMyShow seat-layout URL, row letters, a seat count, and whether those seats must be together.
  2. A browser checks the real page. Locally, Playwright runs headless Chromium. In a hosted setup, the Edge/Chrome companion checks through your own browser and internet connection.
  3. Seat Watcher reads the canvas model. BookMyShow renders its map with Konva. The checker reads seat rectangles, labels, positions, and colors from that scene graph and reconstructs each requested row.
  4. The rule engine looks for a useful opening. It counts available seats and the longest adjacent run. A match updates the dashboard and triggers an alert.

The browser companion opens each layout in an inactive background tab, reads the map, sends only the normalized result back to Seat Watcher, and closes the tab. It checks once per minute while the browser is running.

Product tour

One-time browser setup

The hosted mode guides users through downloading, loading, and privately pairing the companion extension.

Seat Watcher browser companion setup

Companion popup

The popup keeps pairing and manual checks compact. Monitoring continues in the background after it is connected.

Seat Watcher companion extension pairing screen

Run locally

Prerequisites

  • Node.js 22 or newer
  • npm
  • Microsoft Edge or Chrome for the optional companion mode

Start in server-monitoring mode

git clone https://github.com/madhus1025/SeatWatcher.git
cd SeatWatcher
npm install
npx playwright install chromium
npm start

Open http://localhost:8080. Local watches are saved to watches.json, which is intentionally excluded from Git.

Add your first watch

  1. Open a movie on BookMyShow and choose a theater and showtime.
  2. Continue until the URL contains /seat-layout/, then copy that URL.
  3. In Seat Watcher, choose Add a show to watch.
  4. Enter rows such as H, J, K, the number of seats needed, and whether they must be together.
  5. Enable sound once if you want the in-page alarm.

Use the Edge/Chrome companion

The companion is useful for cloud deployments where BookMyShow blocks data center traffic, and it keeps checks on the user's own connection.

  1. Start the app in companion mode:

    SERVER_MONITORING=0 npm start
  2. Download the extension from the setup panel, or use the browser-extension/ directory directly.

  3. Open edge://extensions or chrome://extensions.

  4. Enable Developer mode, choose Load unpacked, and select the extracted extension folder.

  5. Generate a pairing code in Seat Watcher and paste it into the extension.

Keep Edge or Chrome running while monitoring is active.

Configuration

Variable Default Purpose
PORT 8080 HTTP port
CHECK_INTERVAL 15 Seconds between server-side checks
MAX_CONCURRENT 3 Parallel server-side checks
CHECK_TIMEOUT 45000 Per-check timeout in milliseconds
HEADLESS 1 Set to 0 to show Playwright's browser
DATA_FILE ./watches.json Local watchlist path
SERVER_MONITORING 1 Set to 0 for companion-only checks
AUTH_REQUIRED 0 Require the hosting platform's authenticated user headers
LOCAL_USER_ID local-user User partition used in local development
COSMOS_ENDPOINT / COSMOS_KEY unset Enable Cosmos DB persistence when both are set
COSMOS_DATABASE seatwatcher Cosmos DB database name
COSMOS_CONTAINER watches Cosmos DB container name, partitioned by userId
APP_BASE_URL hosted app URL Public URL encoded into extension pairing codes
EXTENSION_TOKEN_SECRET random per process HMAC secret for durable companion pairings

For a hosted deployment, set a stable EXTENSION_TOKEN_SECRET; otherwise pairing codes stop working after a server restart.

Deploy

The included Dockerfile installs Chromium and runs the Express app on port 8080. A production Azure setup normally uses:

  • Azure App Service or Container Apps for the web app
  • App Service Authentication (Easy Auth) for private user identity
  • Cosmos DB for durable, user-partitioned watchlists
  • SERVER_MONITORING=0 so the paired browser performs BookMyShow checks
  • A stable EXTENSION_TOKEN_SECRET stored as an application secret

The container needs at least 1 GB of memory when server-side Playwright monitoring is enabled.

Project map

server.js                 Express API, monitoring loop, auth, and pairing
storage.js                Local JSON and Azure Cosmos DB stores
public/                   Dashboard, live seat maps, alarms, and setup UI
browser-extension/        Manifest V3 Edge/Chrome monitoring companion
scripts/                  Help and README screenshot capture
Dockerfile                Chromium-ready production image

Refresh the screenshots

With the app running on port 8080 and Microsoft Edge installed:

npm run screenshots

The script uses synthetic demo responses, so screenshots never expose a local watchlist or a real BookMyShow session URL.

Supported regions

Region cookies are currently mapped for Hyderabad and Visakhapatnam, including the hyd, hyderabad, visa, visakhapatnam, and vizag URL slugs. Unknown slugs fall back to Hyderabad.

Responsible use

Seat Watcher is not affiliated with, authorized by, sponsored by, or endorsed by BookMyShow or Bigtree Entertainment. BookMyShow's current Terms and Conditions describe the website as intended for personal use and impose restrictions relevant to automated extraction and reuse. You are responsible for obtaining any required permission and complying with applicable terms and law.

Do not use this project to bypass CAPTCHAs, access controls, rate limits, or blocks; access account or payment data; run commercial or large-scale monitoring; republish third-party content; or impair the service. Use conservative intervals and stop if the service objects or blocks access.

See LEGAL.md for the complete project notice and PRIVACY.md for the local, hosted, and browser-extension data flow. These notices provide transparency but do not eliminate legal or contractual risk. Written permission from the service operator is the lowest-risk route.

For BookMyShow or Bigtree representatives

This is a good-faith, personal, non-commercial engineering project. It is not intended to access customer accounts, payment data, private information, or booking inventory. If any code, content, name, or operation raises a concern, please contact the owner through the madhus1025 GitHub profile or open a repository issue identifying the affected material and requested action. Sensitive security details can be submitted through GitHub private vulnerability reporting. The owner intends to review the request promptly and, where reasonably appropriate, disable or remove disputed functionality or content while the concern is evaluated.

Where appropriate, direct notice and a reasonable opportunity to address the concern before escalation would be appreciated. This is a good-faith request, not a waiver of anyone's rights and not a guarantee against legal action, damages, costs, or penalties.

About

An independent, personal seat-availability monitor that detects contiguous openings and alerts through a web app and Edge/Chrome companion.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages