The pipeline that takes real events from public feeds onto a Doozer page AND emits them as schema.org Event, plus the timezone rule that makes the data correct. The foundation for gohe.re Gatherings.
The operator's goal, stated 2026-08-23: Doozer sites should be perfectly tuned for AI agents to find, understand and reference, as well as for search engines and people.
That goal exposed a gap the day after events started working. Lodge and venue pages were carrying real, current events — a visitor could read "Friday Fish Fry, Aug 28, 4:00 PM" perfectly well. The page emitted LocalBusiness and FAQPage and no Event at all. So an AI agent, a search engine, or any structured-data consumer had no idea the event existed.
A live event is only half published until a machine can reference it.
public feed -> bound by Magellan -> stored as facts -> rendered for humans -> emitted as schema.org Event
Sources today (all keyless, all legitimate):
| source | Magellan service | what it yields |
|---|---|---|
| public Google Calendar embed | gcal |
full event feed with recurrence ([[magellan-and-feeds]]) |
| Ticketmaster / Marquee | ticketmaster |
ticketed shows at known venues |
| schema.org on the business's own site | — | Event where present (rare: ~0 in sample) |
businessUpcomingEvents() (business-events.php) is the single read path: gcal first (a business's own calendar outranks anything we infer), then Marquee. One events surface, many sources — adding a feed must never add a second events UI.
buildEventsJsonLd() (schema-org.php) emits from the same call the page renders, so the structured data can never drift from what a human sees.
startDate is only meaningful with a real UTC offset, and a wrong offset is worse than none — it moves the event.
tz, from the calendar) get a true offset:2026-08-23T13:00:00-07:00 for a San Diego lodge, generated on an Eastern server.
about what we know. We do not stamp the server's zone onto a venue three time zones away.
This is the same failure that once displayed a San Diego lodge's Friday dinner as Saturday midnight. It is not to be reintroduced through the structured-data path.
Every public gathering at a real place is a candidate for a gohe.re Gathering (QR, attendees, media, memories, chat, find-each-other map), and later a wuz.ai memory layer. Both need each event to be an addressable, machine-readable entity first — which is what this node is the foundation for. Event categories worth ingesting as feeds appear: live music, karaoke, trivia, bingo, tricky trays, fundraisers, bike nights, car shows, cruise nights, meetups, showtimes.
Facebook is not a source. Page events cannot be read: direct fetch and mbasic both return HTTP 400, a reader returns a login wall, and the Graph API Page /events edge was deprecated in 2018. Bind facebook for identity only, never scrape. Do not re-litigate.
Related: [[magellan-and-feeds]], [[event-feeds]], [[ai-discoverability]], [[gatherings-and-social]], [[the-observed-world]].