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
React 18 + TypeScript, Vite, Tailwind CSS, React Query for server state, Zustand for client state
Python 3.11+ / FastAPI with async SQLAlchemy, repository pattern for data access
PostgreSQL 15 for normalized entities, Redis for caching, Alembic for migrations
AniList (seed), Kitsu (enrichment), MAL (fallback) with rate limiting (MAL ~1req/s, Kitsu 0.7s delay)
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