Psychological Horror Movie Recommender
Horror movie recommendations are broken. Netflix gives you "because you watched Scream." IMDb shows top-rated lists. Friends say "oh you HAVE to watch this." None of it is personalised to what actually scares YOU.
In 2026, we have AI that can write code, generate images, and hold conversations — but we're still picking horror movies based on star ratings and vague genre tags. The challenge was: how do you create a recommendation engine that understands personal fear on a psychological level?
The goal wasn't just another movie database. It needed to feel like an experience — unsettling, theatrical, memorable. It had to analyse not just preferences (slasher vs supernatural) but actual phobias and psychological triggers. And it needed to present recommendations in a way that felt like a challenge: "Can you handle this?" So I built an AI entity called "The Witness" — psychological profiling disguised as entertainment.
I started by deconstructing how fear works. Horror subgenres trigger different anxieties. Fear tolerance isn't binary — it's a spectrum from "I scare easily" to "I have no soul." Personal fears are the key: someone afraid of isolation won't fear the same films as someone afraid of losing control.
Next came the AI strategy. I needed Gemini to act as an omniscient horror entity — calm, unsettling, judgmental. Not a friendly chatbot. The prompt engineering took days: how do you make AI recommend real films (not hallucinate titles), reference personal fears specifically, and write in a theatrical horror voice?
I prototyped the multi-step questionnaire first: fear tolerance (4 levels with skull icons), subgenre selection (6 categories), and personal fear input (free text). The TMDB integration added movie posters, trailers, and metadata. The magic was in AI-generated elements: intensity percentage, survival rate (how many finish the film), and a "most quit at" timestamp.
The questionnaire uses a three-step process: select fear tolerance (visual skull indicators), choose horror subgenre (grid of 6 categories), and describe your deepest personal fear. Each step includes "The Witness is watching" progress indicators and horror visual effects — blood drips, film grain overlay, VHS scanlines.
The recommendation engine sends your profile to Gemini AI, which analyses your fear patterns and matches you to a real horror film. It returns the movie title, intensity score (0-100), survival rate ("52% finish this film"), most quit at timestamp ("58:41 — when viewers typically abandon"), and a personalised explanation in The Witness's voice.
UI design leans into analog horror: shadow-demon background, blood drip animations with staggered timing, film grain, VHS scanlines, red glow on selections, and creepy serif typography.
Final Product
What I Learned
Subtlety is scarier than aggression. A single blood drip. Film grain at 4% opacity. Scanlines moving slowly. Less is more when building dread.
Getting Gemini to speak as "The Witness" required dozens of iterations. Too friendly? Breaks immersion. Too aggressive? Feels gimmicky. The sweet spot: omniscient, calm, subtly judgmental.
Hit Gemini's free tier hard during testing. Lesson: separate API keys per project, implement retry logic with exponential backoff, and plan for paid tiers from the start.
Users cared more about "Only 48% finish this film" than whether the recommendation was technically perfect. Psychology beats algorithm precision.
This could've been a simple form → results page. The blood effects, ominous copy, and creepy aesthetic make it shareable and memorable. Portfolio pieces need theatre, not just function.
Next step
See more of my work