Ex Libris is a multi‑platform application for managing a personal book collection. It provides dedicated screens for books, authors, and categories, allowing users to add, edit, and remove entries while keeping a normalized data model (books reference authors and categories rather than duplicating information).
The app supports reading statuses (to read / reading / finished), initial sample data for quick evaluation, and polished list views using cards, icons, and status chips. Users can choose existing authors and categories from pickers when creating or editing a book, making data entry faster and more consistent.
Navigation is organized through a shell with tabs for Books, Authors, and Categories, and the app includes a splash screen and basic localization (English and German). A Ktor-based backend exposes a simple JSON API to back up the entire library (books, authors, categories) and restore it later, demonstrating fullstack integration between the Flutter client and a Kotlin server.
Tech stack:
Frontend
- Flutter (3.x) – multi-platform UI (macOS, Android, iOS, Web-capable)
- Dart (3.x)
- Riverpod – state management and dependency injection
- go_router – navigation (planned/ready for route-based navigation)
- drift – local SQLite ORM for structured, normalized storage
- json_serializable / freezed – code generation for models and state
Backend
- Ktor (Kotlin) – lightweight HTTP server
- kotlinx.serialization – JSON serialization of backup snapshots
- Simple in-memory storage for library snapshots, designed to be extended to a real DB
Architecture & Tooling
- Clean Architecture, MVVM:
data(Drift/repositories/mappers),domain(entities, snapshots),presentation(screens, viewmodels) - GitHub Actions CI (Flutter analyze + test)
- macOS/iOS/Android platform integration (entitlements, manifests, bundle IDs)
- Clean Architecture, MVVM:






