Partie 1
Vue d'ensemble
L'app catering GreenPea sert à recevoir, éditer et faire signer les devis pour les événements des 9 foodtrucks. Elle remplace les allers-retours par email avec PDF en pièce jointe. Trois personnes y travaillent : un client (l'entreprise qui commande), Christophe (qui pilote au quotidien), et Stefano (qui maintient la machine).
Le parcours, vu d'en haut
Un devis peut entrer dans le système par deux portes : le formulaire du site (le client remplit tout seul) ou la création depuis l'admin (Christophe saisit après un appel téléphone). Ensuite, le parcours est le même.
Entrée client
Le client remplit le formulaire/devis/{truck}
Entrée admin
Appel téléphone, Christophe saisit/admin/demandes/nouveau
Devis créé
Statut 📬 À traiter — visible dans la liste admin
Christophe édite et envoie
items, prix, options. Statut devient ✉ Devis envoyé
Validation client
Signature électronique · scan PDF · refus · modifs demandées
Les trois audiences
Client B2B
EPFL, RTS, ELCA, communes, écoles. Il consulte le site, remplit le formulaire, reçoit le devis par email, l'accepte (online ou scan).
Christophe
Associé Gérant GreenPea. Il reçoit la notification, édite le devis, envoie au client, suit les confirmations, gère les multi-trucks.
Stefano
Technique. Il maintient la machine, corrige les bugs, ajoute des fonctionnalités, surveille les emails, gère les sauvegardes.
Les statuts d'un devis
Le badge à gauche est celui que tu vois dans l'admin live. La valeur en gris est l'identifiant technique stocké en base — utile uniquement pour Stefano.
| Statut | Sens | Qui agit |
|---|---|---|
📬 À traiter received | Demande reçue, pas encore traitée | Christophe édite, ajoute prix & options |
👁 Vue viewed | Ouverte par Christophe, en cours de traitement | Statut intermédiaire optionnel |
✉ Devis envoyé quoted | Devis envoyé au client, en attente de réponse | Client accepte, refuse ou demande modif |
✓ Confirmé confirmed | Devis accepté, verrouillé. Mission engagée | Christophe prépare l'événement |
✗ Refusé refused | Client a refusé (rare). Raison conservée | Aucune action — historique seulement |
💬 Modifs demandées changes_requested | Client veut des modifs avant de signer | Christophe réédite, renvoie un nouveau devis |
Bon à savoir
L'admin n'est pas ouvert à tout le monde. Seules les adresses email
autorisées peuvent se connecter (allowlist). En phase test, c'est
technique@greenpea.ch seul. En production complète,
on ajoutera christophe@greenpea.ch et les 2-3 emails terrain.
Partie 2
Site vitrine
La porte d'entrée publique. Le client arrive ici, découvre GreenPea et ses 9 foodtrucks, et choisit lequel (ou lesquels) il veut pour son événement.
Les pages du site
| URL | Rôle |
|---|---|
| / | Accueil + galerie des 9 foodtrucks |
/foodtrucks/{slug} | Fiche truck : story, photos, menu complet avec prix par portion |
/devis/{slug} | Formulaire 4 étapes : truck → événement → menu → contact |
| /services | Mise en place, vaisselle compostable, staff, soft, café |
| /conditions | CGV — TVA 8,1%, validité 10 jours, minimum 20 personnes (15 Manira) |
| /mes-devis | Espace client RGPD (droit d'accès, droit à l'oubli — LPD CH) |
Les 9 foodtrucks
| Truck | Cuisine | Min. convives |
|---|---|---|
| Manira WokShop | Wok asiatique — légumes croquants, nouilles, sauces maison | 15 |
| Régal Tandoori | Tandoori indien — naan, curry, tikka. Cuisson au four | 20 |
| Pazza Pizza & Pasta | Italien — pâte 48h, pasta fraîche | 20 |
| NAS Burger | Burgers smashés, viande suisse, sauces maison | 20 |
| NAS Wraps | Wraps frais, vegan systématique | 20 |
| CH!CHE Vegan | 100% végétal — Planted, New Roots, Yumgo | 20 |
| MaliFoods | Cuisine turque — meze, kebab, baklava | 20 |
| Vitalia (intégration 2027) | Pasta fresca italienne | 20 |
| Pasylema (intégration 2027) | Asado argentin + bowls (pokés) | 20 |
À quoi ça ressemble
Le formulaire ne facture rien
Aucune carte bancaire demandée. C'est une demande de devis, pas une commande. Christophe revient toujours vers le client avec une proposition chiffrée avant tout engagement.
Partie 3
App admin
C'est le tableau de bord de Christophe. URL :
/admin. Une notification email arrive à chaque
nouvelle demande, donc pas besoin de la consulter en permanence — elle vient à lui.
Connexion par magic link
Pas de mot de passe. Tu entres ton email autorisé, tu reçois un lien dans ta boîte, tu cliques, tu es connecté. Lien valide 15 minutes, session ouverte 30 jours.
Les trois onglets
Demandes (mono-truck — 95% de l'activité)
URL : /admin/demandes. Liste de toutes les demandes
mono-truck (un seul truck par devis). Filtres : statut, truck, recherche, dates.
Édition d'une demande — le cœur du travail
URL : /admin/demandes/edit?ref=GP-2026-XXXX.
L'éditeur a 5 zones : items, options logistique, discount commercial, notes client (visibles),
notes internes (cachées). En bas-gauche, un cartouche total flottant affiche
le sous-total HT, le discount, la TVA 8,1%, le total TTC et les boutons Enregistrer / Envoyer.
Événements (multi-trucks)
URL : /admin/evenements. À utiliser quand un même
client veut plusieurs trucks pour un même événement. EPFL fête de fin
d'année avec 4 trucks, RTS soirée internationale avec 6 trucks, REM journée portes
ouvertes avec 9 trucks. L'éditeur a un accordéon par truck.
Stats — KPIs et tableau de bord
URL : /admin/stats. KPIs principaux (CA confirmé,
taux de transformation, panier moyen), funnel de conversion, top trucks, top clients,
export CSV pour le comptable.
Partie 4
Workflow devis
De la demande initiale à la signature client, voici le chemin complet. C'est la partie la plus importante. Lis-la une fois en entier, puis tu pourras la consulter par chapitre quand un cas se présente.
4.1 Création de la demande
Deux portes d'entrée, déjà couvertes en partie 1. Que la demande vienne du web ou de l'admin, le résultat est identique : un devis en statut 📬 À traiter.
4.2 Édition par Christophe
Ouvrir l'éditeur, vérifier les items, ajuster les prix unitaires, cocher les options logistique, ajouter un discount commercial si pertinent, remplir les notes client et internes, puis enregistrer. Pas encore d'envoi.
4.3 Envoi au client
Dans le cartouche flottant, clic Envoyer au client → modal de confirmation →
email envoyé via Resend (expéditeur GreenPea, reply-to christophe@greenpea.ch).
Statut automatique :
📬 À traiter
→
✉ Devis envoyé.
4.4 Validation par le client — 3 options
Option A · Recommandée
Signature numérique (SES)
Nom complet + checkbox CGV. Le backend calcule un hash SES (conforme Loi Suisse art. 14 CO + SCSE). Statut → ✓ Confirmé.
Option B · Papier
Impression + scan signé
Le client imprime, signe à la main, scanne, envoie par email. Christophe valide manuellement via le bouton 📄 du cartouche flottant + upload du PDF (max 5 MB). Statut → ✓ Confirmé.
Option C · Refus / modifs
Refus ou demande modifications
Le client refuse (raison obligatoire) → statut ✗ Refusé. Ou il demande des modifications → statut 💬 Modifs demandées → tu réédites et renvoies.
/mon-evenement : devis officiel pleine page A4 imprimable.
4.5 Après la validation
Une fois en ✓ Confirmé, le devis est verrouillé. On ne modifie jamais un devis signé (ce serait casser la signature SES). Pour ajouter 20 convives 2 semaines avant : créer un avenant (devis dérivé GP-XXXX-A1, lié dans la timeline).
Règle d'or
Un devis confirmé est verrouillé. Pas d'édition possible. Si une modification est nécessaire, créer un avenant via le bouton dans le banner verrou.
Partie 5
Cas particuliers
Événement multi-trucks
Tu utilises l'onglet Événements (pas Demandes). URL
/admin/evenements/nouveau. Tu crées l'événement,
ajoutes les trucks un par un, chaque truck a son menu/prix/options indépendants.
Un seul email au client, une seule signature qui couvre tous les trucks.
Installer la PWA sur iPhone
L'app admin est aussi une Progressive Web App. Sur Safari iPhone :
ouvre /admin/login, clique Partager →
Sur l'écran d'accueil. L'icône GreenPea apparaît. Ouvre, accepte les
notifications. Tu reçois alors une notification push à chaque devis accepté ou refusé.
Vérification d'intégrité (hash SES)
Imagine : 1 an après signature, un client conteste un devis. Dans le banner verrou de l'admin, clic Vérifier l'intégrité. Le système recalcule le hash et compare. Résultat « Intégrité confirmée » (vert) ou « Anomalie détectée » (rouge — préviens Stefano).
Gestion du quota email Resend
Plan gratuit Resend = 100 emails / jour. Un workflow complet consomme ~5 emails (confirmation client, notif Christophe, devis envoyé, confirmation accept, notif Christophe). Pas plus de 15 workflows complets par jour sans coordonner avec Stefano.
Que faire si quelque chose ne marche pas
| Symptôme | Que faire |
|---|---|
| Magic link n'arrive pas | Vérifier les spams. Si rien après 5 min, écrire à technique@greenpea.ch |
| Bouton Enregistrer tourne sans fin | Recharger la page (Cmd+R). Tes modifs sont normalement sauvegardées en local. |
| Devis ne s'envoie pas | Vérifier que l'email client est valide. Sinon, contacter Stefano. |
| Total faux dans le cartouche | Recharger la page. Si persiste, vérifier les options cochées. |
| App admin ne charge plus | Vider le cache navigateur ou tester en navigation privée. |
Partie 6
Annexes
Coordonnées équipe
| Personne | Rôle | Contact |
|---|---|---|
| Christophe Vagnières | Associé Gérant, responsable catering | christophe@greenpea.ch +41 76 399 83 24 |
| Massimo Lecci | Design + communication (comtech) | comtech@greenpea.ch |
| Stefano Di Crosta | Technique (dev + data) | technique@greenpea.ch |
Qui appeler quand ?
Bug ou question technique → Stefano
(technique@)
Visuel, devis qui sort mal en PDF, charte → Massimo
(comtech@)
Question client, devis à signer, opérationnel → Christophe
(christophe@)
Glossaire
| Terme | Signification |
|---|---|
| SES | Signature Électronique Simple — Loi Suisse art. 14 CO + SCSE |
| LPD | Loi sur la Protection des Données (CH). Art. 25 (accès), art. 32 (oubli) |
| JWT | JSON Web Token — te garde connecté 30 jours sans mot de passe |
| KV | Cloudflare Workers KV — stockage clé-valeur pour les PDFs scannés |
| D1 | Cloudflare D1 SQLite — la base qui contient tous les devis |
| Resend | Service d'envoi d'emails transactionnels |
| Magic link | Lien de connexion à usage unique, valide 15 minutes |
| PWA | Progressive Web App — installable comme une vraie app iPhone / Android |
| Hash | Empreinte numérique unique. Si le contenu change d'une virgule, le hash change |
| Cron | Tâche programmée qui s'exécute à intervalles réguliers |
Conditions standards (rappel)
| Élément | Valeur |
|---|---|
| TVA | 8,1% Suisse — mention obligatoire |
| Validité offre | 10 jours à compter de la date d'envoi |
| Minimum convives | 20 personnes (sauf Manira : 15) |
| Modifications convives | Au plus tard 10 jours avant l'événement |
| Mention signature | « Lu et approuvé, bon pour accord » |
| Conservation données | Confirmés : 10 ans · Non confirmés : 365 jours puis anonymisation |
Mentions corporate
GreenPea Sàrl
Ch. des Merles 2 · 1272 Genolier · Vaud · Suisse
christophe@greenpea.ch
·
+41 76 399 83 24
·
www.greenpea.ch
TVA Suisse 8,1%
Le village qui nourrit le campus.