One place for the city plans hiding across official calendars.
Explore Baahar ↗ · See the sources · Bring Baahar to your city
Event information is already online, but it is scattered across venue pages, theatre schedules, cultural calendars, universities, and organisers' booking systems. Baahar brings those public facts into one calm city guide and always links each plan back to its official page.
In this project, scraping simply means software reading a public page and copying the useful facts a person could see there—the title, date, time, venue, price, and official link. It does not mean guessing missing details or collecting private information.
Baahar performs that work on a shared schedule, not when somebody opens the website. One collection can therefore update the feed for every visitor. Today, seven reviewed collectors support Bengaluru, Delhi, Mumbai, and Varanasi. Those four cities are the starting map, not the boundary.
- Choose a useful source. A person reviews the page, its authority, access rules, current inventory, and the smallest reliable way to read it.
- Collect on a schedule. A Bright Data Scraper Studio collector fetches the approved page or public endpoint. Each source has its own versioned worker and strict request limits.
- Verify before publishing. Baahar stores the raw response as evidence, converts every event into the same 27-field shape, and checks dates, links, duplicates, counts, and source identity.
- Serve the verified result. PostgreSQL keeps event history; the Go API serves the public data; the React app turns it into browsable city plans.
If a run fails or suddenly looks wrong, Baahar does not replace the feed with empty or suspicious data. The last verified events stay visible while the same collector is reviewed and repaired.
The diagram is editable in Excalidraw.
- browse upcoming plans by city, date, category, venue, or free entry;
- ask Mau for something in ordinary language and open the verified plans it found;
- open a clear event detail with its official source;
- save plans on the device, share them, or open a pre-filled Google/Outlook calendar entry (with a standards-based calendar file as fallback); and
- see source counts without being told that Baahar covers an entire city.
![]() Resting until needed Mau stays out of the way at the bottom of the board. |
![]() Listening for a plan Try “free music in Bengaluru this weekend” or “Prithvi tomorrow.” |
Mau turns that request into a city, time window, category, venue, and free-entry preference. The Go API checks every value against Baahar's real city catalogue, then runs the same verified feed query used by the filters. Mau can narrow the board; it cannot invent an event. If the language service is unavailable, the city guide keeps working and Mau quietly asks you to try again.
| City | Verified sources | What they add |
|---|---|---|
| Bengaluru | BIC, Jagriti Theatre, Atta Galatta, BIEC | Culture, theatre, books, workshops, talks and expos |
| Delhi | The Piano Man | Public music sessions across two Delhi venues |
| Mumbai | Prithvi Theatre | Theatre, music, arts and talks |
| Varanasi | BHU Academic Events | Public workshops and academic programmes |
Coverage is deliberately source-counted. Development and access-limited work lives in the source registry without leaking into the public feed.
Baahar can add a city without adding a city-specific product path. A local lead becomes a reviewed source folder, the collector emits the same event contract, and the city is enabled only after its feed passes the existing publication checks. Community suggestions expand the map; they never bypass the trust bar.
Baahar has already exercised the full recovery path on BIEC: a controlled selector change broke the Development preview, the public feed remained live, Bright Data repaired the same collector ID, a person reviewed the diff, and the repaired version published 9/9 valid events. Replaying the saved raw object reproduced the same result without another collection call.
Read the BIEC evidence ledger →
- Four public city feeds backed by seven verified sources
- Venue-aware filters, guided discovery, local saves, sharing, and calendar actions
- Last-known-good publication and a same-collector repair demonstration
- Open the next community-requested city through the same verified path
- More independent official sources in every live city
- “More on this day” suggestions from the same verified feed
- Venue maps only when a source provides trustworthy coordinates
- Optional cross-device sync for saved plans
apps/web/ React city experience
cmd/ Go API, worker, and migration entry points
contracts/ Shared event and Scraper Studio schemas
internal/ Collection, validation, storage, health, and HTTP packages
migrations/ Reviewed PostgreSQL changes
sources/ Collector workers, mappings, tests, and evidence by city
Scraper Studio runs the deployed collectors. The public sources/ directory is
their durable source control: it records what a collector may request, how facts
map into Baahar, how identity stays stable, and what a preview or repair proved.
When a source changes, the approved Studio worker is synchronized back here and
tested again. Credentials and raw private datasets are never committed.
For a deeper look:
- Source registry and collector template
- Local development
- System architecture
- Deployment contract
- Executable quality evidence
Bring Baahar local knowledge, not just code. Suggest a city, share an official source, or propose a feature. The contribution guide explains how a lead becomes a verified part of the public product.
Baahar is available under the MIT License.

