Case file · Product dossier

Rev. 03 · 2 Oct 2026

FrameSouth picks tonight's three.

Pick a mood and FrameSouth hands you three Telugu, Tamil, Malayalam or Kannada films: the best match, the runner-up and a wildcard, each with the reason it fits and where it streams in India. 3,964 real releases from 2022 to 2026, with posters, cast and providers from TMDB where a film is matched.

Captured from productionThe question first, the moods around it.
ProductFrameSouth / 2026
BuildBeta
StatusLive
Films3,964
Industries4
Years2022 – 2026
Posters2,192
Streaming1,398
Tests57 + 38/54

Three, not fifty

Every surface that recommends shows few films, large, with a reason. Tonight's 3 is a best match, a great match and a wildcard of a different kind.

Facts from TMDB, judgement ours

Posters, stills, cast and Indian streaming come from TMDB and JustWatch. Moods, matches, reasons and Cinema DNA are computed by FrameSouth, never invented.

Says what it does not know

A film with no listed service says "Streaming availability isn't currently listed for India". A film TMDB does not know keeps its generated artwork.

Scroll to inspect

01 The brief The problem worth solving

Choosing a film takes longer than watching one.

Every streaming app answers "what should we watch?" with a grid of rectangles and a scroll bar. The evening goes on browsing, and the question is still open at eleven.

For South Indian cinema the scroll is worse. Four industries release hundreds of films a year each, split across a dozen Indian streaming services and their ad and rental tiers, and the household deciding tonight may not share a language. FrameSouth was rebuilt on 1 October 2026 around a single job, and on 2 October dressed as a cinema: turn a mood into three films you can start now.

01

The scroll is the problem

A catalogue that shows everything makes you do the choosing. FrameSouth does the ranking and shows three films, each with the reason it was picked.

02

Four cinemas, one evening

Tollywood, Kollywood, Mollywood and Sandalwood are separate industries with separate audiences. Language is a choice you make, never an assumption the product makes.

03

"Where is it streaming?"

Availability is scattered across Netflix, Prime Video, JioHotstar, aha, ZEE5, Sun NXT, SonyLIV, ManoramaMAX, ETV Win and more. FrameSouth shows what JustWatch lists for India, and the date it was checked.

3,964Films: every release we could verify for 2022 to 2026 across four industries.
2,581Films with enough record for FrameSouth to read their mood; it never recommends one it cannot read.
1,398Films you can stream in India today on a subscription, ad-supported or free tier, as JustWatch lists them.
2,218Films matched to TMDB with high confidence, which is where their posters, stills and cast come from.

02 The product Built, not imagined

One question, three answers.

Everything below is a capture of the running application. A mood goes in; three films come out on a projected screen, each with a match score, a reason, and the services it is on.

Tonight's 3

A score, a reason, and somewhere to watch it.

The ranking reads each film's derived vibe (how dark, funny, emotional, fast or tense it is) against the mood you chose, and drops anything you have already seen or turned down. The top two take the first frames; the third is a wildcard, the film further down with the most hidden-gem signal and a different lead genre. After a few saves, swipes or picks the matches lean towards your taste.

Only what it can read

A film with too thin a record to score is never recommended. 2,581 of the 3,964 films clear that bar today, up from 1,927 before TMDB filled the gaps; the rest stay findable through Discover and search.

Tonight's 3 · 1440 wideOn-premises lane, 2 Oct 2026
Tollywood844Telugu cinema: 95, 172, 253, 184 and 140 a year from 2022 to 2026. 390 streaming in India.
Kollywood1,082Tamil cinema: 228, 256, 218, 255 and 125 a year from 2022 to 2026. 455 streaming in India.
Mollywood1,097Malayalam cinema: 260, 248, 234, 212 and 142 a year, plus one TMDB dates to 2021. 393 streaming in India.
Sandalwood941Kannada cinema: 163, 178, 208, 239 and 150 a year, plus three TMDB dates to 2021. 160 streaming in India.
Film · Where to WatchCaptured from production, 2 Oct 2026

Where to Watch

Which service has it in India, and who says so.

Every film page carries a Where to Watch row, grouped into stream, rent and buy, with the services' own logos, the source and the date it was checked. No prices and no comparisons, only the answer to "where is it?". A film with nothing listed says so rather than guessing.

Now in both lanes

3,341 listings for 1,458 films: 3,223 from JustWatch through TMDB, and 118 kept from the films' own Wikipedia release sections where TMDB lists nothing. Production's own homepage counts match the on-premises database film for film.

On a phone

Built for the sofa, not the desk.

A bottom navigation with five targets (Tonight, Discover, Play, Saved and Search), the mood orbit above the fold, and film pages that lead with the still and the poster. Two routes still scroll sideways at 375 pixels; the ledger below names them.

Home · 390×844
Film · 390×844

03 Capabilities What the beta can actually do

What the beta can actually do.

Six capabilities, each backed by a named test that has run. The evidence for every one, and what is still missing, is in the build ledger below.

01

Tonight's 3

A mood in; a best match, a great match and a wildcard out, each with its score, one-sentence reason and services. Personal once you have a few interactions.

Proven: honours language and time budget; ranks intense above feel-good when asked

02

Swipe and This or That

Swipe a deck by button or key: interested, not for me, seen it, save. This or That pits two films for seven rounds and says what each pick taught it.

Proven: battle pairs are two different films; votes aggregate with their opponent

03

Cinema DNA

Your saves, swipes and picks become an organic shape and a taste profile: language shares, top genres, the watcher you are. No account; one anonymous cookie.

Proven: no DNA without enough evidence; language shares sum to about 100

04

Where to Watch

The services a film is on in India, grouped into stream, rent and buy, from JustWatch through TMDB, with the date it was checked. Each service named once.

Proven: ad tiers and channels fold into their service; providers read into filters

05

Discover and search

Discover opens on a mood and narrows by language, genre, runtime, year, platform, rating and people. "Malayalam thriller on Netflix rated 7+" is read as filters.

Proven: reads language, genre, runtime, year, nickname, moods, providers and ratings

06

Careful TMDB matching

A film takes TMDB's facts only on a high-confidence match. Medium matches wait for a person at /admin/tmdb, and a manual decision sticks.

Proven: never attaches another language; rejects a title when the directors disagree

04 System Two spines

Two spines: one that loads, one that answers.

Films arrive as a file, and their facts are matched and synced from TMDB offline, by scripts, never in a request. A visitor's request goes to Next.js, to the API, to PostgreSQL, and stops. The one outside host a browser touches is TMDB's image CDN, for posters, stills and service logos. Hover or focus any box.

FrameSouth architecture Above the line, a loading spine: public sources are researched into a CSV file, uploaded through a password-protected import page, whose importer validates every row and writes to PostgreSQL; alongside it, server-only scripts match each film to TMDB and sync its facts, images, credits and Indian streaming providers into the same database, recomputing FrameSouth's own mood scores. Below the line, an answering spine: the browser reaches Next.js, which reaches the API layer, which reaches PostgreSQL and stops. The browser's only other request is to TMDB's image CDN for posters, stills and logos. LOAD — OFFLINE, REVIEWABLE, NEVER IN A REQUEST PATH ANSWER — WHAT A VISITOR ACTUALLY TOUCHES Public sources Wikipedia · Wikidata the original catalogue of 3,964 films /admin/data CSV upload, rejects, never repairs preview first: new, updates, rejected TMDB API facts · images · credits · providers India availability from JustWatch tmdb:match · sync server-only, key never shipped high attaches, medium waits for review PostgreSQL films · streaming services · availability · viewers · interactions BELOW THIS LINE, NO DATA CALL LEAVES FRAMESOUTH Browser images straight from TMDB's CDN one anonymous cookie holds the viewer id Next.js pages rendered from data generated artwork where TMDB has no image API layer match · swipe · battle · search · me errors return {error: string} and leak no internals and stops — no model, no live lookup in the request path Deployment — one build, two homes Vercel (Mumbai) + Neon PostgreSQL · or systemd on loopback behind this gateway

Why mood is scored offline

Each film's vibe (dark, funny, emotional, fast, tense) and a confidence score are derived from its genres, story and runtime when it is imported and again whenever TMDB fills a gap. Matching then ranks numbers already on the row, so an answer never waits on a model or a third party, and the same film always scores the same.

Why matching is cautious

Many South Indian films share a title across languages and years. A film takes TMDB's facts only when the title, language and year agree and, where it is close, the director agrees too. 2,218 matched that way; 18 wait for a person; 1,728 keep their original record and their generated artwork.

05 The build ledger Requirement vs. reality

What we said we'd build. What actually exists.

Every stated requirement of the discovery app, and what exists today. Where something is partial or not built, it says so and says why. Each row names the test or the run that closed it.

The cinematic redesign landed on 2 October, and the browser suite has not caught up with it: 38 of its 54 tests pass on the current build. The rows below say which failures are stale tests and which are real defects.

Ledger derived from test runs and the catalogue database, 2 Oct 2026

ManifestFrameSouth · Beta / 2026

RequirementWhat exists, and how it was verifiedStatus
A mood becomes three filmsTonight's 3 ranks against the chosen mood and explains each pick in one sentence. Unit tests assert it honours language and time budget, filters on the real runtime, ranks intense above feel-good when asked, honours exclusions, and never recommends a film it cannot read. The browser walkthrough still looks for the old mood chips and fails; the flow is shown working in the recording below.Built
It learns from useSaves, swipes, picks and "not feeling it" are recorded against an anonymous viewer id, and matches lean towards that taste. A test asserts disliked genres stay out of the taste profile. Viewing and recommendation history are kept per browser.Built
Swipe, This or That, Audience BattlesBattle pairs are two different films and boards aggregate real votes with their opponent, both unit-tested. Swipe maps right, left and up to interested, not for me and seen it, and S to save; This or That explains each pick. The browser swipe test still presses the retired Pass button and fails; keyboard swiping is shown in the recording.Built
Cinema DNA and a library, no accountMy Films holds Watchlist, Watched, Liked, Not for me, Recently viewed and Recommendation history. DNA draws an organic shape from the viewer's own choices, returns nothing without enough evidence, and its language shares sum to about 100 (unit tests).Built
Where to watch in India3,341 listings for 1,458 films: 3,223 from JustWatch through TMDB and 118 from Wikipedia release sections. 1,398 films stream on a subscription, ad or free tier, the same per-language figures production's homepage shows. Tests assert each service is named once and that providers read into search filters. 2,506 films list nothing, and their pages say so.Built
Four industries, 2022 to 20263,964 films: 844 Telugu, 1,082 Tamil, 1,097 Malayalam, 941 Kannada. TMDB's release date puts four of them in 2021; they are kept, under that year.Built
Real facts and images for every film2,218 films are matched to TMDB with high confidence: 2,192 carry a poster, 1,904 a still, 2,218 cast and crew. Seven tests cover matching, including never attaching another language. 18 medium matches wait for review at /admin/tmdb, and 1,728 films have no TMDB match, keeping their original record and generated artwork.Partial
A readable record for every film2,701 films carry a synopsis, 2,581 genres and 2,339 a runtime, after TMDB filled empty fields. FrameSouth can read the mood of 2,581, up from 1,927. A rating is shown only with 20 or more votes, which 176 films have.Partial
Search and Discover that read intentSearch reads language, genre, runtime, year, industry nickname, moods, providers, "streaming" and "rated 7+", and leaves names as free text (unit tests). The browser tests that the results page shows how the query was read, and that an empty result is a designed state, both pass. The search palette keeps the first keystrokes typed while it opens.Built
Collections, the atlas, Surprise meEleven collections, each asserted to hold films. Surprise me reveals a film from any page and respects its constraints, in a passing browser test. The South Atlas replaced the old Cinema Map, whose browser test now fails on its retired selector.Built
Load films without a developerA CSV upload at /admin/data and a data-quality and manual-matching page at /admin/tmdb, behind one shared admin check; the browser test confirms the area does not exist without credentials. Nine importer tests cover preview, rejection and skipping unchanged films.Built
Images through one doorThe old no-imagery rule is retired. Film images may be rendered only by one component and built by one module, and lint and the guarantee check enforce it; both pass. A failed or missing image falls back to FrameSouth's generated artwork. Six browser tests still assert zero images and fail by design until they are replaced.Built
Phones first, accessible throughoutAll 17 contrast pairs pass WCAG AA; every route has one h1 and its landmarks; the skip link and the focus ring pass in the browser. Real defects found on 2 Oct: search results overflow by 37 pixels at 375 wide and an industry page also scrolls sideways; under reduced motion, the home, Swipe and Discover pages still animate. Not yet fixed.Partial
A design that is the product's ownA dark room with one light, locked in design.md: Bodoni Moda and Geist, coral and amber, the Mood Orbit, Tonight's 3 on a projected screen, and one lazy-loaded Three.js projector with a CSS stand-in. Captured above from production; no automated design audit has been run on it yet.Built
Old links keep workingThe archive's year and industry URLs redirect to their new homes, and an unknown film is a real 404; both browser tests pass.Built
Two deployment lanesCloud: Vercel in Mumbai with Neon PostgreSQL, deployed from the current commit on 2 Oct and serving the redesign, TMDB images and providers. On premises: the same build under systemd, behind this gateway's mailed access code, on its own database.Built
A browser suite that matches the product38 of 54 pass on the on-premises build. Of the 16 failures, six assert the retired no-imagery rule, five look for controls the redesign renamed, and five are the real defects named above. The suite has not been re-run against production for this release.Partial
A profile that follows youThere are no accounts, so saves, history and DNA stay in the browser that made them. Sign-in and sync are not built.Roadmap
Availability kept current on its ownA refresh command re-reads providers from TMDB, and every listing shows the date it was checked. Nothing runs it on a schedule yet; today it is run by hand.Roadmap
The films TMDB knows that FrameSouth does notA dry discovery run found 1,289 TMDB films from 2022 to 2026 that are not in the catalogue. None is imported until that is decided.Roadmap
Years before 2022, trailers, certificationAdding a year is data work, not a code change, but the research for earlier years has not been done. Trailers and certification are not shown.Roadmap
13Built
4Partial
4Roadmap
57Unit and integration tests, all passing
38/54Browser tests passing

06 Walkthrough Follow the product

Follow the product.

Four screens past the front door, in the order an evening uses them. Every one is the running build, captured on 2 October 2026.

Watch the recorded session

  1. 01

    Ask

    Choose a mood from the orbit. The room takes its colour, the projector's reels spin, and Tonight's 3 changes on the same page.

    Best match, great match and a wildcard

  2. 02

    Swipe

    One film at a time: interested, not for me, seen it, or save, by button or key. Filter by language. Every answer feeds the match and the DNA.

    Keys: → interested · ← not for me · ↑ seen it · S save

  3. 03

    Settle it

    This or That: two films, pick one, seven rounds, a winner. Press 1 or 2 or an arrow key. After each pick it says what it learned, and every pick is a vote on Audience Battles.

    Real, anonymous votes only

  4. 04

    Wander

    Discover opens on a feeling and narrows by language, genre, runtime, year, streaming service, rating or a director or actor. Or open one of eleven collections, from Malayalam Thrillers to Slow Burns.

    Counts read from the database, never written in the source

    Captured from productionDiscover, 2 Oct 2026

07 Roadmap Where FrameSouth goes next

Where FrameSouth goes next.

Three stages, and no commitments the software cannot already honour. Where the blocker is a source or a decision rather than a feature, it says so.

Now

Live in the deployed build
  • The discovery loopTonight's 3, Swipe, This or That, Audience Battles, Cinema DNA, Surprise me and a library, with no account.
  • 3,964 filmsFour industries, 2022 to 2026, with TMDB posters, stills and cast for 2,218 of them, and eleven collections.
  • Where to WatchOn every film page in both lanes: 1,398 films streaming in India, from JustWatch via TMDB.
  • Two homesVercel with Neon in the cloud, systemd behind a mailed access code on premises: one build, environment variables apart.

Next

Known work, no decision needed
  • Fix the five defectsTwo routes that scroll sideways at 375 pixels, and three pages that still animate under reduced motion.
  • Catch the tests upReplace the no-imagery assertions with image-door checks and point the five stale tests at the redesigned controls.
  • Review 18 matchesThe medium-confidence TMDB matches wait at /admin/tmdb.

Later

Needs a decision or a source
  • 1,289 more filmsTMDB lists them for 2022 to 2026; whether to import them is a decision still open.
  • Scheduled availabilityThe provider refresh exists; running it on a schedule does not.
  • Accounts and syncToday a profile lives in one browser. Carrying it across devices means sign-in, which FrameSouth deliberately does not have yet.

08 Deployment From repository to running system

Where it runs today.

FrameSouth runs in two places from one codebase, switched by environment variables alone. No code differs between the lanes, only which database the build is pointed at and whether a gateway stands in front of it.

Lane 01 · on premises

Your machine, your database.

The same build runs under systemd on a private machine against a project-owned PostgreSQL cluster, listening on loopback and reached only through this gateway. The gateway mails an access code and issues a signed, expiring cookie. Film images still load from TMDB's CDN.

  1. 01BUILDone Next.js build, no lane-specific code
  2. 02RUNsystemd, restarts on failure, loopback only
  3. 03GATEcode mailed, never printed on any page
  4. 04CHECKbrowser suite, 38 of 54 on this build

Lane 02 · cloud

Nothing to install.

The identical build on Vercel, served from the Mumbai region and backed by Neon PostgreSQL with the same 3,964 films and the same streaming listings. Open, deliberately: it holds public film metadata and anonymous activity tied to a random cookie, with no names, emails or accounts.

  1. 01BUILDthe same build, environment variables apart
  2. 02HOSTVercel, Mumbai region
  3. 03DATANeon PostgreSQL 18
  4. 04SYNCcatalogue changes staged and applied in one transaction
Production
framesouthapp.manp.space · Vercel, Mumbai region, Neon PostgreSQL
Application (on-prem)
systemd on a loopback port, restarts on failure
This gateway
one loopback port for the site, the access gate and the application proxy
Database (on-prem)
PostgreSQL 16, project-owned; the tests use a separate, empty database

What is never in the repository

Secrets live in gitignored environment files on premises and in encrypted project variables in the cloud, including the admin password and the TMDB key. The key is read only on the server; nothing in the repository or the browser contains a credential.

Two lanes, two honest claims

The on-premises lane genuinely closes the door: the application listens on loopback and cannot be reached except through the gateway. The cloud lane is open and says so. In both, a visitor's browser fetches film images from TMDB, which sees an ordinary image request.

09 The proof

Don't take the documentation's word for it.

Pick a mood. If none of the three is right, press Not feeling it, and see how many it takes before you would actually watch one.

Live beta · 3,964 films · 4 industries · 1,398 streaming in India

The running application, recorded end to end

A real 66-second session on the on-premises lane, 2 October 2026: the Intense mood, Tonight's 3 and its second frame, that film's page, Discover narrowed to Romantic, three keyboard swipes, two This or That rounds, and the South Atlas lit for Malayalam. Nothing is mocked or sped up, and there is no voiceover.