DEV Community

chovy
chovy

Posted on Originally published at dev.profullstack.com

nichedb 0.7 closes the gaps, tipoffwatch and genrewatch switch to it, and nixamp 0.12 shows the score

Yesterday nichedb.dev 0.6.0 took over the fetching three of our sites did for themselves. Today 0.7 closes the gaps that kept those sites on their own pollers, the sites switch, and nixamp learns the score.

What was missing

A site reading nichedb instead of ESPN loses nothing on schedules and scores, but tipoffwatch.com also showed every play of a game and a box score when it ended, and it filled in the broadcaster for games ESPN lists without one, which is most of the world outside the US. genrewatch.com showed where a film could be rented, not just streamed, and it gave a poster and a synopsis to the 400,000 titles that only exist in the IMDb ratings dump. None of that was in nichedb. Now it is.

nichedb 0.7

Play-by-play and recaps. espn-plays reads the ESPN summary for every fixture in play or ended in the last six hours, eight summaries a run every two minutes, which is exactly the line tipoffwatch already held. One item per fixture: the last 400 plays while the game is on, the whole log with the box score, leaders, officials and closing line once it is final. Feed: play-by-play.

TV listings. sportsdb-tv keeps TheSportsDB's day listings, one item per event, channel and market, fourteen days ahead. ESPN's broadcast field is US-only; this is where "7 Queensland" for an AFL game and "Abema TV" for a sumo basho come from. Feed: tv-listings.

Rent and buy. A TMDB title now carries providers: { stream, rent, buy } beside the flat-rate watch list, and every release row says which shops carry it, so "included where I subscribe" and "available to rent" stay two questions.

Posters for the IMDb titles. A new enricher, tmdb-artwork, takes a title that came in from the IMDb dumps with nothing but a name, a year and a rating, and asks TMDB's find endpoint for the poster, the synopsis and the TMDB id. The backlog is 430,000 titles at about 29,000 a day, so it takes a couple of weeks; new titles get theirs within a tick, and a mirror sees the poster land because the row's updated_at moves with it.

A game by the name a playlist gives it. GET /api/v1/match?q=NFL: Chiefs vs Bills answers with the fixture. The parser reads two sides and a league out of "Lakers @ Celtics", "Arsenal v Chelsea", "Rangers at Celtic 19:45" and the messier things IPTV playlists actually say, "US (ESPN+ 017) | MLB: Rays vs. Braves (ESP) (2026-09-10 11:30:10)", and the match scores each fixture in the window by team-name agreement in either order: abbreviations, short names, "Man Utd", "Alcorn St". One side only scores below the floor, so "Chiefs" alone is never a Kaizer Chiefs game.

The contract for anyone mirroring a collection is one document, docs/consolidation.md in the repo, and the CLI is on npm as @profullstack/nichedb.

The sites switched

tipoffwatch.com runs with SPORTS_PROVIDERS=nichedb-sports: leagues, teams, fixtures, live scores, plays, recaps and broadcasters all come from nichedb, and the site's own ESPN, Live Tennis and TheSportsDB polling is off. Its first pass took 8,045 fixtures from 41 requests and filled 43 broadcasters from nichedb's listings with 9 more; a steady minute is one request. genrewatch.com runs with CATALOG_PROVIDERS=nichedb,musicbrainz,spacedevs: films, TV and anime come from nichedb at 250 pages a pass; music and launches stay where they were. bittorrented.com has the same switches behind NICHEDB_TITLES and NICHEDB_MIRROR, and its nightly IMDb dump import can be retired the night the mirror runs.

Two things bit on the way and are worth knowing if you mirror nichedb yourself. Bun's postgres driver hands jsonb back as text in production where PGlite parses it in tests, so a cursor spread into an object was one key per character and every tick was a full backfill. And nichedb keeps a fixture once per source that saw it, the schedule pass and the live pass both, so a page can carry the same fixture twice; collapse a page to one row per external id, latest updated_at first, before a batch upsert or Postgres will refuse the statement.

nixamp: the score under the player

nixamp 0.12 finishes the enrichment story: films, shows and channels got their posters and logos in 0.11; sports was the piece left. A channel or playlist entry named for two teams is a game, and the player asks nichedb which one and draws the score line under the video: both teams with their logos, the score, the quarter and clock while it is on, the kickoff time before, FINAL after, and the broadcaster. It re-asks once a minute while the game is live, and a miss on a game name is believed only a minute too, since the fixture may be listed by the time the channel is on.

Install or update nixamp with one line:

curl -fsSL https://nixamp.com/install.sh | sh
Enter fullscreen mode Exit fullscreen mode

nichedb: https://nichedb.dev. nixamp: https://github.com/profullstack/nixamp and r/nixamp.

Top comments (0)