No description
Find a file
Bastien Quelen f74bfcb686
All checks were successful
build / build (push) Successful in 15m18s
feat(lecture): téléchargements visibles, sync rapportée, tome suivant (v1.29)
Portage de huginn-tablet, UI réécrite pour l'e-ink. Change OpenSpec
« reading-flow-feedback » (proposal, design, tasks, deltas book-download /
local-library / internal-reader).

Téléchargements — DownloadTracker alimenté depuis BookDownloader, donc la pile
à lire qui se synchronise en arrière-plan devient visible sans toucher à
ToReadSync. Ligne d'état statique dans le shell : ni barre de progression ni
spinner (des animations), et pourcentage arrondi par pas de 10 % pour qu'un
téléchargement coûte dix rafraîchissements d'écran au lieu d'un par chunk
réseau.

Synchronisation — ProgressSyncCoordinator.syncing n'était consommé nulle part ;
il l'est maintenant, avec un flux rounds pour résumer ce qu'un tour a changé.
Ligne de texte sous les filtres, pas de snackbar (ça glisse). rebuild() passe
en copy() pour ne pas effacer l'état de sync à chaque repaint.

Tome suivant — NextInSeriesResolver (appareil puis catalogue), comparaison de
séries repliée sur accents/casse/ponctuation puisque kvasir normalise les noms
côté serveur. Prompt plein écran blanc sans scrim — un scrim translucide vire
au gris sale sur e-ink — avec PrimaryButton/SecondaryButton et progression
textuelle. Gated sur hasNavigated : rouvrir un livre terminé ne déclenche rien.

Localisation — les trois dernières chaînes en dur de la fiche livre étaient en
anglais alors que la locale par défaut est le français : passées en ressources
(values/ + values-en/).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 21:39:30 +02:00
.claude Bootstrap eink-cli: Kotlin/Native OPDS client + OpenSpec change 2026-06-19 18:46:44 +02:00
.forgejo/workflows ci: ne builder que sur tags v* (plus de build sur push main) 2026-06-30 21:38:21 +02:00
app feat(lecture): téléchargements visibles, sync rapportée, tome suivant (v1.29) 2026-08-13 21:39:30 +02:00
design-system brand: sync e-ink logos from design handoff 2026-07-07 20:21:26 +02:00
gradle Progression : synchro à l'ouverture, en tâche de fond, reflet immédiat 2026-08-04 22:28:25 +02:00
licenses Bundle editorial fonts (task 2.4) 2026-06-19 20:02:22 +02:00
openspec feat(lecture): téléchargements visibles, sync rapportée, tome suivant (v1.29) 2026-08-13 21:39:30 +02:00
.gitignore Pivot to boox-opds: Android/Compose e-ink OPDS app + design system 2026-06-19 19:08:06 +02:00
build.gradle.kts Pivot to boox-opds: Android/Compose e-ink OPDS app + design system 2026-06-19 19:08:06 +02:00
CLAUDE.md docs: utiliser l'agent mobile-developer pour ce projet 2026-06-28 09:58:36 +02:00
gradle.properties ci(muninn): gradle plus économe en mémoire pour le runner (parallel off, Kotlin in-process, workers=2) 2026-06-28 12:30:36 +02:00
gradlew Bootstrap eink-cli: Kotlin/Native OPDS client + OpenSpec change 2026-06-19 18:46:44 +02:00
gradlew.bat Bootstrap eink-cli: Kotlin/Native OPDS client + OpenSpec change 2026-06-19 18:46:44 +02:00
README.md refactor: renomme boox-opds → muninn-eink, package net.helheim.muninn 2026-06-27 16:24:31 +02:00
settings.gradle.kts refactor: renomme boox-opds → muninn-eink, package net.helheim.muninn 2026-06-27 16:24:31 +02:00

Muninn

An Android app — built for Boox e-ink readers — that browses your edda-library library over OPDS 2.0, downloads EPUBs, and opens them in NeoReader (the native Boox reader). It runs on the device.

Built with Kotlin + Jetpack Compose, tuned for e-ink: pure black-on-white, no animations, large touch targets.

A built-in EPUB reader may come later; v0.1 hands reading off to NeoReader.

Why

Reading the library on a Boox today means browsing the web UI in a sluggish e-ink browser, downloading, then finding the file. Muninn is a native, e-ink-first catalog client: search, tap, download, read.

Features (v0.1 scope)

  • Connect to an edda-library server with a per-user or shared OPDS token.
  • Browse the OPDS 2.0 navigation feed (authors, tags, publishers, series, unread…).
  • Search the catalog.
  • Download EPUBs and open them in NeoReader via an Android intent.
  • E-ink-optimised Compose UI (no motion, high contrast).

Build

Requires the Android SDK and JDK 17.

./gradlew :app:assembleDebug     # build debug APK
./gradlew :app:installDebug      # install on a connected Boox over adb

The debug APK lands at app/build/outputs/apk/debug/app-debug.apk. Release APKs are attached to each GitHub release (published on a v* tag).

Installing on the Boox

Enable developer options / USB debugging on the Boox, connect over USB (or adb connect <ip>), then ./gradlew :app:installDebug — or sideload the APK directly.

Configuration

In-app: enter your server URL and OPDS token (stored via DataStore). The token is sent as the ?token= query parameter that edda-library accepts on /opds/*.

Fonts

The editorial type system bundles three OFL (SIL Open Font License) variable fonts in app/src/main/res/font/Playfair Display (titles), Source Serif 4 (body), JetBrains Mono (labels). License texts are in licenses/.

Development

Spec-driven via OpenSpec — see openspec/changes/bootstrap-opds-client/ for the proposal, design, capability specs, and tasks. Conventions live in CLAUDE.md.