The idea · Why this exists

One city, one calendar, no toll.

What's broken about how a city finds its own events, the marketplace economics that keep it broken, and the pipeline that routes around them. Drawn, not argued.

01 · The problem

The city is scattered across walled gardens.

THE FEED THE TICKET GIANT THE RSVP APP THE GROUPS APP A VENUE'S OWN SITE …and everything with no wall at all: flyers, group chats, a taped-up PDF.
One week of the same city, sliced by platform. Every wall wants its own account, and none of them shows you the whole picture.

Any given week, Philadelphia produces hundreds of things worth leaving the house for — shows, story hours, run clubs, lectures, potlucks. Each one lives wherever its organizer happened to post it, and nearly every one of those places is a business with a wall around it. Seeing the whole city would take nine apps, nine accounts, and nine algorithms' permission. Nobody does that, so most events only reach people already inside the right wall. Supply isn't the problem. Discovery is.

02 · The economics

The marketplace in the middle taxes both sides.

TODAY — A MARKETPLACE IN THE MIDDLE THE ORGANIZER a show · a class · a potluck THE PLATFORM objective: minutes on app YOU looking for tonight the listing ticket fees, paid reach attention · data the feed THE BULLETIN — A PASS-THROUGH THE ORGANIZER keeps every dollar ONE OPEN CALENDAR no accounts · no fees no promotion YOU close the tab, go out found, free links straight out …and you show up. no middleman took a cut.
Top: both sides pay the middle, and the middle is paid in minutes. Bottom: nothing stands between the flyer and the door.

An event platform is a two-sided marketplace: organizers on one side, you on the other, the platform between, charging both. Organizers pay listing and ticket fees, then pay again — "boosting" — to reach the very followers they already earned. You pay in attention and data. And the feed that connects you is ranked for engagement, because revenue is proportional to your minutes on it. A post that gets you to close the app and leave the house ends the session, so the ranking learns not to show it. Nobody has to be villainous; the incentive just points away from the door.

03 · The moat

Network effects keep the walls standing.

USEFULNESS TO YOU → PEOPLE YOU KNOW ALREADY ON IT → an open calendar useful to the very first reader a closed network worthless alone, mandatory later value ≈ n² DAY ONE
Usefulness to one reader as the crowd grows. The gray curve's left half is the moat: nothing works until everyone's inside — so everyone stays inside.

Why hasn't somebody fixed this? Because the broken version is a great business. A network's value to you grows with who else is on it — roughly the square of the crowd, per Metcalfe's law. That makes each garden worthless at first and mandatory later: the switching cost is everyone you'd leave behind. Moats like that reward whoever walls off the most supply, so the market settles into a few giant gardens instead of one commons.

An open calendar refuses the game. No accounts means no network to lock in, and its value to the first reader equals its value to the millionth — coverage, not membership. The catch: coverage used to take a newsroom full of listings editors. That's the part that just changed.

04 · Why not sooner

Two costs kept this from existing. Really, one.

WHAT SEEING THE WHOLE CITY COSTS THE OLD WAY — A LISTINGS DESK ≈ $300k a year three or four editors reading everything, forever — funded by print ads that no longer exist THE NEW WAY — AGENT-BUILT PIPELINES under $5,000 in tokens (no — that's the whole bar) pipelines covering 75–85% of a city Philadelphia's size — about two months of a Claude Code Max subscription
An order of magnitude, not an invoice. Philadelphia had the old version — the alt-weekly listings desk — until the ad model died. Nothing replaced it, because nothing could pay for the replacement.

An open city calendar is not a new idea. It's an old idea that was priced out, twice over. Cost one: coverage. Every source needs its own parser, every parser breaks when a site redesigns, and a city has hundreds of sources — that's a newsroom desk, staffed forever. And the open version can't pay for the desk, because it refuses the only money in the market: the ticket cut and the boost fee belong to the walls. You don't get to charge for the door and also leave it open.

Cost two: judgment. Even scraped perfectly, a raw pile of everything is unusable — somebody still has to read each listing and decide whether it deserves your Tuesday. Editors used to do that; editors don't scale; the feeds that replaced them rank for minutes instead (§02). More on this one in §07.

Both costs are the same cost — effort: reading messy pages, writing small programs, making judgment calls at scale. That is exactly the labor language models just made cheap. Not "AI discovers events" magic; the dull version: the price of parser-writing and listing-reading fell by a factor of about sixty, and the commons became affordable to one person.

Which means you don't have to trust me — the healthiest property this project has. This page is the protocol: everything on it is replicable from the description. If you think the scores are wrong, take data.json and re-rank it. If your city needs one of these, build one — nothing here is secret, and the bill fits a hobby budget.

05 · The fix

Automate the commons.

A VENUE'S CALENDAR club · theater · gallery A LIBRARY BRANCH story time · workshops A TICKET PAGE listings, minus the fees A GROUP'S GRID run club · chess night THE PARSERS one per source, running on a schedule ONE DATABASE every event, deduped, scored out of ten THE BULLETIN the ranked list THE MAP pins by hood THE CALENDAR print · fridge OPEN DATA take the json THE AGENT LOOP reads each source, writes its parser, once THE RATER scores each event on a fixed rubric
The whole machine. The agents sit outside the data path and touch it at two points: the loop writes each source's parser — once — and the rater scores each event as it lands. Everything on the path is plain machinery. Adding the hundredth source costs the same as adding the first.

The Bulletin is an automated commons. AI agents find every public calendar in the city — venue sites, library branches, ticket pages, a run club's Instagram grid — and write a parser for each one, once. Every source then flows forever into a single database, where events are deduplicated and scored out of ten for one thing: whether showing up might connect you to somebody. The same data ships four ways — the ranked bulletin, the map, a printable neighborhood calendar, and the raw data.json for anyone to build on. No accounts, no fees, no promoted anything; every listing links straight out to whoever is running it.

What used to take a newsroom's worth of listings editors now runs itself. That's the economics finally working for the commons instead of the moat.

06 · The loop

Built by agents. Kept true by agents.

"Agentic loops" deserves to be more than a buzzword, so here is the actual shape of one. Each source is handled by a small crew of AI agents with narrow, boring jobs. The interesting part isn't that agents write the parsers — it's that the system assumes they'll sometimes be wrong, and is built to catch it.

THE SCOUT go / no-go on each lead: is there a real calendar? THE BUILDER writes the parser — once, per source THE LIVE PROBE "built" is earned, never declared THE FLOW events ingest, scores publish no-go: documented, filed, no pipeline THE STEWARD re-probes every built source on a schedule weeks pass; sites redesign quietly rot found → rebuild, re-probe …and when the probe still passes: nothing to do. the best health report is a boring one.
One source's life. The green box is the safety property: an agent can claim anything, but built only comes from a probe of the live site — and the Steward makes it re-earn that status on schedule.
The crew, role by role — and why none of them can lie
  1. 01The Lead-finder walks the city on paper — every venue, group, library branch, and aggregator gets filed as a lead, block by block.
  2. 02The Scout reads each lead's actual site and makes the go/no-go call: is there a real calendar here worth a pipeline? Its verdict and notes become the source's permanent documentation.
  3. 03The Builder works out the platform behind the page, writes a small parsing adapter for it, and fires a live probe. Only a passing probe flips the source to built — the status comes from the site, not from the agent's say-so.
  4. 04The Rater reads every new event against a fixed six-dimension rubric and writes a one-sentence reason per dimension. The reasons publish with the score — open any event and check its work.
  5. 05The Steward re-probes every built source on a schedule and files honest health reports. Rot found → the source goes back to the Builder.

Guardrails, because language models make things up: each role can only write its own slice of the database; every write goes through an idempotent operator — run it twice and nothing doubles; and the one status that matters, built, can only be earned from a live probe of the real site, never asserted.

The loop matters because the web rots. A venue redesigns its site and a working parser starts returning nothing — silently. So maintenance is a first-class job here, not an afterthought: "built" is a status a source keeps earning, proved against the live site on schedule, never remembered from last month.

07 · The ranking

Aggregation without judgment is just a bigger pile.

The obvious version of this already exists, and it's the best argument for the unobvious part. Open any of the big RSVP-and-ticket aggregators: technically, everything is there. Practically, it's a wall of "networking" that's a sales funnel, webinars wearing event costumes, and whatever paid for placement — because listing is free and your attention is worth money, an unranked pile fills with things that want your wallet. Collecting the city is half the job. Judging it is the other half. You can't just aggregate everything and call it a bulletin.

80 40 024 6810 SCORE OUT OF TEN → EVENTS → most of the week is "fine": real, listed, forgettable — the blockbuster's five showtimes all land in this hump city average: 4.5 down here: a virtual vestry meeting, an online job webinar out here: the community cleanup (8.3), the farm volunteer day (8.2), salsa in LOVE Park (7.9) 101 of 532 — what tops the list
Every event the pipeline holds for one real week of Philadelphia — all 532, mid-August 2026 — scored and binned. Same numbers the site serves in data.json. Even with curated sources and zero ads, the mode of a city's week is "perfectly fine"; the whole point of the ranking is the thin green tail.

What the ranking hunts is genuine community — hard to define, easy to recognize. The volunteer day where you end up holding one end of a stranger's ladder. The run club where the fourth week, somebody knows your name. The definition is still sharpening, but "would you leave having talked to someone you didn't arrive with?" gets close — you know it when you see it. So an AI reads every listing and scores six weighted questions:

The composite's weights, live from data.json. Every score ships with a one-sentence written reason per dimension — open any event on the bulletin and check the work.

Is a fixed rubric the whole answer? No — call it sixty percent of "know it when you see it." What's missing is mostly you: the rubric scores the room, not your taste, and the knitting circle and the pickup run deserve different rankings for different people. That part comes later, carefully. Meanwhile the score stays deliberately public and arguable: the reasons are printed, and when they're wrong, DM me.

08 · The goal

Make real life easier than the feed.

Everything above serves one metric, and it isn't traffic. The best session on this site is a short one: you open the bulletin, something looks good, you close the tab, you go. Show up twice to anything marked and you're a regular — and regulars are what community infrastructure is made of.

See what's on tonight →

The feed's success metric is minutes on app. Ours is nights out.