cd ../projects
Build Passing

Pharos - Universal Media Tracker

A unified 'Letterboxd-style' platform to track and categorize movies, series, books, video games, and anime. Built with Next.js and Supabase.

Next.jsSupabasePostgreSQLGoogle OAuthCloudflareAPI Integration
Pharos - Universal Media Tracker preview

5

Media Types

4+

APIs Integrated

Private/Invite

Access

# Overview

Pharos was born from a personal frustration: the fragmentation of my digital hobbies. I needed a single place to categorize everything I read, watch, and play, without jumping between Goodreads, MyAnimeList, Letterboxd, and Backloggd.

The name "Pharos" pays homage to the Lighthouse of Alexandria—symbolizing the Great Library and the centralization of all knowledge.

It is a private, invite-only platform where I (and selected friends) can track consumption, manage wishlists, and view statistics. It leverages multiple external APIs to fetch metadata covers and descriptions automatically.

Problem

Digital entertainment tracking is fragmented across niche platforms. There was no single tool capable of handling the distinct metadata needs of books, games, and cinema simultaneously while offering a unified dashboard for personal analytics.

Solution

I engineered a full-stack solution using Next.js and Supabase. The database schema abstracts specific media attributes into a unified structure, allowing seamless tracking across 5 different media types. The system features a strict invite-only authentication flow to maintain privacy and control resource usage.

# Features

  • Unified Tracking: Movies, Series, Books, Video Games, and Anime in one DB
  • Multi-API Integration: Fetches metadata from specialized providers (TMDB, IGDB, OpenLibrary, etc.)
  • Role-Based Access: Invite-only system where Admins must approve new accounts
  • Secure Auth: Google OAuth integration with email verification via Supabase
  • Personal Dashboard: Stats, 'To-Do' / Wishlists, and history logs
  • Global Search: Unified search bar that queries multiple external sources simultaneously

# Screenshots

Unified Dashboard

Central dashboard showing stats and recent activity across all media types.

Unified Search Interface

Search engine aggregating results from multiple external APIs (TMDB, IGDB, etc.).

Media Detail View

Detail view showing metadata, status selector, and user rating.

Wishlist Management

Grid view of the user's backlog and wishlist.

Challenges

  • >Data Normalization: Creating a database schema flexible enough to store attributes for a Book (pages, author) and a Game (platform, developer) in the same table structure.
  • >Implementing a custom 'Invite-Only' workflow on top of standard OAuth authentication.
  • >Handling rate limits and asynchronous data fetching from 5+ different external APIs.

Learnings

  • >Advanced usage of Supabase Row Level Security (RLS) for user data privacy.
  • >Designing polymorphic database relationships.
  • >Managing complex asynchronous state when aggregating data from multiple third-party sources.

Tech Stack

Full Stack

Next.js (App Router)ReactTypeScript

Backend & Auth

SupabasePostgreSQLGoogle OAuth

Infrastructure

VercelCloudflare DNS

Data Sources

TMDB APIIGDB APIGoogle Books APIJikan (Mal) API

Quick Info

Status

live

Started

January 2026