No description
- TypeScript 82.4%
- JavaScript 16.6%
- Dockerfile 0.7%
- HTML 0.3%
| .forgejo/workflows | ||
| .github | ||
| .husky | ||
| client | ||
| e2e | ||
| .dockerignore | ||
| .gitignore | ||
| compose.yaml | ||
| db.js | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| schemas.js | ||
| server.js | ||
manga-lib
A personal manga collection tracker. Track which volumes you own, who has read what, manage wishlists, and see what to buy next — for multiple users sharing a single library.
Stack
- Backend: Node.js + Express + SQLite (
node:sqlite, requires Node ≥ 22.5) - Frontend: React 18 + Vite + Tailwind CSS + TanStack Query
- Validation: Zod
- Testing: Vitest (unit) + Playwright (E2E)
Getting Started
Local development
npm run setup # install all deps (root + client)
npm run dev # backend on :3001, Vite on :5173
Docker (production)
docker compose up -d
The app is served on port 3000. The SQLite database is persisted in a named volume (manga-data).
Scripts
| Command | Description |
|---|---|
npm run setup |
Install all dependencies (root + client) |
npm run dev |
Start dev servers (backend :3001, frontend :5173) |
npm run build |
Production build → client/dist/ |
npm start |
Start production server on :3000 |
npm run typecheck |
TypeScript check (client only) |
npm run lint |
ESLint (client) |
npm run format |
Prettier (client) |
npm run test |
Vitest unit tests |
npm run test:e2e |
Playwright E2E tests (headless) |
npm run test:e2e:ui |
Playwright E2E tests (interactive UI) |
Project Structure
server.js Express API
db.js SQLite helpers + schema migrations (node:sqlite)
schemas.js Zod input validation
client/src/
api.ts Typed fetch wrappers
types.ts Shared TypeScript types
hooks/ Business logic hooks
components/ UI components
context/ MangaContext (users, currentUserId, colorOf)
locale/ i18n strings (de/en)
e2e/ Playwright tests
Features
- Track owned volumes per manga series
- Per-user reading status
- Wishlist per user
- Buy list (volumes needed to complete a series)
- Up Next view (what to read next)
- Reading history
- Hide manga per user
- Borrowed volumes tracking
- Multi-user with colour coding
- PWA support
- German/English UI