Underrated Flix

Finds films critics loved and audiences missed, and explains why each one is worth watching.

Underrated Flix landing page with a row of featured hidden-gem posters

Stack

  • Llama 3.1 8B on Groq
  • TMDB API
  • React + TypeScript
  • Node.js / Express
  • Firebase
  • Vite
  • Tailwind
  • Sanity
  • PostHog

The problem

Recommendation feeds reward what’s already popular, and ratings alone don’t help. A 7.9 with two million votes isn’t a discovery. Underrated Flix looks for the 7.9 with eight thousand.

How the score works

Every film gets an Underrated Score from 0 to 100. It’s a hand-tuned formula over TMDB data and community votes, not a model, and the site shows the breakdown for every film so you can see why it ranked where it did.

Signal Points Rule
Rating 0 to 30 Starts counting at 6.0, maxes out at 9.0
Exposure 0 to 40 Full 30 under 50k votes, fading to 0 at 500k. +10 under 1k votes if rated 7+
Box office 0 to 20 Rated 7+ and earned under $50M, or a flat 15 if revenue came in under 1.2× budget
Critics 0 or 10 Rated 7.5 or higher
Niche 0 to 10 Older than 15 years, two genres or fewer
Trending 0 to −10 If it’s popular right now, it isn’t underrated
Community −5 to +15 Net “Hidden Gem” vs “Over-Hyped” votes

80 and up is labeled Hidden Gem, 65 and up Underrated (or Cult Classic if it’s older than 15 years). Each score also carries a confidence value from 0.2 to 1.0 based on how many people have rated the film.

The community term is the subtle one. Votes are scaled by a ramp that reaches full weight at 15 votes, so one vote moves a film by about a point: enough to feel responsive, not enough for one person to crown a film. Downvotes cap at −5 so a few contrarians can’t bury something. In v2.3 I made votes count 3× faster, because a vote that doesn’t visibly move the score feels like it went nowhere.

Where the LLM fits

Each film page has a short analysis: one theme, one insight into a character’s psychology, and one takeaway, in under 200 words. It runs on Llama 3.1 8B Instant on Groq. I moved it to Groq for speed. The text sits on a page people skim, so it has to arrive before they scroll past more than it has to be brilliant.

Two details matter more than the model:

  • The spoiler toggle swaps the prompt. The spoiler-free prompt rules out plot reveals before generation, so there’s nothing to filter afterwards.
  • It never shows an error. If the call fails, the page falls back to a templated paragraph built from the film’s rating and release year.

Community

People vote, suggest films, and build public playlists with share links. Suggestions land in admin promotion and demotion queues that decide what joins or leaves the curated list. A Sanity-backed blog holds longer picks.

What’s next

The site runs PostHog and Clarity, but I haven’t published usage numbers yet. That’s the next update to this page: weekly users, votes per week, and an eval for the score itself, a hand-labeled set of films I’d call underrated, checked against where the formula ranks them.