Back

The Witness

2026
Solo Developer
Next.js 15 · TypeScript · Tailwind CSS · Google Gemini API · TMDB API · YouTube Data API · Vercel
01
The Challenge

Identifying the need

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.

02
Research & Ideation

Mapping out the solution

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 Witness research 1
03
The Product

The Product

The Witness product 1

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.

02
Tech

Tech Stack

Framework
Next.js 15
Language
TypeScript
Styling
Tailwind CSS
AI
Google Gemini API
Movie Data
TMDB API
Video
YouTube Data API
Deploy
Vercel

Key Takeaways

01

Horror UI requires restraint, not excess

Subtlety is scarier than aggression. A single blood drip. Film grain at 4% opacity. Scanlines moving slowly. Less is more when building dread.

02

AI prompt engineering is creative writing

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.

03

Rate limits are real constraints

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.

04

Social proof drives engagement more than accuracy

Users cared more about "Only 48% finish this film" than whether the recommendation was technically perfect. Psychology beats algorithm precision.

05

Theatrical presentation matters for portfolio work

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.

See more of my work

Back to projects