Live music listings for the Rogue Valley -- Medford, Ashland, Grants Pass, and surrounding areas in Southern Oregon.
Live site: rvlivemusic.com
- Date filtering -- Today, Tomorrow, Weekend, This week, Next 7 days, This month, or custom date range
- Region filtering -- Medford, Ashland, Grants Pass, Rogue River
- Time of day filter -- Daytime, Evening, Late night
- Type / Genre / Venue type filters -- dropdown pills on desktop, bottom sheet on mobile
- Search -- filter by artist, venue, or city
- Card and Row views -- toggle between grid cards and compact table rows
- Event details modal -- venue, time, notes, links, directions
- Add to Calendar -- .ics download for any show
- Share -- deep-linkable URLs for any show or filtered view
- Offline-capable -- caches data in localStorage, shows stale data if the source is down
- Dark/light theme -- toggleable with system preference detection
- Responsive -- mobile-first with bottom sheet filters, always-visible card actions
- Accessible -- skip link, focus trapping, ARIA roles, keyboard navigation, reduced motion support
Single index.html file for the site itself -- no framework, no build tools, no runtime dependencies. The ingest pipeline is a small Node script that prepares the data.
- Vanilla HTML/CSS/JS
- CSS custom properties for theming
- Hosted on GitHub Pages with custom domain
- Node-based ingest pipeline under
ingest/(seeingest/README.md)
Event data is built into data/events.json by a pipeline that pulls from multiple sources every few hours:
roguevalleylivemusicnightlife.com/musiclist.txt-- pipe-delimited volunteer-maintained list, the backbone of the listings- Belle Fiore, Grizzly Peak, and Roxy Ann Winery -- their own published WordPress / Tribe Events calendar feeds
- The Talent Club -- scraped from
talentclublive.com/live-music/ - The Black Sheep Pub (Ashland) -- read from schema.org Event JSON-LD on
theblacksheep.com/events/(covers their recurring Open Mic, Celtic Session, and Karaoke nights) - Travel Ashland -- Tribe Events ICS at
travelashland.com/events/category/music/?ical=1, filtered to actual music programming (Lithia Park Bandshell summer concerts, Ashland Armory events, etc.) - SOU Localist -- public JSON API at
events.sou.edu/api/2/eventsfor music events at Southern Oregon University venues
The pipeline trust-orders the sources, de-duplicates shows that appear in more than one feed (volunteer list wins on overlaps), and writes the result to a same-origin data/events.json. The site reads that JSON directly with no proxies. If events.json is unavailable for any reason, the site falls back to the old proxy + musiclist.txt snapshot path.
Refresh runs every 4 hours via a GitHub Action (.github/workflows/refresh-data.yml). Commits only land when the actual event content changes.
Open index.html in a browser. No server needed.
To re-run the ingest pipeline locally:
cd ingest
node merge.mjs # fetches live sources
node merge.mjs --offline # uses the local musiclist.txt snapshot only- General: roguevalleylivemusic@gmail.com
- Site: hello@dayne.design