Minimal • Fully Offline • No Backend Required
The system consists of two logical parts:
- Client — Angular 20-based PWA, fully functional offline
- Helper Server (optional) — used only for CPU-intensive preprocessing (e.g. MHTML)
The client is the source of truth for application state and data. The client is responsible for UI rendering, local persistence, offline operation, and optional interaction with the helper server.
Client (Browser)
├─ Angular SPA
│ ├─ Presentation Layer
│ ├─ Application Services
│ ├─ Storage Layer (Dexie / IndexedDB)
│ └─ Basic navigation (no route-driven state)
│
├─ Service Worker (ngsw)
│ ├─ App shell caching
│ ├─ Offline routing
│ └─ Update lifecycle
│
└─ Local Persistence
└─ IndexedDB
Optional Helper Server
└─ Heavy preprocessing (MHTML → structured assets)
IndexedDB is used as the only persistent storage.
Access is abstracted via Dexie.
Reasons for Dexie:
- Stable async API over IndexedDB
- Schema versioning and migrations
- Indexed queries and transactional writes
There is no server-side database dependency.
- Data is owned by the client
- Server never stores authoritative state
- Server output is treated as importable artifacts
This avoids synchronization complexity and enables full offline usage.
- Uses Angular built-in Service Worker
- Configured via
ngsw-config.json - No custom worker logic
- Cache application shell
- Serve cached assets offline
- Control update activation
The Service Worker does not handle domain data — only static assets.
The application operates with two types of state:
This includes all data required for the application to function meaningfully.
Characteristics:
- Stored in IndexedDB via Dexie
- Persists across reloads and offline sessions
- Required for reading and navigation
Examples:
- Manga metadata
- Pages and extracted images
- Reading progress
UI-related state is handled separately and is not part of the persistent data model.
Characteristics:
- Transient
- Does not affect data integrity
- Can be safely reset
- Not involved in offline guarantees
- First load requires network
- After installation:
- App loads from cache
- IndexedDB provides data access
- No network dependency
Offline behavior is deterministic and predictable.
The server exists to offload tasks that are inefficient or unsafe in a browser context.
Primary use case:
- Parsing and preprocessing complex MHTML files
- Extracting structured data consumable by the client
- UI → Services: direct method calls
- Services → IndexedDB: Dexie API
- Client → Server (optional): HTTP requests
- Service Worker intercepts asset requests only
No bidirectional or real-time communication.
- Application bootstrap
- Service Worker registration
- Dexie database initialization
- Content import (local or via server)
- IndexedDB write
- Reader UI consumes stored data
- Offline operation continues
- Browser storage quotas apply
- No cross-device sync
- Single-user, single-device data model


