The city is scattered across walled gardens.
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.
The marketplace in the middle taxes both sides.
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.
Network effects keep the walls standing.
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.
Two costs kept this from existing. Really, one.
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.
Automate the commons.
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.
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 crew, role by role — and why none of them can lie
- 01The Lead-finder walks the city on paper — every venue, group, library branch, and aggregator gets filed as a lead, block by block.
- 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.
- 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.
- 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.
- 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.
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.
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:
- Social quality24%will strangers actually interact — or just sit in the same audience?
- Serendipity21%how likely is an encounter you didn't plan? public and walk-up beats ticketed seating
- Solo-friendliness18%can you show up alone without it being weird? structure gives strangers a reason to talk
- Community building18%does going build something durable — regulars, membership, civic ties?
- Uniqueness11%a rare one-off gets a nudge over every-Tuesday (the weekly wins elsewhere: that's how regulars happen)
- Value for price8%free-and-fair beats a wall at the door
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.
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.
The feed's success metric is minutes on app. Ours is nights out.