Source site
A public calendar we read.
The bureau, the theatre, the chamber, the resort, the library, the newspaper calendar. The nightly job copies a date, a clock, a place, and a price only when that page printed one.
Sources and the system
Yoocal’s listings come from public calendars in the towns we already serve. A website on this page is a place the nightly job reads. Reading it does not make a contract, a logo, or a promise that the site endorses Yoocal.
Inventory below is the job as the listing engine is written. Catalog counts are from the public app on 2 October 2026: 3,036 listings, 61 that day, Park City 1,695, Heber Valley 691, Jackson Hole 513, Elkhart Lake 84, Green Lake 53, Midway 0. Health totals move every morning and are left off this page.
Source site
The bureau, the theatre, the chamber, the resort, the library, the newspaper calendar. The nightly job copies a date, a clock, a place, and a price only when that page printed one.
Host Partner
Partner on the host screen is a paid placement: Featured is $0.99 a day, Partner is $9.99 a day. That business is a customer. It is a different word from a website we read.
Distribution
A lodge text and a newspaper embed carry the desk into a hand. They do not supply Tonight. CitySpark is the publisher product we are compared with. We also read the Park Record calendar that CitySpark powers. Those are two facts.
A film on the venue’s own showtimes page, 7:00 PM, with a price printed on that page. That is the standard the desk is for.
Engineering
parkcityfilm.org is a Tier-1 primary. If a newspaper or a race site says 7:30 for the same night, the card time stays 7:00. The other time is stored beside it. The price on the card is the price the venue printed. An empty price stays empty.
Ops
The film scraper is its own step inside the Park City job. If it fails, the bureau calendar can still publish. The morning digest names the failed step. Ops repairs the film read. Ops does not type a showtime into the app.
Product
This card can sit on Tonight because a person can meet someone at 7:00. A card that says “Time varies” is a defect these venue sites exist to prevent. The film fills a gap in the day. It is a listing, which is supply. It becomes fit only when someone marks Going and another person opens the list.
Design
Title, 7:00 PM, Park City Film, the printed price, one link to the venue. The newspaper that also listed it does not become a second logo. If the times disagree, the card leads with the venue time and can show the other time. The homepage of the desk is the town, with no strip of scraper logos.
When only an aggregator has it
Running in the USA, RunSignup, or a newspaper can fill a hole the venue has not published. The card still shows a title, a clock, and a place. The outbound link is that race page. The same race on a resort site later replaces the clock and the link. The aggregator row is how the day stays full. It is the loser when a primary exists.
When a host types it
A bar submits Thursday. That row waits. It does not enter the nightly raw files that morning. After a person approves it, it can sit on the desk as an overlay, with the organizer’s own link. The 42 / 11 / 3 report on the host screen is a specimen. A real host sees a real count, and only then is a second week a serious ask.
The job runs at 09:37 UTC, about 3:37 AM in Denver while daylight saving is in effect. “Today” on the files is a fixed UTC−6 date. The app at yoocal-2026 reads the published views from yoocal.com. This showroom’s desks use labeled specimen cards so a design can be clicked without pretending the specimen night is the live catalog.
Tonight is a meeting time. A row with no clock waits, or it shows the uncertainty. Nobody invents 7:00.
Free when the source says free. The printed dollars when the source printed them. Otherwise “Via organizer.”
A bureau, a theatre, a resort, or a festival clock beats a search result and a ticket directory.
The listing repo reads the web. The 2026 app, this showroom, and a future client read the JSON. They do not fetch these sites again.
Midway is live in the product and has 0 listings. It stays off a homepage until rows exist. An announced town is never a 404, and it is never filled with invented nights.
A source is a link. It is not a badge on the desk. Partner, as a word on a card, is reserved for the paid host day.
The beachhead. 1,695 listings on 2 October 2026. The daily job runs scraper.py, then the Egyptian Theatre script, then the Park City Film script. Venue sites lead. Aggregators fill what the venues have not posted.
| Site | Kind | How the desk uses it |
|---|---|---|
| visitparkcity.com | Primary | Tourism bureau calendar, plus a sitemap pass. The broad official list. A venue’s own page still wins the clock when both exist. |
| deervalley.com | Primary | Resort events. Attribution prefers the resort over a copy of the same night. |
| deervalleymusicfestival.org | Primary | Festival schedule. Music nights that the resort page and the bureau both echo. |
| parkcityfilm.org | Primary | Showtimes. Tier-1 for time. This is the read that should retire “Time varies” on a film. |
| parkcityshows.com | Primary | Egyptian Theatre ticketing. The theatre’s own upcoming list. |
| parkcityopera.org | Primary | Opera events, read as structured data on the venue site. |
| parkcityinstitute.org | Primary | Institute events. The pipe is the Showpass public API. The card links to the institute, with the pipe hidden. |
| mountaintownmusic.org | Primary | Show sitemaps. Local music the bureau list often shortens. |
| parkcitytrails.org | Primary | Mountain Trails calendar API. Trail nights and volunteer days with a real start. |
| parksillysundaymarket.com | Primary | The Sunday market’s own site, also mirrored by a hand-kept annual. |
| pcscarts.org | Primary | Arts Council calendar, rendered in a browser because the page is scripted. Fragile, so a miss shows up as a thin arts day, and ops watches it. |
| kpcw.org | Primary | Community calendar. The pipe is Tockify. The same read is cached for Heber, so Heber does not fetch KPCW a second time. |
| parkrecord.com | Aggregator | Newspaper calendar, through the CitySpark API, with a browser fallback. Useful breadth. Loses the clock to a venue. Scene columns are a seed, not a live crawl of every article. |
| utah.com | Aggregator | State tourism events for Park City. Fills a hole. Does not set the time when a venue has spoken. |
| runningintheusa.com | Aggregator | Races. The page blocks a plain fetch, so the job uses a render-and-extract step. Race shops and RunSignup sit beside it. |
| runsignup.com | Aggregator | Race registration API for Park City. Same rule: fill, then lose to a primary. |
| slrc.com | Aggregator | Salt Lake Running Company calendar, read through an Elfsight widget. Wasatch races that a venue has not posted. |
Hand-kept Park City annuals, linked to the organizer and expanded into dates: Song Summit, the Kimball Arts Festival, Miners Day, the Fourth, the farmers market, Park Silly, the gallery stroll. The seed file also holds a few standing rooms. The build drops an always-on amenity that has no clock, so a daily class does not become Tonight.
Heber is the valley over the hill: 691 listings. Midway has no scraper of its own. The app slices Park City and Heber rows whose text mentions Midway. On 2 October 2026 that slice was 0, so Midway stays off the homepage until the slice has rows.
| Site | Kind | How the desk uses it |
|---|---|---|
| gohebervalley.com | Primary | Valley tourism events, including Swiss Days. Detail pages are opened so a weekend has an end date. If this read fails, a short hand list is the fallback, and ops should treat that as a degraded day. |
| thedaintypearco.com | Primary | Classes from the shop’s product feed. A class with a date and a clock can be a card. A product with no meeting time cannot. |
| wasatchparksandrec.com | Primary | County event complex. The list page is scripted, so the job reads the sitemap and each detail page. Fair days, the pageant, rodeos. |
| hebervalleylife.com | Primary | Local magazine event sitemap. Valley nights the bureau page skips. |
| townlift.com | Aggregator | Local news calendar. A TownLift row that names Midway can feed the Midway slice. It still loses a clock fight to a venue. |
| kpcw.org | Primary | Heber rows from the Park City job’s cache. Heber does not call KPCW again. |
| runningintheusa.com | Aggregator | Heber races. |
| runsignup.com | Aggregator | Heber race registrations. |
| slrc.com | Aggregator | The running-shop calendar, Heber filter. |
Fallback seeds, used when the live valley read returns nothing: hebermarket.com, hebervalleyrailroad.org, the Deer Creek page on stateparks.utah.gov, and a Heber City calendar link. They keep a few known summer weeks on the desk. They are a spare tire.
Civic calendars named, and not fetched
The Heber script’s header still names both city iCal feeds. The current job does not call them. Product and design must not tell a Midway host that Yoocal pulls the city calendar until that fetch is real. Engineering’s gap is those two feeds, wired into the Heber job, with Midway still published as a slice of rows that actually mention Midway.
513 listings. The first town on the shared toolkit: a WordPress events API, sitemaps, one music page, and a render step for the sites that hide from the job’s data center. 25 miles around Jackson, so Teton Village and Alta can appear when the event is really there.
| Site | Kind | How the desk uses it |
|---|---|---|
| gtmf.org | Primary | Grand Teton Music Festival. Summer classical. Venue time wins. |
| jhcenterforthearts.org | Primary | Center for the Arts. The calendar hides from the job’s IP, so a render-and-extract step reads it. |
| wildlifeart.org | Primary | National Museum of Wildlife Art. |
| jhiff.org | Primary | Jackson Hole Film Festival sitemap. |
| snowkingmountain.com | Primary | Mountain events, with a second pass over the King Concerts lineup so a concert title stays clean. |
| milliondollarcowboybar.com | Primary | The music listing page. The job reads that list, and skips the detail pages, because the detail pages have carried stale dates. |
| thecloudveil.com | Primary | Hotel community calendar: rodeos, fairs, races, concerts. A lodging site used here as a calendar. The guest text in Arrival is a different door and does not read this site. |
| dishingjh.com | Primary | Food and drink nights. |
| jacksonhole.com | Primary | Jackson Hole Mountain Resort, Teton Village. Structured events on the sitemap. |
| grandtarghee.com | Primary | Grand Targhee, Alta. Render-and-extract. Inside the Jackson radius on purpose. |
| jacksonholechamber.com | Aggregator | Chamber sitemap of event pages. Broad, official-adjacent. A venue still wins the clock. The crawl is slowed so the chamber’s rate limit holds. |
| runningintheusa.com | Aggregator | Races within 25 miles. The RunSignup list for Jackson is left off because this read is the fuller one. |
84 listings. Race weekend is the reason a visitor is in town. The quiet week is the reason a local opens the desk. Both have to be true, and both have to have clocks.
| Site | Kind | How the desk uses it |
|---|---|---|
| elkhartlake.com | Primary | Tourism calendar through the site’s events API. HTML and a hand list run only when that API returns nothing. |
| roadamerica.com | Primary | The track. A live read plus a hand-kept 2026 list of race weekends and track days. The hand list is how a weekend survives a markup change. It is reviewed when the season is published, and it is not a guess. |
| siebkens.com | Primary | Resort concerts. Live page, plus a hand-kept 2026 summer series. Free on the bandstand when the page says free. |
| osthoff.com | Primary | The Osthoff calendar API. Lake Deck shows that the tourism site has not syndicated yet. HTML is the fallback. |
| elkhartlakewi.gov | Primary | Village calendar. Council nights and village events beside the race. |
| visitsheboygancounty.com | Aggregator | County tourism, filtered to Elkhart Lake. Fills county-wide nights that belong in the radius. |
| allevents.in | Aggregator | Still called. A directory. It fills a hole and loses any clock fight. It is the weakest read on this desk. |
A hand file holds The Tiki Bar at Elkhart Lake Beach Resort. The nightly build is required to leave that file alone. Editors change it. The job does not rewrite it.
53 listings. This town has no handwritten list of domains inside the city script. A discovery step finds event pages, then reads structured data, then a calendar widget, then a render-and-extract step. The default of that script is a review queue. The daily job publishes straight through. Ops treats a new Green Lake domain as something to read in the digest before it is allowed to define Tonight.
Sites that discovery had already read, as of the 15 September 2026 health file on the listing clone. Floors exist for the four that must not silently collapse. Counts from that morning are omitted here because they go stale every run.
| Site | Kind | How the desk uses it |
|---|---|---|
| chamber.visitgreenlake.com | Primary | Chamber calendar. Health floor 80. The broad local list. |
| visitgreenlake.com | Primary | Tourism site beside the chamber. |
| thrasheroperahouse.com | Primary | Venue. Health floor 12. |
| nortonsgreenlake.com | Primary | Venue. Health floor 6. This host is strict about TLS, and a sloppy client drops it with no error. Ops watches the floor. |
| greenlakelibrary.org | Primary | Library calendar. Ordinary-week supply for the local desk. |
| greenlaketownsquare.org | Primary | Town square events. |
| greenlakeassociation.org | Primary | Lake association. |
| greenlake4on4th.com | Primary | A named local event series. |
| fromthelandfestival.com | Primary | Festival site. |
| avromfarmparty.com | Primary | A single farm event. Kept while it has a date. Dropped when the date is past. |
| iceboat.org | Primary | Iceboat events. Seasonal, and that is the point of a lake desk. |
| bananasentertainment.com | Primary | Entertainment calendar discovered for this town. |
| thenorthwestern.com | Aggregator | Regional newspaper. Health floor 10. Fills holes. Loses the clock to a venue. |
| wpr.org | Aggregator | Public radio listings that mention the town. |
| fleetfeet.com | Aggregator | Race retail calendar. |
| raceentry.com | Aggregator | Race registration. Same lose-to-primary rule. |
The code is still in the repo. The city jobs do not call it. The comment on each one is the reason. Turning one back on is an engineering change with a reason, a digest line, and a product rule for whose clock wins.
| Read | Where it was | Why it is off |
|---|---|---|
| Google Events, via a search API | Park City, Heber, Elkhart | It echoed official sites and attached the wrong dates. Wrong dates are worse than a hole. |
| Eventbrite town directories | Park City, Heber, Elkhart | Low-trust copies. The build already drops them when a better source is near. The call was spending quota to create rows the merge throws away. |
| RunSignup for Jackson | Jackson | The Running in the USA extract is the fuller race list, and running both made duplicates. |
| patch.com | Named on the Elkhart header | The header names it. The job does not call it. |
These move bytes. A card never names them as the place to go.
| Pipe | Carries |
|---|---|
| Tockify | KPCW’s community calendar. |
| Showpass | Park City Institute’s public event API. |
| CitySpark portal | The Park Record calendar. CitySpark the company remains the publisher incumbent on the pitch. The portal is only the pipe for that one newspaper. |
| Elfsight | The Salt Lake Running Company widget. |
| Render and extract | Pages that block or hide their HTML. Firecrawl fetches. A model extracts fields. Used for walled race pages, the Jackson arts center, Grand Targhee, and Green Lake when structured data is missing. Keys live only in the listing repo. |
| Geocoder | Turns a written address into a point when the source gave none. A street address can override a bad point. A far town is dropped from that city’s view. |
| Digest mail | The morning letter to ops. A mail key, not a source of nights. |
One owner of the scrape: the private listing repo that publishes yoocal.com. The 2026 app is a reader. This showroom is a reader of specimen cards. A second scraper in either frontend is a bug.
Title, date, clock, end, place, venue, link, the source name, and a price only if a page printed one. The merge may add a stable id, categories, and a conflict record. It may not add a dollar amount, a crowd size, or a “featured” flag that the source did not have.
Keep both. Store the conflict, the uncertain time, the source links, and the list of sources. Display the Tier-1 clock. The other clock stays available for the card to show. Averaging 7:00 and 7:30 into 7:15 is forbidden. So is hiding the disagreement.
Dates before today. An always-on amenity. A seven-day recurrence with no clock. A low-trust aggregator sitting on top of a better source at the same venue and time, or the same venue and date. A point that lands outside the town’s radius after the address is trusted.
Five views, after the merge. Park City, 10 miles. Heber, 10 miles. Jackson, 25 miles. Elkhart Lake, 15 miles. Green Lake, 25 miles. A race that crosses Heber and Park City may appear on both. That is intended. Midway is a filter in the app, not a sixth file.
A new source is a change in the listing repo: a primary or a labeled aggregator, a health line, and a note of whose clock wins. Host submissions stay out of the nightly raw files until an editor approves an overlay. The hand seed is never overwritten by the job. Dead links that return 404 or 410 are rewritten from a cache. Secrets are names in the listing repo’s CI, and they are never copied into the app or this site.
The morning is a pipeline with a letter at the end. One city is allowed to fail. The desk is not allowed to fail silently.
The run fails only when Park City, Heber, and Elkhart all fail. Jackson or Green Lake can fail while the run stays green. The summary still names them. A green checkmark with a missing lake is an ops incident.
Ops does not invent a listing to fill a hole, does not paste a key into the app, and does not call a source to ask for a partnership from this page. A blocked site is a failed step. The response is a fix, a fallback that is already labeled, or a hole on that desk.
Supply is the catalog. Fit is a person using it. The sources exist so step one of the fit test can be honest: a guest in Park City opens a card with a real time.
A card needs a clock from a primary, or from an aggregator when no primary has the night. “Time varies” on the live app is the bug this page is the cure for. The Friday desk shows the standard on purpose: every specimen card has a clock.
Free is a claim a source made. A blank is “Via organizer.” A host who wants a dollar on the card supplies the dollar. Product never backfills a typical ticket price.
Park City is the scoreboard. Heber can be a card inside a trip. Jackson, Elkhart, and Green Lake keep their desks because the reads are real. A new town starts when a primary calendar is boring and reliable, which is after the Friday test, and the private review still has that sequence open.
A slice, currently empty. Homepage placement waits for rows. The missing city iCal is an engineering gap, and it is also a sentence product must not say yet.
Featured and Partner are distribution on top of a real night. The ask for a second week comes after a count of opens and Goings. A saved order with no card charge is a partial path. It is not revenue.
A primary makes the commit possible. An aggregator makes the day less empty. A lodge makes the first open happen. A newspaper embed is a later door. None of those is a reason to add a chatbot, a map tour, or a 44th city in front of Going.
The brand book still governs the mark, the paper, the ink, and the gold dot. Sources change what a card is allowed to say. They do not change the brand into a directory.
Title. Clock. Venue. One price state: Free, the printed price, or Via organizer. One outbound link, the winner of attribution. Interested, then Going.
Venue time first. The other time in a quiet line, with the other site named in words. Two equal clocks teach the guest not to trust either.
Search, day, time of day, free, and a feeling. The result is a short list. A wall of source logos is a different product and does not ship on the homepage.
Partner means the paid host day. A read is “from the venue,” “from the bureau,” or the site’s name on the link. Specimen banners stay on this showroom. The host report’s 42, 11, and 3 stay labeled as a specimen.
An empty day is an empty day. An empty Midway is a sentence, “The list is still quiet,” and a path to Heber or Park City. It is never a fake market, a fake price, or a removed route.
May through October, outside first. November through April, après the lifts. The same sources feed both. Winter design changes the hour and the room. It does not invent a second catalog.
Editorial
Submit lands as pending. An editor key locks the inbox. Until that key is set, the inbox is open, which is an ops fact and a product risk. Approval can add the organizer’s video after review. The ticket link is the organizer’s URL. Yoocal does not sell the seat and does not put Yoocal’s name on their ticket.
Host success
The host sees views, Interested, and Going for the nights they bought. The showroom calculator is a specimen and states that no card is charged. A second week is the sale. A first week with a zero is a conversation, and the honest line is the zero.
Distribution
Arrival is the check-in text. The property is a door. The Cloudveil’s calendar is a Jackson source, which does not make every hotel a data feed. Publishers get an embed of our desk. We do not wrap CitySpark’s widget, and we do not scrape a paper we also ask to embed us, beyond the Park Record calendar already in the Park City job.