A production-minded, scalable manga reading platform. Browse, search, read, and track manga — powered by the MangaDex public API.
This is a monorepo with two independent apps:
| Folder | What it is | Stack | Docs |
|---|---|---|---|
backend/ |
REST API | Java 17 · Spring Boot 3 · MySQL · Redis · JWT | backend/README.md |
frontend/ |
Web app | React 18 · TypeScript · Redux Toolkit · Tailwind · Vite | frontend/README.md |
┌──────────────────────────────┐
Browser ─────────► │ frontend (React + nginx) │
│ • serves the SPA │
│ • proxies /api → backend │
└───────────────┬───────────────┘
│ /api/*
┌───────────────▼───────────────┐
│ backend (Spring Boot API) │
│ • JWT auth, rate limiting │
│ • caches + calls MangaDex │
└───────┬───────────────┬────────┘
│ │
┌─────────▼──────┐ ┌──────▼───────┐ ┌───────────────┐
│ MySQL │ │ Redis │ ────► │ MangaDex API │
│ (users, etc.) │ │ (cache) │ │ (manga data) │
└────────────────┘ └───────────────┘ └───────────────┘
Key idea: the backend only ever resolves manga/chapter data and image URLs; the browser loads the actual page images directly from MangaDex's CDN. The server stays light, so the app scales to many concurrent readers.
- Stateless JWT auth → run any number of backend instances behind a load balancer
- Redis cache (server) + RTK Query cache (client) → few upstream calls, fast repeats
- Connection pooling, rate limiting, and a durable DB fallback if MangaDex blips
Requires Docker Desktop running.
# from the repository root
docker compose up --build- Frontend → http://localhost:3000
- The backend, MySQL, and Redis start automatically on a private network.
⚠️ Override the demoJWT_SECRETindocker-compose.ymlbefore any real deployment.
1. Start MySQL + Redis (via Docker, or your own local installs):
docker run -d --name mysql -e MYSQL_DATABASE=manga_reader -e MYSQL_USER=manga_user \
-e MYSQL_PASSWORD=manga_pass -e MYSQL_ROOT_PASSWORD=rootpass -p 3306:3306 mysql:8.0
docker run -d --name redis -p 6379:6379 redis:7-alpine2. Backend (dev profile auto-creates the schema):
cd backend
mvn spring-boot:run
# API → http://localhost:8080/api · Swagger → http://localhost:8080/swagger-ui.html3. Frontend (proxies /api → :8080):
cd frontend
npm install
npm run dev
# App → http://localhost:5173- Browse / filter / search manga (no account needed)
- Read chapters in a clean vertical reader (with a data-saver toggle)
- Register / log in (JWT-based)
- Bookmark manga and resume where you left off (reading progress + history)
MangaMore/
├── README.md ← you are here (project overview)
├── docker-compose.yml ← runs the FULL stack (frontend + backend + mysql + redis)
├── backend/ ← Spring Boot API (its own README, Dockerfile, compose)
└── frontend/ ← React app (its own README, Dockerfile, nginx.conf)
Each sub-project is self-contained and has its own detailed README, Dockerfile,
and (for the backend) a standalone docker-compose.yml for backend-only work.
Educational / personal use. Manga metadata and images are provided by MangaDex under their API terms — respect their rate limits and do not bulk-download or mirror content. See backend/README.md for details.