Help shape Loomkeep ! ✊


Loomkeep is built by one person. Every bug you report and every idea you share genuinely shapes what gets built next . Vote for what matters to you, or tell me what's missing.

Planned

Android : refaire la fenêtre « Style du widget » avec des aperçus (mise en page native à nous)

Contexte Un appui long sur un widget › Paramètres (et, avant Android 12, la pose du widget) ouvre WidgetStyleActivity (apps/mobile/android/app/src/main/java/app/loomkeep/widgets/WidgetStyleActivity.kt). C'est une activité transparente (WidgetStyleTheme) qui n'affiche qu'un AlertDialog standard avec setSingleChoiceItems : un titre et deux boutons radio, « Affiches » / « Liste ». On ne contrôle donc que le contenu (titre, options, option cochée, ce qui se passe au choix), pas la mise en page : fenêtre, radios, polices et animation sont celles d'Android. Défaut visible en plus : WidgetStyleTheme ne définit pas de colorAccent, donc les radios sont sarcelle (défaut AppCompat) au lieu de l'ambre Séance. Et « Affiches / Liste » écrit en texte se comprend mal tant qu'on ne voit pas le résultat. ## Décision On part directement sur l'option 2 : remplacer l'AlertDialog par une mise en page à nous. On ne passe pas par l'étape « habiller le dialogue avec un thème » (qui ne permet ni image ni aperçu). ## Ce qu'on construit L'activité n'est pas obligée d'ouvrir un AlertDialog : c'est une vraie activité, elle peut afficher n'importe quelle vue avec setContentView(...) sur son fond transparent. C'est la même technique que l'écran de verrouillage (AppLock.java, PR #541), qui construit ses LinearLayout / TextView / ImageView à la main. - Un panneau en bas (ou une carte centrée) : « Style du widget ». - Deux grandes cartes d'aperçu, « Affiches » et « Liste », qui montrent à quoi ressemblera le widget. Les aperçus existent déjà : res/layout/widget_preview_.xml (ceux du sélecteur de widgets d'Android). - Toucher une carte : elle s'entoure d'ambre et se soulève légèrement, puis choose() enregistre et ferme (logique actuelle inchangée : updateAppWidgetState, redessin du widget, RESULT_OK). - Couleurs Séance (widget_ / seance_*, clair et sombre), animations d'entrée et de sortie (apps/web/DESIGN.md › Motion ; l'échelle d'animation d'Android les coupe pour le mouvement réduit). ## Comment l'écrire - Vues classiques (XML dans res/layout/, ou en code comme AppLock) : aucune dépendance nouvelle. Recommandé. - Compose : Kotlin et le compilateur Compose sont déjà là pour Glance, mais Glance n'apporte pas les composants d'interface ; il faudrait ajouter androidx.compose.material3 (nouvelle dépendance, à valider). - Police Séance : les polices n'existent qu'en woff2 (apps/mobile/www/shell-fonts), illisibles par une vue Android ; il faut ajouter les .ttf dans res/font. Sinon, police système. ## Coût à garder en tête - Plus de code natif à maintenir ; les textes dans strings.xml en, fr, it. - Accessibilité TalkBack (cartes = vrais éléments cliquables avec description), clair et sombre à gérer nous-mêmes. - Une modification n'arrive qu'avec une nouvelle version de l'APK. ## Fini quand - Les deux styles sont choisis par leurs aperçus, en clair comme en sombre, avec TalkBack. - Annuler (retour, toucher hors du panneau) ne change rien et ferme. - Une maquette validée avant le code (3 pistes).

Logan·8 days ago
Planned

[B3] Recaps and comparatives: yearly Rewind, monthly retro, anonymous percentiles

Backlog, explicitly late. ## Ideas parked here - Yearly Rewind. Your year in numbers, top rated, the genre that exploded, longest streak, plus a shareable image. High potential, but it demands real design work and, above all, accounts with several months of history — which does not exist yet. Premium candidate (see \[B9\]). Should be one of the last features, not one of the first. - Monthly retrospective. Lighter version, pushed through the existing NotificationDigestService infrastructure. Lower enthusiasm, but it is the incremental path toward the Rewind. - Anonymous percentiles — "you are in the top 10% of documentary watchers". All the satisfaction of comparison, none of the leaderboard's effects: no name, no race. Complements \[G7\] rather than duplicating it. ## Existing groundwork The stats/ module already computes most of the aggregates: video-temporal, rating-distribution, decade, cross-domain-totals. ## Update (October 2026) - Most of the aggregates now exist: the activity heatmap, minutes per month and per year, "on this day", social stats, and the year's XP (LeaderboardPeriod.year). The remaining work is mostly the staging and the shareable image. - Open question on timing: a Rewind for December has to start now, which conflicts with "explicitly late" above. To be decided. - Premium angle: the Rewind itself stays free; alternative styles for the shareable image could be premium (see \[B9\]). Relevant code: stats/video-temporal.util.ts, ee/stats/social-stats.util.ts, stats/on-this-day.util.ts.

Logan·2 months ago