Try it right here
This loads the live project from its own domain, exactly as a visitor would see it.
What it does
A daily job pulls reviews from Google, TripAdvisor, Yelp, and Facebook, merges them incrementally, classifies each one into a controlled theme vocabulary, and derives windows, deltas, theme movement, and a response queue for a static dashboard. There is no server and no database — every number on screen is also a line in git history.
A separate embeddable widget publishes vetted five-star pull quotes to the public website, guarded by three gates: a verbatim match against the original review, a regex screen, and an adversarial critic pass. The theme vocabulary grows on evidence rather than on a hunch, and new themes are re-applied to the full corpus so year-over-year comparisons stay honest.
What it can do
- Multi-platform incremental collection with a periodic reach-back to catch new replies
- Theme, sentiment, and tone classification with a deterministic keyword fallback
- Self-growing theme vocabulary, promoted only on evidence and then re-applied to history
- Response triage queue with SLAs, plus a hand-written executive brief
- Rotating public quote widget in four layouts, with luminance-aware text color
- Three-gate quote safety: verbatim match, regex screen, adversarial critic
- Pre-commit validator that refuses to ship unparseable data
Make it your own
Start by forking the repository into your own organization. Everything below assumes you are working in your fork, not this one.
- Fork, replace
CNAME, set Settings → Pages → Source to GitHub Actions, and add the DNS record. - Add the collection and model API keys as repository secrets. A local
.envis invisible to Actions, so both places need them. - Edit
config.jsonto point the sources block at your own listings, and set your SLAs and window sizes. - Verify the model path with the
--checkflag before trusting a full run. - Replace the theme vocabulary and review data with your own vocabulary and an empty dataset, then run a full backfill.
- Before putting the quote widget on a public site, confirm each platform's terms permit excerpting review text.
Stuck on a step? Open an issue on the repository. Questions from people adapting these for their own institution are the most useful feedback we get.