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
| 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 |
- 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
- Status States β Watching, Completed, On Hold, Dropped, Plan to Watch/Read
- Progress Updates β Episode/chapter tracking
- List Imports β MyAnimeList, AniList, Kitsu support
- 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
| 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 |
| 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 |
| Technology | Purpose |
|---|---|
| Render | Backend hosting + PostgreSQL |
| Firebase Hosting | Frontend CDN |
| Firebase Auth | User authentication |
| Docker | Containerized deployment |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- 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
- 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
- Behavior signals only when user consents
- Guests get strong recommendations via explicit quiz answers (no analytics dependency)
- Consent snapshots stored for compliance
- Alembic migrations for schema changes
- Repository pattern for clean data access
- Structured logging with correlation IDs
- Firebase Auth with server-side token verification
git clone https://github.com/Mitzseen/mymangime.git
cd mymangime
docker-compose up -d# 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 devmymangime/
βββ 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
- 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
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.