← Back to portfolio

Manga.

A private, self-hosted application for discovering manga, keeping track of what I’m reading, and reading chapters in one place.

This project grew out of my Firefox manga extensions. The React reader has been running since June 17, 2025; I’m now building its replacement with SvelteKit and TypeScript.

What it does

Discover. Browse a visual catalogue of covers and search for a title. The replacement adds text search, semantic search using embeddings, and a hybrid mode that combines both. Filters narrow the catalogue by genres, tags, authors, publishers, and chapter counts.

Keep track. A personal library brings saved titles together with reading status and chapter progress. Reading history makes it easier to return to a series; the catalogue also shows which titles I’m reading or have paused.

Read. Chapters appear in a focused, vertically scrolling view. The interface leaves the artwork at the centre, with a dark background and minimal controls.

Keep it running. Background jobs collect catalogue and chapter information. An activity view exposes updates and scraper health so I can see what the service is doing.

Inside the previous reader

Screenshots of the previous reader, built with React and still in use. The new SvelteKit reader is in development and is described below. Select any image to view it at full size.

Manga catalogue with a search bar, cover grid, and circular reading-progress indicators

Catalogue & discovery

Browse manga covers alongside reading status and progress. Search and sorting sit above the catalogue. View full size ↗

Personal manga library with saved covers and chapter-progress badges

Personal library

Saved titles and chapter progress collected in one view, with the bookmark tab selected. View full size ↗

Manga reading history with Reading badges on cover images

Reading history

A separate history view brings previously read titles back within reach. View full size ↗

Chapter reader with a vertical comic strip centred on a dark background

Chapter reader

A narrow, vertically scrolling reading column keeps the focus on the chapter artwork. View full size ↗

Manga background activity log showing update jobs and scraper health messages

Background activity

The activity log shows catalogue updates, chapter checks, and scraper health. View full size ↗

Under the hood

The previous reader, still running. React handles the interface, backed by a TypeScript/Express API, Drizzle, PostgreSQL, and Socket.IO. It remains operational while I develop the replacement.

The new reader, in development. SvelteKit and Svelte 5 power the new interface. Its reader uses canvas rendering, a shared image cache, and controlled preloading. Sharp reads image metadata, and WebSockets carry API messages.

Search & storage. PostgreSQL holds metadata, PGroonga handles text search, and pgvector uses HNSW indexes for embedding search. I self-host the embedding models. MinIO stores images; Redis is also part of the stack.

Catalogue scale. As of October 11, 2026, the replacement’s database contains 242,887 titles and 2,115,308 unique chapter records across 57,702 titles with chapters. These figures describe catalogue coverage and chapter availability, rather than the amount of content downloaded locally.

Development & availability. I wrote most of the reader code by hand, including the React application and its SvelteKit replacement. Work on the replacement began on February 27, 2026. The reader stays private; I may release a separate manga search in the future.

← Back to portfolio