How it's built · 2026
A local calendar, built like a local cares.
FranklinWhat is a one-person project. Here's what powers it, where the data comes from, and why some choices look the way they do.
The short version
Static site on GitHub Pages. Twice-daily Python scrapers hit 30 local sources, run them through a deterministic
validator pipeline, and write a single events.json that the homepage reads at page load.
Every upcoming evento also gets its own static HTML page with Schema.org Event markup —
that's the SEO piece. Total monthly hosting cost: $0.
The stack
/event/{slug-id}/ with Event + BreadcrumbList JSON-LD. Period pages (/today/, /this-week/, /this-weekend/) carry ItemList markup. The five category field guides carry FAQPage markup. Sitemap regenerates every run.docs/. GitHub Actions runs the scrapers at 4 AM and 4 PM ET, commits the output, pushes. A separate daily "freshness watchdog" workflow opens a GitHub issue if events.json hasn't been updated in 36+ hours — so silent failures don't stay silent.Dónde the eventos come from
Every evento surfaced here comes from a public source. No private Facebook groups. No scraping behind a login. The sources, by drive-time band:
Mi also read the local papers — The Franklin Press and Macon Sense — for community eventos worth surfacing. They cover Macon County better than anyone; go subscribe to them.
Why some choices look this way
No newsletter modal. No login wall.
The audience research is clear: small-town NC distrusts both. The trade isn't favorable until there's real demand. So the site doesn't ask for an email, doesn't gate any content, doesn't pop anything up on first load.
No Facebook scraping.
Facebook's Terms of Service prohibit it, and a meaningful share of the audience hates the idea on principle. Events that only live on Facebook can still get added through the project owner's submission channel — the site just won't scrape Meta's surfaces to get them.
No AI-generated content.
Editorial copy (the field guides, the category landing pages, this page) is hand-written and fact-checked against public sources. AI assisted with the scaffolding and the codebase, but the words on a page about Pickin' on the Square come from the town's own published schedule, not from a language model's training set.
Per-evento pages instead of a SPA modal.
Google's Event rich result requires a single-evento URL. A SPA hides every evento behind one address — invisible to the rich result. Pre-rendering per-evento HTML is the single biggest organic-discovery lift available for a $0 site.
Twice-daily updates, not real-time.
Most local evento listings change weekly, not hourly. Twice-daily is a deliberate budget for both compute and source-site bandwidth. If a real-time signal becomes valuable later, the architecture supports it.
Who built this
Built by Seth — a Franklin local — under his Cruxsmith studio (cruxsmith.com, launching soon). Reach the builder directly at seth@manugames.com. Want a small, fast, SEO-honest site for your shop, project, evento, or community? Say hi — the same stack scales down to a one-page business site or up to a regional aggregator. The codebase is public — have a look.
"Built for the folks who actually live here, not the weekend tourists."
Acknowledgements
Photos & data sourced from each listed venue's public web presence. Schema.org for the JSON-LD vocabulary. The Appalachian Trail Conservancy, USDA Forest Service, and US Census Bureau for the factual baseline. KnoxWhat — the sister site in Knoxville, TN — for the original blueprint.