ProductInkwell, a comics reader
SectorDigital comics and webcomics
Year2025 to 2026
ScopeReader, accounts, CMS, importer, in-browser backend
TeamSolo, both builds
Description
Inkwell is a comics reading platform I built for a client as a full-stack site, then rebuilt as a public demo that runs entirely in the browser: no server, no database, nothing to sleep.
The client build is three services behind one gateway. A React and Vite front end talks to an Express and Mongoose API on MongoDB for accounts and reading data, and to a Strapi 5.34 CMS for the catalogue, on SQLite by default and Postgres by configuration. A plain Node gateway on port 3000 starts both as child processes and routes between them, so the gateway, the API, the CMS and the built front end ship as one Docker image, and Docker Compose runs MongoDB beside it. Readers get filters, Cmd+K search, a reader with long strip and single page modes, email verification, progress, history, bookmarks, four shelves, streaks, 20 achievements, reviews and comments; admins get a chunked zip importer.
Inkwell keeps that front end, rebranded, and moves the backend into the page. A router answers the old /api, /cms/api and /admin paths with the same JSON and status codes, so the app cannot tell its servers are gone. The catalogue is 11 public domain, CC0 and Creative Commons series, 42 chapters and 343 pages, each one credited; one click signs in a demo reader with three weeks of history; and the importer reads a zip without it leaving the browser. It is static files on Vercel at inkwell.alexsmiths.com, and it makes no requests to any other host.
The client build needs a gateway, an API, a CMS and a database running before anyone sees a page. I wanted it to be one link anyone could open, so I moved the backend into the browser.