yavsc/ROADMAP.md

205 lines
9.1 KiB
Markdown
Raw Normal View History

# Yavsc — Roadmap
> **Statut** : document vivant. Reflète l'état du repo et les décisions en cours.
>
> L'ancienne liste en français (jalons 15, 20162017) est archivée dans
> [`TODO.fr.md.archive`](./TODO.fr.md.archive) — tout ce qui en a été réalisé
> ou reformulé est ici.
---
## 🧭 Vision
Yavsc est une plateforme de **mise en relation client / fournisseur / coordinateur**,
spécialisable par activité, avec une **origine musicale**.
Origine du nom : *Yet Another Very Small Company*.
Le domaine est modélisé en **DDD** (cf. [`doc/ddd-exploration-2026-06-14.md`](./doc/ddd-exploration-2026-06-14.md))
et l'architecture globale est décrite dans [`doc/Architecture.md`](./doc/Architecture.md).
Trois principes non négociables traversent tous les jalons :
1. **Devis, pas facturation directe.** Le flux contractuel prime sur le flux
d'encaissement ; l'argent arrive seulement après accord signé.
2. **Open by design.** Le code des livrables et la plateforme sont sous licence
libre ; les workflows métier aboutissent à des livrables sous licence libre.
3. **Pas de MVP borné.** Le périmètre est complet dès la conception — les
jalons ne sont pas une découpe de fonctionnalités, mais une **séquence de
stabilisation**.
---
## 🏗️ État de l'art (juin 2026)
### Périmètre technique
| Brique | Module | État |
|---|---|---|
| Backend ASP.NET | `Yavsc.Server`, `Yavsc.Web`, `Yavsc.Api`, `Yavsc.Org` | actif, build OK, cible .NET 10 |
| Domaine partagé | `Yavsc.Abstract` | actif |
| Blogs | `Yavsc.Blogs` | actif |
| Client chat (`PostIt`) | `PostIt` (Avalonia) + `PostIt.Android` / `PostIt.Browser` / `PostIt.Desktop` | actif, OIDC |
| CLI admin | `src/cli` | actif |
2026-06-19 19:59:15 +01:00
| Tests | `test/Yavsc.Org.Tests` | présents, à densifier |
| Conteneurisation | `Dockerfile`, `Dockerfile.backend`, `docker-compose.yaml` | actif, image `pazof/yavsc-build-env` |
| CI | `.github/workflows/`, Dependabot (multi-ecosystems) | actif |
| Docs | `doc/Architecture.md`, `doc/ddd-exploration-2026-06-14.md` | frais (1314 juin 2026) |
### Bounded Contexts identifiés
| # | BC | Module | Maturité |
|---|---|---|---|
| 1 | Chat | `PostIt` | client riche + backend, OIDC |
| 2 | Profil & Identité | `Yavsc.Org` | en place |
| 3 | Activités Légales | `Yavsc.Org` (à séparer ?) | taxonomie présente |
| 4 | Blogs | `Yavsc.Blogs` | en place |
| 5 | Prestation | `Yavsc.Server` | cœur métier, à compléter |
| 6 | Paiements | `Yavsc.Server` | PayPal NVP/SOAP, **arrhes vs avance** à clarifier |
| 7 | Rencontre (mode 2) | à créer | pas démarré |
| 8 | Modération | `Yavsc.Org` / à séparer | workflow 2 étages, amorcé |
| 9 | Trust & Safety | à séparer | blacklist plateforme, à industrialiser |
| 10 | Conciliation | à créer | jalon 5, pas démarré |
---
## 🚦 Jalons
> Convention : `☐` à faire · `◐` en cours · `✔` livré
>
> Chaque jalon a un **critère de sortie** vérifiable.
### Jalon 0 — Fondations techniques *(en cours)*
> Cible : pouvoir parler du domaine sans se battre avec le runtime.
- ◐ Centralisation des versions NuGet (`Directory.Packages.props`) — **fait pour l'essentiel, à compléter**
- ◐ Conteneurisation de bout en bout (build env + run + compose)
- ☐ Tests d'intégration smoke par BC
- ☐ Découpage `Yavsc.Org` vs `Yavsc.Server` vs `Yavsc.Api` clarifié dans l'Architecture
-`CONTRIBUTING.md` (build, tests, conventions, DDD sessions)
**Critère de sortie** : `dotnet build` + `dotnet test` + `docker compose up` verts sur une machine vierge.
---
### Jalon 1 — Prestation signée de bout en bout
> Cible : un projet client/fournisseur aboutit à un **devis signé par les deux parties**, traçable, avec notifications.
Sous-jalons du `TODO.fr.md.archive` repris ici :
-**Devis validé fournisseur → client** : notification + mise à disposition du devis signé
-**Accord client sur devis** : notification fournisseur + mise à disposition signature client + commentaire
-**Édition facture non acquittée** depuis mobile
-**Édition contrat** depuis mobile
-**Notification & mise à disposition contrat** pour le client
-**Signature contrat par le client**
-**Notification facture non acquittée** au client
-**Paiement du client** (arrhes ? — voir jalon 2)
-**Édition facture marquée acquittée + signée** par le fournisseur
-**Notification facture acquittée signée** au client
-**Évaluation de la prestation** (des deux côtés)
**Critère de sortie** : scénario E2E web + mobile, devis → signature croisée → contrat → facture, sans intervention manuelle d'un opérateur.
---
### Jalon 2 — Espace personnel, blog opérationnel, marché ouvert
> Cible : un prestataire vit sur Yavsc (stocke, publie, est trouvé).
Repris du `TODO.fr.md.archive`, jalon 1 (sélection) + jalon 2 (interface) :
-**Gestion du profil utilisateur** Simple & Prestataire, sur **Android** (Web ✔)
-**Gestion de l'espace de stockage personnel** (Web, API web, Mobile)
-**Création d'une annonce**
-**Transformation annonce ↔ demande nominative**
-**Sélection d'une star** depuis le **mobile** (Web ✔)
-**Sélection DJ / chanteur / formation** (recherche par critères : date, lieu, tendance, taille, répertoire) depuis le **mobile**
-**Géocodeur de lieu** côté mobile
-**Géocodeur d'adresse postale** (Web + Mobile)
-**Évaluation des trajets**
-**Interface de gestion des collaborateurs** (sous-traitance — déjà amorcée dans `doc/Architecture.md`)
-**Migration de l'identifiant utilisateur** : `string` GUID → `long` auto-incrémenté (Npgsql)
-**Login with Twitter / PayPal**
-**Contrôle Web du rating**
-**Saisie et usage des disponibilités** (ponctuelles, récurrentes, congés)
-**Notifications structurelles** (impératives, par groupe)
-**Notifications aux posts, à l'arrivée d'un artiste, à une success story**
-**Construction du droit à l'envoi d'un message privé** (par destinataire, par accréditation, temporaire / définitif, par plage de temps, par validité d'un devis)
-**Paiement client du reste de la prestation**
-**Podcasts**
-**Personnalisation des blogs**
-**Monétisations**
-**Distribution de gold card / green card** (par un prestataire, donnant accès au chat privé)
-**Carte blanche** (délégation d'agenda, implique droit au chat privé)
-**Badges temporaires** (téléchargement unique, limité dans le temps, sans autre autorisation)
**Critère de sortie** : un utilisateur mobile peut publier une annonce, être sélectionné, signer, encaisser.
---
### Jalon 3 — Commande générique & formulaires extensibles
> Cible : le système de prise de commande n'est plus codé en dur par activité.
-**Saisie du devis sur commande générique** : les commandes sont des *projets utilisateur* associés à des *listes de formulaires* spécialisables
-**Groupe de champs** avec titre, contenant des champs :
- ☐ Label
- ☐ Type de valeur
- ☐ Type de contrôle
- ☐ Liste de validateurs
- ☐ Invitation à la saisie
-**Saisie d'un devis à destination d'un invité** (envoi par email, contact local)
-**Paiement d'arrhes** (cf. décision arrhes vs avance à prendre en jalon 0/1)
**Critère de sortie** : ajouter une nouvelle activité (code APE, formulaire, contrôles) sans toucher au code du backend, par simple configuration.
---
### Jalon 4 — Rencontre, géolocalisation, streaming
> Cible : Yavsc devient aussi un lieu de rencontre (Mode 2), pas seulement un outil de travail.
-**Aide à la rencontre physique** : carte interactive, geofencing, alertes
-**Activités secondaires** : spécialisation d'une activité, activités filles, *activité principale* (code APE)
-**Streaming vidéo pair-à-pair**
-**Streaming vidéo public**
**Critère de sortie** : un événement géolocalisé notifie ses participants confirmés à l'approche du point de rendez-vous.
---
### Jalon 5 — Conciliation & réseau pro
> Cible : un conflit entre client et fournisseur a un chemin de résolution outillé.
-**Conciliation** : double vue client/fournisseur sur le dossier, indicateurs, *FrontOffice* tranche et propose un partage des torts
-**Réseau pro** : sous-traitance en cascade, une demande n'est validable que lorsque **tous les devis** dont elle dépend sont validés
**Critère de sortie** : un dossier en litige peut être instruit par un conciliateur sans échange d'emails en parallèle.
---
## 🔒 Hygiène transverse (à tous les jalons)
### Sécurité
- ☐ Quota filesystem par utilisateur
- ☐ Clés anti-forge sur toutes les interfaces Web
- ☐ Limites de taille des chaînes du modèle (là où ça manque)
- ☐ Revue des scopes OIDC (PostIt, API)
### Accessibilité
- ☐ Correction des libellés manquants / en anglais
### Réécritures techniques programmées
- ☐ Éviter la création de fichiers TeX intermédiaires pour la génération PDF
- ☐ Isolation `Yavsc.Api` (auth + rate limiting)
### Configurabilité
- ☐ Gestion de contenu des pages du site au format interne (non exposé au Web)
- Cible : `@Html.SiteContent<AccessRules>(id).Responsible` (style à finaliser)