Skip to content

feat(web): parcours d'upload d'une photo d'étagère et affichage des livres détectés #23

Description

@arenier

🚧 Draft — à instruire. Description courte volontairement : le périmètre, les critères
d'acceptation et le découpage en tâches restent à écrire avant de démarrer.

De quoi il s'agit

apps/web est aujourd'hui une coquille : app.tsx affiche un titre et « Interface a construire ».
Son propre commentaire pose la condition — « The split into feature slices (ADR 0002) starts with
the first real feature — uploading a shelf photo. Nothing to extract as long as there is nothing
inside. »
C'est cette première slice que porte l'issue : prendre une photo d'étagère depuis un
téléphone, l'envoyer, afficher les couples (auteur, titre, confiance) détectés.

C'est aussi ce qui rend la V1 démontrable autrement qu'au curl, et le premier endroit où le
découpage feature-slice du front cesse d'être théorique.

À instruire

  • Parcours : capture ou sélection depuis mobile, aperçu, envoi, états d'attente et d'erreur.
  • Contrat client de POST /scan (multipart ou base64) et restitution des erreurs — image invalide
    (400) vs échec du fournisseur (502/503), à aligner sur ce que feat(recognition): V1 reconnaissance texte sur photo d'étagère — adapters VLM (Gemini + Qwen) derrière ShelfScannerPort + endpoint POST /scan #10 fixe.
  • Ce qu'on montre de la confiance : la masquer, la signaler, ou permettre d'écarter les
    détections faibles (l'ADR 0005 expose une confiance par livre précisément pour ça).
  • Première feature-slice : structure, et ce qui doit passer par libs/shared/* plutôt que d'être
    importé d'une autre slice.
  • Tags Nx à poser, stratégie de test (Vitest + Testing Library, déjà en place).
  • Texte affiché en français — c'est du produit (CLAUDE.md) ; le code reste en anglais.

Dépendances

Dépend de #10 : sans l'endpoint POST /scan et son contrat, il n'y a rien à appeler. C'est la
seule des issues ouvertes qui ne soit pas autonome — elle est ouverte pour être tracée, pas pour être
prise maintenant.

Références

ADR 0002 (feature-slice, une slice n'importe pas l'intérieur d'une autre), ADR 0005 (confiance par
livre détecté), #10 (contrat de POST /scan), apps/web/src/app/app.tsx, CLAUDE.md (français côté
produit).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions