When your user opens a Discovr-powered app, they sign in, pick a profile, and browse content. This guide walks through the canonical navigation model so your app feels native and predictable. The core pattern is simple: start with a profile selector, then browse tabbed pages (Home, Movies, Series). Tapping a navigation row (like “Romance” or “Animation”) drills into a new page with that filter applied—giving you a natural breadcrumb stack. Discovr enforces a three-level depth limit to prevent navigation so deep users can’t find their way back.Documentation Index
Fetch the complete documentation index at: https://docs.discovr.media/llms.txt
Use this file to discover all available pages before exploring further.
This guide assumes an active session and profile. If you haven’t signed in a user yet, start with Sessions, Profiles & Sign Out. Code snippets use TypeScript, Kotlin, and Swift tabs—select your language to follow along.
Profile Select → Home
After sign-in, your user sees a profile picker. This is your chance to load the user’s profiles and let them choose one.Fetch available profiles
Call
getProfiles() to get the user’s profiles.Select a profile
When the user picks a profile, call
selectProfile(). This starts a profile session that all page and row fetches use.Home/Movies/Series Tabs
Once on Home, users typically see top-level tabs (Home, Movies, Series) that let them browse by media type. Each tab is a separate page with different filters. Create each page once and reuse its ID. Switching tabs doesn’t recreate the page—it just swaps the visible rows.Drill-Down with Navigation Rows
Some rows are navigation-type rows (not media). Instead of displaying movies, they display drill-down destinations: “Romance”, “Animation”, “Trending”, etc. When the user taps one, you push its pre-created page ID onto your navigation stack and load it—no page creation needed.Identify navigation rows
Rows come in types. Navigation rows have
type: "navigation". When you fetch rows, check the type.Fetch items in the navigation row
Call
getRowItems() to get the destinations in that row (e.g., genre names). Each navigation item already carries a pageId.Breadcrumbs
Each page’stitle field is the breadcrumb for that level—“Home”, “Movies”, “Anime”, “Romance”. The API returns it directly from getPage(), so you don’t need to maintain a separate label list.
To build the full breadcrumb trail (“Home > Movies > Anime”), map your navigation stack (page IDs you’ve already loaded) to their titles:
Back Behavior
When the user taps back, pop the current page ID from your stack and redisplay the previous one. The previous page’s snapshot is still cached in Discovr, so you get the same results without refetching.Three-Level Depth Limit
Discovr enforces a maximum of three nesting levels (not counting the root Home). Think of it as:- Level 1: Home / Movies / Series (root pages)
- Level 2: Romance / Animation (drill from Level 1)
- Level 3: Trending Romance (drill from Level 2)
Continue Watching on Home
Most apps show a “Continue Watching” row between the hero and recommendation rows on the Home page. This row comes from profile context, not from the page itself. Fetch it separately and insert it into your Home UI:Putting It Together
Here’s a skeleton of how navigation typically flows in a Discovr app:- User signs in
- Profile picker shows available profiles
- User selects a profile → Home loads with hero + rows
- Tabs (Home, Movies, Series) each have their own page ID
- User taps a navigation row item (e.g., “Romance”) → new page is created and pushed onto the stack
- Breadcrumb updates (Home > Movies > Romance)
- User taps back → pop the stack, redisplay the previous page
- Continue Watching appears between hero and rows on Home
Related Reading
- Sessions, Profiles & Sign Out — How sessions work and when to refresh
- Session management — why page IDs stay the same within a session and how to handle expiration
- Lazy Loading & Performance — Load navigation efficiently
- Pages Overview — Page structure and the hero carousel
- Rows Overview — Row types and pagination
Next: Session management