Skip to content

Media discovery and playback project · 2025

OtakuHaven

A React media application for discovering TMDB titles, playing movies and TV episodes through switchable embedded players, resuming supported playback, and syncing saved lists with Firebase.

Contribution
Frontend architecture · API and Firebase integration
Build
Independent product · 2025
otakuhaven.aadilinamdar27.meOpen live
OtakuHaven home page showing its purple discovery hero and trending entertainment catalogue
The projectMedia discovery and playback

I built OtakuHaven as a complete browsing-to-watching experience: discover a title, inspect its details, play a movie or episode, resume supported playback, and keep a personal library.

Implemented experience

What a user can do

These flows are traced directly from the routes, hooks, player controllers, and Firebase state in the repository.

01

Browse the catalogue

Explore trending, popular, top-rated, and genre-led movie and television collections backed by live TMDB data.

02

Search across media

Search movies, television, or both with a 300 ms debounce and progressively load additional result pages.

03

Play a movie

Open a movie detail route, review its metadata, jump to the player, and switch among three embedded playback providers.

04

Choose a season and episode

Browse TMDB season data, select an episode from its artwork and metadata, and keep the current selection in the URL.

05

Resume and save

VidLink playback events are stored locally for resume, while signed-in users can save titles to cloud-synced lists.

06

Manage a personal library

Use the protected profile to review or remove watchlist and favourite titles and return directly to their detail routes.

Code architecture

How the project is connected

One clear path connects discovery, title details, playback, and the personal library while keeping public catalogue data separate from private account state.

OtakuHaven runtimeSource-verified flow
DiscoverBrowse rows or run a 300 ms search.
Open a titleResolve a typed movie or TV route.
WatchChoose a provider and an episode.
Keep contextResume playback or save the title.
React interfaceFour focused surfaces
Discovery + searchMovie detailsTV + episodesPersonal library
Application coreOne typed media experience
TanStack RouterLazy routes · URL state
TMDB hooksLoading · paging · details
Player controllerProvider · season · episode
Auth contextSession · saved collections

Catalogue, playback, local resume, and authenticated account state stay separate so each can change without disturbing the others.

Connected services
TMDBCatalogue and artwork
PlaybackVidLink · Embed API · VidSrc
FirebaseAuth and Firestore
VercelAnalytics and performance
Three core journeys

A quick overview of how someone moves through the experience.

01Find something to watch
  1. 1Browse or search
  2. 2Open a title
  3. 3Choose movie or episode
  4. 4Start watching
02Continue watching
  1. 1Start playback
  2. 2Progress is remembered
  3. 3Return later
  4. 4Resume playback
03Save for later
  1. 1Sign in
  2. 2Save a title
  3. 3Sync to account
  4. 4Open from profile
Public catalogue data Private user state Third-party playback
Verified usage snapshot

How people are using it

More than a year after launch, the project has reached over 400 visitors. The latest 30-day snapshot adds a focused view of engagement, geographic reach, and platform mix.

400+Visitors

Cumulative reach since launch

200+Page views

Latest 30-day snapshot

28%Bounce rate

Latest 30-day snapshot

9Countries

Latest 30-day snapshot

Geographic reach

An international audience

Latest 30 days
9

Countries across Europe, Africa, North America, and Asia.

  1. Greece38%
  2. Rwanda21%
  3. United States16%
  4. India14%
  5. Five more markets11%
Environment

Devices and systems

Devices

Desktop71%

Mobile29%

Operating systems

Windows60%

Android26%

Mac10%

iOS3%

Measured now

Page traffic and performance telemetry are mounted once at the React root.

The 400+ cumulative visitor figure is supplied from the project’s lifetime reach. Engagement, geography, and platform values use the latest 30-day Vercel Analytics snapshot; country shares are rounded. Custom events are not currently configured.

Implementation

Engineering decisions

One media model

The TMDB service transforms different movie and TV payloads into shared TypeScript shapes before they reach the interface.

Route-aware episode state

Season and episode selections update query parameters, so refreshes and shared URLs preserve the current viewing context.

Playback fallback

VidLink is the default source, with Embed API and VidSrc available from the same player surface instead of separate pages.

Public data, private state

TMDB catalogue requests remain public while Firebase Authentication and Firestore handle only user-specific saved data.

Project stack

Tools used

React 19TypeScriptVite 7TanStack RouterTMDB APIFirebase AuthCloud FirestoreFramer MotionTailwind CSS
Current scope

The protected profile is the implemented collection-management screen. Dedicated watchlist and favourites routes are still placeholders, and playback availability depends on third-party embed providers.

Project links

Explore the implementation.

Open projectView source
Resume