Quatre surfaces, visuelles seulement. Aucune logique, aucune donnée réelle : le but est de juger la direction — ce qui est à côté de quoi, la densité, ce qu'on voit sans cliquer. Tout est bâti sur tokens.css et les polices du produit, sans modification, donc ce qui est à l'écran est vraiment la langue visuelle de DESIGN.md.
Une tâche, une surface. Le contexte vient à la tâche ; la personne ne va pas le chercher.
C'est la seule chose à valider ici. Le reste — couleurs, espacements, composants — suit
déjà de tokens.css. Ce qui est nouveau, c'est que chaque écran ci‑dessous
porte une tâche du début à la fin : rien n'y est un lien vers une page où la
prochaine étape se passe.
| La tâche | Écrans aujourd'hui | Cible |
|---|---|---|
| Transformer une demande en dossier avec un prix Intake → Clients → Nouveau client → Nouveau dossier → Soumissions → éditeur → envoi | 6 | 1 |
| Répondre à la question d'un client La boîte de réception atteint la fiche client et un lien tel:. Rien d'autre. | impossible | 1 |
| Planifier le travail Dossier → planificateur → Tableau (autre écran) pour voir qui est libre → retour | 3 | 1 |
| Facturer le travail terminé À facturer → dossier → onglet argent → créer → éditeur → envoi | 5 | 1 |
| Relancer un paiement Factures → une facture → client → téléphone → et l'appel se note nulle part | 4 | 1 |
Une seule file pour tout ce qui rentre — boîte vocale, SMS, courriel, formulaire web, app client — et la demande devient un dossier et un prix sans quitter l'écran. La transcription reste affichée pendant qu'on bâtit la soumission.
Un seul fil, cinq transports, chacun rendu dans la forme qu'il a vraiment — un appel enregistré n'est pas une bulle. Le canal de réponse est un choix explicite. Et le fil a un âge : les vieilles périodes se replient, et un silence de 17 mois est dessiné bruyamment pour qu'un formulaire d'août ne se lise pas comme la suite d'un message de l'an dernier.
Ce que Board.tsx fait déjà bien, repris : la bande lisible de loin, les
visites sans technicien à gauche où on ne peut pas les manquer, et les promesses sans
heure dans leur propre bande plutôt que dessinées sur l'horloge.
Les six onglets de JobDetail.tsx — travail, argent, messages, temps,
photos, historique — deviennent six sections d'un seul défilement, dans l'ordre où on
en a besoin, avec l'étape et le solde au-dessus de la ligne de flottaison.
Un choix de capacité, jamais un choix de personne. Chaque case porte sa raison : complet, il faut louer, trop tard pour commander. Et le prix se construit à partir des exigences — équipe, carte de nacelliste, la nacelle, le transport — chaque ligne sachant d'où elle vient. Mercredi 1 165 $ à 13 % de marge ; jeudi 895 $ à 35 %.
resource_days rendu visible : une machine par ligne, un jour par colonne.
Une case ne tient qu'une chose, et c'est un index unique — le double engagement n'est
pas dessinable parce qu'il n'est pas insérable. Entretiens prévus depuis le compteur,
et ce qu'il faut louer, trié par la date où le fournisseur a besoin de la
commande.
L'autre moitié du modèle : la réservation devient une assignation à l'horizon. Les candidats arrivent avec leurs raisons — libre, carte valide, a déjà la nacelle sur son camion, son prochain arrêt est à 4 km. Un classement muet est un oracle, et personne ne fait confiance à un oracle.
Huit arrêts touchés deviennent une arithmétique au lieu de huit urgences. Chaque arrêt porte les quatre faits qui décident — couvrable, promesse serrée ou lâche, ce que ça coûte de déplacer, et par quel canal joindre le client. Une machine qui brise entre par la même porte.
Soumission → facture → paiement sur une seule ligne, parce que c'est un seul parcours — aujourd'hui il est coupé entre deux menus. Et la vraie raison du retard de 41 jours est dans la conversation depuis ce matin : il manque un numéro de bon de commande.
Un seul défilement, aucun onglet — ce que SCOPE.md avait déjà tranché. Ses lieux portent ce que tout le monde doit savoir avant d'y aller : ruelle, chien, plafond 24 pi. C'est cette ligne-là qui a fait apparaître la nacelle dans le prix.
Le schéma tient déjà cinq transports (sms, email,
in_app, note, call), l'adresse de chaque message, et
delivered_at / read_at / failed_reason. Deux choses
manquent quand même :
Il n'y a pas de transport web. Un formulaire du site devient un
dossier avec son attribution et n'entre jamais dans la conversation — donc la personne qui
répond ne voit jamais ce que le client a écrit en premier.
Et inbound.ts n'accepte que sms | email | in_app.
Les appels vivent dans leur propre table : le fil et le journal d'appels sont deux histoires
parallèles au lieu d'une seule.
La revue du technicien senior et l'administration. Et surtout : rien ici ne
réagit. Ce qui demande une vraie interaction — choisir une case et voir le prix
changer, glisser un arrêt d'un technicien à l'autre, taper dans une recherche — est décrit
dans apps/portal-next/README.md plutôt que simulé, parce qu'un faux
comportement se juge mal et se corrige encore plus mal.
Et rien ici ne fonctionne : pas de données, pas de réseau, aucun bouton n'agit. C'est
l'étape 0 de REDESIGN.md, pas l'étape 5.