This site is new and actively being built — the work of a solo indie developer. Some data is still being populated and improved. Learn more →

Changelog

A running log of notable updates. This site is actively being built by a solo indie developer — things change often.

Changelog

A running log of notable updates to the site. Updated roughly as things land.


April 2, 2026 — Security & performance hardening, UX polish

Security

  • Admin authentication — All /admin/* endpoints now require a secret API key; requests without it are rejected with 401.
  • Security headers — Every response now includes Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, and Referrer-Policy.
  • CSRF protection — Report submission forms are now protected with HMAC-based CSRF tokens.
  • Rate limiting — Report submissions capped at 5 per IP per hour; analytics tracking capped at 30 per IP per minute.
  • URL validation — Discussion thread URLs are now validated as proper HTTP/HTTPS URLs before being stored.
  • Ratings constraint — Database now enforces that rating scores must be between 1 and 5.

Performance

  • Sitemap caching — Sitemap responses are now cached in memory for one hour instead of querying the database on every crawl request.
  • Genre cache TTL — The search genre list now expires after 30 minutes, matching the browse sidebar.
  • Rating sort index — Added a database expression index on rating count to speed up rating-sorted browse pages.
  • Creator enricher — Switched from OFFSET-based pagination to keyset pagination for faster enrichment runs on large datasets.
  • Database connection pool — Pool size, overflow, and timeout are now explicitly configured via environment variables.
  • Reduced redundant fetches — Analytics stats are now fetched once per homepage request instead of twice.
  • Paginated creator APIGET /api/v1/creator/{slug} now accepts page/per_page to avoid unbounded responses for prolific creators.

Bug fixes & missing features

  • Error pages — 404 and 500 errors now render the proper error template instead of a bare JSON response.
  • Picks correctness — The Picks page now matches items by both slug and media type, preventing the wrong item from showing when two types share a slug.
  • Browse tag sidebar — Tag browse pages now populate the genre and decade filter sidebar.
  • Stale ingestion logs — Any ingestion job that was left in "running" state from a crash is now reset to "error" on startup.
  • Ingester resilience — Each item upsert in all four ingesters (movies, TV, books, games) is now wrapped in a database savepoint so one bad record can't abort the entire batch.
  • Analytics auth on popular-by-country — The popular-by-country page now sends signed auth headers when fetching analytics data.
  • Reload content without restart — New POST /admin/reload-content endpoint reloads blog posts and picks from disk without requiring a process restart.

UX / Frontend

  • Breadcrumbs — Media detail, creator, and browse pages now show visible HTML breadcrumb navigation.
  • Creator type tabs — Creator pages now have filterable type tabs (Movies / TV / Books / Games) with pagination when a type is selected.
  • Language display names — The browse sidebar now shows full language names (e.g. "Japanese") instead of raw ISO codes.
  • Loading indicator — A slim indigo progress bar appears across the top of the page during navigation.
  • No ratings yet — Media pages without any ratings now show an explicit "No ratings yet" message.
  • Favicon — Site now has an SVG favicon.

April 2, 2026 — Creator discovery improvements & content filtering

Creator browsing (/creators)

  • Role filter — Filter the creator listing by role (Director, Writer, Author, Developer, etc.) using a dropdown populated from live data.
  • Nationality filter — Filter creators by nationality; dropdown auto-populates from available values.
  • "Recently added" sort — New sort option surfaces creators that were most recently added to the database.
  • Breadcrumbs — Visible breadcrumb navigation and JSON-LD BreadcrumbList added to the listing page.

Creator detail (/creator/{slug})

  • Full role breakdown — The stats bar now shows a complete tally of every role (e.g. "Director · 14, Writer · 3") instead of a single primary role label.
  • "Known for" genres — Top genres across all of a creator's works are shown as chip links below the stats bar.
  • Collaborators — A strip of the six creators who appear most frequently alongside this person is shown on their profile.
  • Decade filter — Works can now be filtered to a specific decade via pills derived from the creator's career span.
  • Works sort — Works list can be sorted oldest-first or newest-first.

Search & discovery

  • Creator match strip — When a search query matches a creator's name, a highlight strip showing up to three matching creator cards appears above the media results.
  • Creator autocomplete API — New GET /api/v1/creators/autocomplete?q= endpoint returns matching creators with name, image, and work count for use in typeahead UIs.
  • "Notable creators" on browse pages — Genre and tag browse pages now surface up to 12 notable creators (by work count) in a card strip above the media grid.

Content filtering

  • Explicit genre blocklist — A curated blocklist of adult/explicit genre slugs is now applied at every genre query (browse sidebar, tag pages, search filter dropdown), preventing them from appearing in the UI.
  • Ingestion-time filtering — All four ingesters (movies, TV, books, games) now skip genre associations matching the blocklist, preventing new explicit genres from being written during future ingestion runs.
  • Database cleanup migration — Migration 0009 removes existing explicit genre records and their media associations from the database.

March 29, 2026

  • WIP banner & movie data notice — Added a site-wide banner letting visitors know the site is new and actively being built. Movie browse page now shows a callout about ongoing data improvements.
  • Mobile navigation — Improved responsiveness and layout adjustments across small screens.
  • Tailwind CSS — Migrated to compiled Tailwind CSS via a dedicated Docker build stage.
  • RSS feeds — Blog RSS now includes full post HTML instead of just the excerpt.

March 26–28, 2026

  • Ratings & discussion links — Media items now surface community ratings and links to discussions.
  • Public API — Full API documentation published for the FollowTheCredits data API.
  • Picks updated — New TV show, movie, and game recommendations added to the Picks page.

March 24–25, 2026

  • Movie data overhaul — Completely rebuilt movie ingestion pipeline with year-based pagination, retry logic on SPARQL failures, and checkpointing so interrupted runs can resume.
  • Language & nationality enrichment — Movies now carry original language data; creators now have nationality. Both sourced from Wikidata.
  • Creator Wikipedia links — Creator profiles now link out to Wikipedia where available.
  • Data reporting & manual corrections — Added an internal system for flagging and correcting bad data without waiting for a full re-ingest.
  • Search performance — Genre filters and search queries now use caching and optimised joins; search timing is logged for monitoring.
  • Docker improvements — Tailwind CSS compiled in a separate build stage; Nginx rate limiting configured.

March 23, 2026 — Big feature day

  • Blog launched — Markdown-based posts served from content/posts/.
  • Picks page launched — Curated personal recommendations with notes.
  • Creator browsing — New /creators page with stats, nationality, and related works per creator.
  • Browse filters overhauled — Multi-select genres, decade/year filter, platform filter, and sortable results.
  • Game platform support — Xbox, Nintendo Switch, and Windows platform variants all recognised.
  • Media type icons — Emoji icons added to media cards throughout the site.
  • Genre quality — Genre filter tightened to only show genres with enough entries; whitelist cleaned up.
  • Performance — Full-text search indexes added; sidebar genres/decades/platforms now cached; browse queries rewritten with subqueries.
  • Alembic auto-migration — Database migrations now run automatically on app startup.

March 22, 2026

  • Affiliate links — Purchase/stream links added across all media types: Amazon, Audible, and Bookshop.org for books; platform store links for games; streaming links for movies and TV.

March 20–21, 2026

  • Book data enriched — Descriptions and subjects now fetched from Open Library and cached; genre handling uses subjects from the detail endpoint.
  • Docker & Nginx — Port configuration corrected; Nginx proxy settings stabilised.

March 18–19, 2026 — Initial launch

  • Site goes live with ingestion pipelines for movies, TV, books, and games.
  • SEO groundwork: meta tags, Open Graph, sitemap generation.
  • Analytics proxy and "Popular by Country" page added.
  • Authentication scaffolding set up.
  • Nginx configured for static file serving and request proxying.