09 March 2026

cov.live: an events aggregator for Coventry

an events aggregator for Coventry

west orchards lol

Two things drove this. One is that I travel around the country on a narrowboat, and finding out what’s on in, say Leighton Buzzard or Beeston - community events, local arts, that sort of thing - is hard. Everything is in a different place, formatted differently, and half the time you find out about something good the day after it happened. It used to be quite easy on facebook in its 2010-ish peak, but it’s pretty useless now.

The other is u/HadjiChippoSafri on /r/coventry, who posts a weekly “What’s On” thread and has done for years. It’s a useful thing and it’s part of what inspired this.

For coventry, the actual information is scattered:

  • Venue websites, all different formats
  • Eventbrite
  • Facebook events
  • Email newsletters
  • iCal feeds
  • The CVFolk calendar (brilliant if you’re into folk music in the Midlands)

None of it talks to each other. You have to know where to look, and most people don’t.

The name

Someone from Coventry is known as a ‘coventrian’ or, informally, a ‘cov kid’. So I’m hoping the domain name works!

paste-1777403060732.webp

What I built

cov.kids is a fairly simple idea: pull events from all those sources automatically, deduplicate them, get a human (me) to review them, then publish a clean list.

It runs on Rails 8. I’m using Claude (the AI) to extract structured event data from unstructured sources - a venue’s events page is just HTML, an email newsletter is just text, but Claude can read it and return {name, date, venue, category, url} as JSON. It works well, until it hallucinates url’s and such.

The sources right now:

  • Reddit (/r/coventry weekly threads)
  • Eventbrite Coventry search
  • Direct scrapes of venue sites (Belgrade Theatre, The Tin, Albany Theatre, etc.)
  • Email newsletters forwarded to a dedicated address
  • iCal feeds (CVFolk)
  • Facebook pages (via Chrome automation)

Events get fuzzy-deduplicated using PostgreSQL’s trigram similarity - if two sources list the same gig with slightly different names, they get merged rather than appearing twice.

The static site

The public-facing site at cov.kids is a static site generated from the Rails app and deployed to GitHub Pages. The Rails app runs locally (for now), the admin queue is where I review and approve events, then I run rails site:generate and push to GitHub.

It means the public site is fast, costs nothing to host, and has no moving parts. The dynamic bits (admin, scraping, job queue) stay on my machine. Some of the scraping involves a real browser since Facebook abandoned a lot of their APIs, so it runs on my home mac mini for now.

What’s interesting

The AI extraction piece is the bit I find most interesting. Before this project I’d have written a custom parser for each source - brittle, annoying, lots of regex. Now I just pipe HTML through Claude with a prompt that says “extract events, return JSON” and it mostly just works. When it doesn’t (wrong URL, wrong date format), I fix the prompt or the preprocessing.

The trickiest bit is URLs. Scrapers collect links from pages, but Claude sometimes hallucinates plausible-looking URLs that don’t actually exist. The fix was to explicitly include links from the page in the text sent to Claude, and tell it to only use URLs that appear as is - not to construct them. That helped a lot.

The fuzzy dedup is also satisfying. Reddit might say “Charles Dexter Ward & The Imagineers + Tellemahookah + What about Eric?” and The Tin’s website says “Charles Dexter Ward and the Imagineers”. They’re the same gig. pg_trgm similarity catches most of these at a 0.4 threshold, and the admin UI lets me merge the ones it misses.

Where it’s at

It’s a work in progress, not ready for anything I’d call live. The data is messy - events from the wrong week show up occasionally, categories get misclassified, some dates don’t parse. I’m gradually fixing these as I find them.

But the goal is pretty simple: if you live in Coventry and want to know what’s happening this weekend, you should be able to find out without trawling twenty different websites, and without a generic events platform showing you a Take That cover band playing in Hereford in April.

Longer term I want to open it up and get it consistent, and show events beyond Coventry.

edit: changed the domain

28 April 2026 I’ve moved the domain over to cov.live. The previous one was marked as hosting malware, and despite many efforts to speak to various “"”security””” vendors, they refused to remove the categorisation. Turns out it was previously used to host covid stats, and then fell into disrepair. So it wouldn’t load through EE UK or Virgin media ISPs, which was a problem. I solved it by moving domains.

The code will probably end up on GitHub at some point once I’ve got it working well

🍽️

Categories

Dev