PersonalLive

MyMangime

Anime & manga discovery platform with multi-source enrichment and deep tag filtering

ReactTypeScriptFastAPIPostgreSQLFirebaseRedisDocker

The Problem

Discovery fatigue—users waste time bouncing between TikTok/Reddit/YouTube/MAL getting inconsistent recs and spoilers. Data is fragmented across platforms (AniList/MAL/Kitsu each have different coverage). Discovery tools feel shallow—'Trending/Top' pages recycle the same titles. Generic recs don't fit individual taste. And tracking progress is scattered and friction-heavy.

The Solution

Built a unified discovery flow with deep tag taxonomy (300+ tags with severity levels for vibes, tropes, content warnings), multi-source enrichment pipeline that normalizes data into one clean source-of-truth, and a guided quiz that maps vibe selections to genre/tag bundles. Fast add-to-list plus status tracking makes progress management frictionless.

Product Decisions

  • Discovery-first approach: finding new content is as important as tracking
  • Deep tag taxonomy with 300+ canonical keys grouped by purpose (quiz/avoid/hidden) with severity levels
  • Guided quiz maps vibes to weighted genre/tag bundles—not just genre checkboxes
  • Multi-source enrichment: seed from AniList, enrich from Kitsu, fallback to MAL
  • Consent-aware: behavior signals only when consented; guests get recommendations via explicit quiz answers

Architecture

Frontend

React 18 + TypeScript, Vite, Tailwind CSS, React Query for server state, Zustand for client state

Backend

Python 3.11+ / FastAPI with async SQLAlchemy, repository pattern for data access

Database

PostgreSQL 15 for normalized entities, Redis for caching, Alembic for migrations

APIs

AniList (seed), Kitsu (enrichment), MAL (fallback) with rate limiting (MAL ~1req/s, Kitsu 0.7s delay)

Other

Render hosting + Firebase Auth, Docker deployment, consent snapshots for compliance

Technical Highlights

  • Multi-source enrichment pipeline: AniList → Kitsu → MAL with staleness rules + error cooldowns to avoid API hammering
  • Tag catalog: 1000+ lines of canonical key mappings, ui_groups (quiz/avoid/hidden), severity levels (none/mild/strong/explicit)
  • Guided discovery quiz: vibe answers map to weighted genre/tag bundles for personalized recommendations
  • Rate limit handling: configurable delays per source (MAL ~1 req/sec, Kitsu 100 req/min)
  • Entity resolution: canonical IDs, alias handling, duplicate detection across sources
  • Consent-aware architecture: guests get strong recs via quiz without analytics dependency

Results & Outcomes

  • Live production site at mymangime.com
  • Real users with active accounts and usage
  • Demonstrates full-stack shipping: React + FastAPI + PostgreSQL + external API integrations
  • Shows consumer product UX sensibility—not a developer demo

What I'd Do Next

  • Social features: follow users, share lists
  • AI-powered recommendations based on watch history
  • Community features: reviews, discussions
  • Browser extension for quick adding