PageMark

PageMark (working title “Online Novel Lib”) is a Kotlin Multiplatform frontend for reading and writing web novels. Readers can browse a catalog, read chapters, and keep a library with cross-device reading progress; authors can write and manage their own novels and chapters. It targets Android, iOS and Web (Kotlin/Wasm) — there is no shipped Desktop app; the Web target covers the “quick look in a UI without an emulator” need in the browser instead. A JVM target still exists in shared (it runs the SQLite offline store tests on the host), and /desktopApp is a minimal Compose Desktop host for local development only.

The app talks exclusively to a separate Spring Boot backend over REST (contract-first via the OpenAPI spec in api/pageMarkBackend.yaml). It has no backend code of its own.

Project structure

Code conventions (shared/commonMain)

Local backend

The app needs the PageMark backend running locally to do anything beyond compiling. It lives in a separate sibling repository (PageMark-Backend), started with ./gradlew bootRun there (plus its Postgres container via docker-compose). Once running:

Running the apps

Use the run configurations provided by the run widget in your IDE’s toolbar, or these Gradle commands:

Running tests

Use the run button in your IDE’s editor gutter, or these Gradle tasks:

Regenerating the API client

The Ktor client under shared is generated from api/pageMarkBackend.yaml via the openapi-generator Gradle plugin (kotlin, library=multiplatform, without an explicit serializationLibrary — setting one causes duplicate @Serializable annotations and a build failure). Update that file from the backend repository and rebuild to regenerate the client.


Built with Kotlin Multiplatform and Compose Multiplatform, including Kotlin/Wasm for the Web target.