Skip to content

Mitzseen/mymangime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

65 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MyMangime

FastAPI React TypeScript PostgreSQL Live License: Proprietary

Anime & manga discovery + tracking platform that reduces "what to watch/read next" friction. Aggregates metadata from multiple sources, normalizes it into a clean canonical model, and provides deep tag-based discovery with personalized quiz recommendations.

πŸ”— Live at mymangime.com


🎯 Problems MyMangime Solves

Problem How MyMangime Solves It
Discovery fatigue β€” "I don't know what to pick" Guided quiz + deep tag filtering (not just genresβ€”vibes, tropes, content warnings)
Fragmented data β€” bouncing between MAL/AniList/Kitsu Multi-source enrichment pipeline normalizes data into one clean source-of-truth
Shallow discovery tools β€” same "Top/Trending" recycled 300+ tags with severity levels, "Surprise Me" with actual diversity
Tracking friction β€” forgetting progress, scattered lists Fast add-to-list + status states + progress updates
Personalization is weak β€” generic recs don't fit your taste Quiz-driven recommendations without requiring analytics consent
Community signal is noisy β€” spoiler-heavy reviews Structured ratings with spoiler tagging + aggregated scores

✨ Key Features

Discovery

  • Deep Tag Taxonomy β€” 300+ canonical tag keys grouped by purpose (quiz/avoid/hidden) with severity levels
  • Guided Discovery Quiz β€” Vibe-based questions that map to genres + tags (Action & Adventure β†’ Battle, Tournament Arc, etc.)
  • "Surprise Me" β€” Diversified results, not just top-10 recycling
  • Hard Filters First β€” Maturity, commitment, status, avoid-tags before ranking

Tracking

  • Status States β€” Watching, Completed, On Hold, Dropped, Plan to Watch/Read
  • Progress Updates β€” Episode/chapter tracking
  • List Imports β€” MyAnimeList, AniList, Kitsu support

Data Quality

  • Multi-Source Enrichment β€” Seed from AniList, enrich from Kitsu + MAL
  • Entity Resolution β€” Canonical IDs, alias handling, duplicate detection
  • Staleness Rules + Error Cooldowns β€” Don't hammer APIs, graceful degradation

πŸ› οΈ Tech Stack

Frontend

Technology Purpose
React 18 + TypeScript Component-driven UI
Vite Build tooling
Tailwind CSS Styling
React Query Server state management
Zustand Client state
React Router 6 Routing

Backend

Technology Purpose
Python 3.11+ / FastAPI API framework
SQLAlchemy 2.0 (Async) ORM with repository pattern
PostgreSQL 15 Primary database
Redis Caching layer
Alembic Database migrations

Infrastructure

Technology Purpose
Render Backend hosting + PostgreSQL
Firebase Hosting Frontend CDN
Firebase Auth User authentication
Docker Containerized deployment

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     REACT FRONTEND                           β”‚
β”‚  Discovery Quiz β”‚ Browse β”‚ Search β”‚ Lists β”‚ Detail Pages     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚ REST API
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    FASTAPI BACKEND                           β”‚
β”‚  /anime β”‚ /manga β”‚ /discovery β”‚ /tags β”‚ /lists β”‚ /reviews   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              MULTI-SOURCE ENRICHMENT PIPELINE                β”‚
β”‚  AniList (seed) β†’ Kitsu (enrich) β†’ MAL (fallback)           β”‚
β”‚  Rate limiting: MAL ~1req/s, Kitsu ~100req/min              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    DATA LAYER                                β”‚
β”‚  PostgreSQL (normalized entities) β”‚ Redis (cache)           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“Š Engineering Highlights

Multi-Source Data Pipeline

  • AniList as seed source, Kitsu for enrichment (trailers, categories, streaming links), MAL as fallback
  • Rate limit handling with configurable delays (MAL ~1 req/sec, Kitsu 0.7s between requests)
  • Staleness rules + error cooldowns to prevent API hammering

Tag Catalog System

  • 1000+ lines of canonical key mappings (GENRE_, TAG_)
  • Tags grouped by ui_group: quiz (shown in discovery), avoid (content warnings), hidden (internal)
  • Severity levels: none, mild, strong, explicit
  • Quiz answers map to weighted genre/tag bundles

Consent-Aware Architecture

  • Behavior signals only when user consents
  • Guests get strong recommendations via explicit quiz answers (no analytics dependency)
  • Consent snapshots stored for compliance

Production Operations

  • Alembic migrations for schema changes
  • Repository pattern for clean data access
  • Structured logging with correlation IDs
  • Firebase Auth with server-side token verification

πŸš€ Getting Started

Docker (Recommended)

git clone https://github.com/Mitzseen/mymangime.git
cd mymangime
docker-compose up -d

Manual Setup

# Backend
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload

# Frontend
cd frontend
npm install && npm run dev

πŸ“ Project Structure

mymangime/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ api/v1/endpoints/   # Route handlers
β”‚   β”‚   β”œβ”€β”€ models/             # SQLAlchemy models
β”‚   β”‚   β”œβ”€β”€ repositories/       # Data access layer
β”‚   β”‚   β”œβ”€β”€ schemas/            # Pydantic schemas
β”‚   β”‚   β”œβ”€β”€ services/           # External API clients
β”‚   β”‚   β”‚   β”œβ”€β”€ anilist_client.py
β”‚   β”‚   β”‚   β”œβ”€β”€ kitsu_client.py
β”‚   β”‚   β”‚   β”œβ”€β”€ mal_client.py
β”‚   β”‚   β”‚   └── tag_catalog.py  # Canonical tag mappings
β”‚   β”‚   └── data/
β”‚   β”‚       └── guided_questions_v2.json  # Quiz config
β”‚   └── migrations/             # Alembic migrations
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ pages/Discovery/    # Quiz + discovery flows
β”‚   β”‚   β”œβ”€β”€ services/           # API clients
β”‚   β”‚   └── types/              # TypeScript types
└── docker-compose.yml

πŸ“ˆ Resume-Ready Bullets

  • Built a full-stack anime/manga platform with React + TypeScript, FastAPI, and PostgreSQL supporting discovery, tracking, and user lists
  • Implemented multi-source data ingestion + normalization from AniList/Kitsu/MAL, resolving inconsistent titles/IDs into a canonical catalog
  • Designed tag taxonomy with 300+ tags grouped by purpose (quiz/avoid/hidden) with severity levels for content filtering
  • Built guided discovery quiz mapping vibe selections to weighted genre/tag bundles for personalized recommendations
  • Handled real-world API constraints: rate limits, backoffs, schema mismatches, and graceful degradation
  • Deployed production web app on Render + Firebase with Alembic migrations and consent-aware data collection

πŸ“„ License

Proprietary β€” All Rights Reserved

This software is proprietary and actively deployed at mymangime.com. You may view the source code for portfolio/educational purposes only. No copying, redistribution, or commercial use is permitted. See LICENSE for full terms.


Built by a Product Engineer who ships real products, not demos.

About

Full-stack anime/manga discovery platform with multi-source data pipeline, 300+ tag taxonomy, and guided quiz recommendations. Built with React, FastAPI, PostgreSQL.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors