Reste à faire
title: Reste à faire description: La seule liste de ce qu’il reste à faire pour Orbit : actions du propriétaire, travail de l’app, décisions ouvertes.
Page unique. C’est la seule liste de ce qui reste à faire, pour le propriétaire comme pour l’app. Aucune autre page de cette documentation, et aucun fichier du dépôt applicatif (AGENTS.md, README, skills, commentaires), ne tient de liste « à faire », de statut ou de backlog : ils décrivent le comment et renvoient ici pour le quoi. Une tâche finie se retire d’ici (et part dans « Fait récemment ») dans la même PR que le travail.
État actuel en une ligne
Le code du lancement est sur main (plan Orbit unique, crédits Studio en montant libre, attribution DataFast, Stripe durci, back-office séparé) ; la production n’est pas encore prête : base non migrée, Stripe, DataFast, e-mail et back-office attendent les actions du propriétaire ci-dessous, et le quota GitHub Actions est épuisé.
Côté propriétaire
Dans l’ordre. Chaque action se fait dans un tableau de bord ; aucune valeur secrète ne se colle dans un fichier, une PR ou une conversation. Le détail pas à pas est dans le runbook cité.
1. GitHub Actions : quota épuisé
Runbook : Mettre la CI en pause.
- Dans les deux dépôts (
orbit.easyconnector.appetdocs.easyconnector.app) : GitHub → Settings → Secrets and variables → Actions → onglet Variables → New repository variableCI_PAUSED=true. Les jobs gardés passent en « skipped » au lieu d’échouer. - Pendant la pause, la preuve d’une PR de l’app est locale :
pnpm premerge(porte rapide) oupnpm premerge --full(+ E2E et Remotion), avec un Postgres jetable dansDATABASE_URL; coller le tableau imprimé dans la PR. Pour la documentation :node scripts/audit-docs.mjs. - Quand le quota revient (ou la limite de dépense est relevée) : supprimer la variable
CI_PAUSEDdans les deux dépôts, puis relancer un passage complet surmain.
2. Ménage des branches
-
docs.easyconnector.app→ Branches : supprimerdocs/help-center-academy-final,docs/help-center-academy-hub(jamais fusionnées, remplacées) etclaude/docs-absorb-orbit-docs(fusionnée). -
orbit.easyconnector.app→ Branches : supprimer les branchesclaude/*déjà fusionnées (toutes celles d’avant cette page le sont :blueprint-skills,ci-pause-switch,cleanup-agents-md,docs-live-in-docs-repo,launch-p0,premerge-gate,security-next-16-3-8,stripe-flexible-billing,studio-credits-free-amount,trusting-keller-f2poab). - Dans les deux dépôts : Settings → General → Pull Requests → cocher Automatically delete head branches.
3. Base de production : migrer, puis rendre sa capacité au fondateur
Runbook : Base de données, sections 2 et « Sans GitHub Actions ».
- Snapshot d’abord : Neon → projet
orbit-easyconnector-app→ branche de production → Backup & restore → Create snapshotavant-migrations-lancement. - Appliquer toutes les migrations en attente. Vraisemblablement celles d’après
20261002120000_brain_source_api:20261002130000_billing,20261002140000_single_orbit_plan,20261002150000_member_locale,20261002160000_workspace_acquisition,20261002170000_studio_credit_lots(l’état réel de la base n’est pas lisible depuis la documentation : le vérifier dans l’éditeur SQL de Neon avecSELECT migration_name FROM _prisma_migrations ORDER BY started_at;). Chemin normal : GitHub → Actions → Deploy production database → Run workflow surmain. Tant que le quota Actions est épuisé, ce workflow ne peut pas tourner : appliquer à la mainpnpm db:deployavec l’URL directe (non poolée, sans-poolerdans l’hôte) de Neon, puispnpm db:drift. - Rendre sa capacité au workspace du fondateur : la migration
single_orbit_planremet à 0 CU tout workspace sans abonnement. Relancerpnpm db:seedavecFOUNDER_EMAILetFOUNDER_BRAIN_CAPACITY_CU(et, si voulu,FOUNDER_STUDIO_CREDITS_USD), toujours sur l’URL directe ; ou passer ce workspace en modecustomdepuis le back-office avec la note « compte interne ». - Le jour de la première inscription réelle :
packages/db/PHASEpasse depre-usersàproduction(runbook, section 1), et activer la sauvegarde externe (section 4).
4. Vercel : variables du projet orbit-easyconnector-app
Runbook : Checklist de lancement, section 6 (table complète). Vercel → projet → Settings → Environment Variables ; une variable ne vaut que pour les nouveaux déploiements : redéployer après.
-
CRON_SECRET(Production et Preview) : sans lui, les trois crons répondent 401. -
DATAFAST_WEBSITE_IDetDATAFAST_API_TOKEN(Production seulement), après l’étape 6. -
ORBIT_STRIPE_SECRET_KEY(sk_test_en Preview ;sk_live_ourk_live_en Production au passage en live) etORBIT_STRIPE_WEBHOOK_SECRET(lewhsec_de l’endpoint de chaque environnement), après l’étape 5. -
ORBIT_STRIPE_TAX=1seulement après avoir activé Stripe Tax (sinon Checkout échoue) ; vide en attendant. -
RESEND_API_KEY: la clé propre à Orbit (étape 7), jamais celle d’un autre produit. - Supprimer toute variable
STUDIO_*qui traînerait encore (STUDIO_PUBLIC_URL,STUDIO_RENDER_DISPATCH_TOKEN,STUDIO_SPEND_ALERT_USD,STUDIO_PROVIDERS) : l’app ne relit plus ces anciens noms, seulsORBIT_*comptent.
5. Stripe (mode test, puis live)
Runbook : Checklist de lancement, section 3 ; architecture : Facturation Stripe.
- Vérifier en mode test le catalogue d’Orbit : produit
orbit, prix parlookup_keyorbit_base_monthly(49 $),orbit_capacity_step_monthly(25 $),orbit_base_annual(468 $),orbit_capacity_step_annual(240 $). - Lancer
node apps/web/scripts/stripe-catalog.mjs --dry-runpuis sans--dry-runavec la clé test : il posetax_behavior: exclusive, crée le produitorbit_studio_credits(crédits en montant libre, sans prix) et archive les anciens produits de packs (orbit_studio_starter,orbit_studio_pro). Archiver à la mainorbit_brain_proetorbit_brain_maxs’ils existent encore. - Settings → Tax : activer Stripe Tax, adresse d’origine, inscriptions fiscales, code de taxe SaaS (logiciel en service, usage professionnel) par défaut ; puis
ORBIT_STRIPE_TAX=1. - Developers → Webhooks → endpoint
https://orbit.easyconnector.app/api/webhooks/stripe, descriptionorbit-easyconnector-app, les dix événements deHANDLED_EVENTS(liste exacte dans la checklist, section 3) ; copier lewhsec_dans Vercel. - Settings → Customer portal : activer ; moyen de paiement, factures, résiliation, et changement de plan et d’intervalle (mensuel ↔ annuel) du produit Orbit.
- Essai de bout en bout en Preview (carte
4242 4242 4242 4242) : activation depuis/brain, un pas de +60 CU, achat de crédits Studio,/billing, un remboursement et un litige de test. - Passage en live :
stripe-catalog.mjs --liveavec la clé live, endpoint live, clés live en Production, redéployer.
6. DataFast
Runbook : Checklist de lancement, section 2.
- Créer le site
orbit.easyconnector.app: soit reconnecter le connecteur DataFast avec la permissionwebsites:write, soit le créer à la main dans le tableau de bord DataFast. - Connecter Stripe dans DataFast avec une clé restreinte en lecture seule du compte Stripe d’Orbit.
- Créer les objectifs
signup,checkout_started,subscription_started,credits_purchased(ce sont les seuls que le serveur émet). - Poser
DATAFAST_WEBSITE_IDetDATAFAST_API_TOKEN(étape 4).
7. Resend (e-mail)
Runbook : Checklist de lancement, section 4.
- Vérifier que l’apex
easyconnector.appest « Verified » dans Resend (DNS chez OVH : SPF, DKIM, MX de retour, DMARC). L’expéditeur d’Orbit estOrbit <orbit@easyconnector.app>. - Créer la clé API propre à Orbit dans Resend (droit « Sending access », domaine
easyconnector.app) et la poser directement dans Vercel sousRESEND_API_KEY(Production et Preview), ou connecter l’intégration Resend du Marketplace au projet si elle injecte une clé propre à Orbit. Ne jamais la coller dans une conversation. - Facultatif : un sous-domaine d’envoi propre à Orbit (voir « Décisions ouvertes »).
8. Back-office apps/admin
Runbook : Back-office, « Mise en place ».
- Vercel → Add New… → Project : importer le dépôt une seconde fois, nom
orbit-admin-easyconnector-app, Root Directoryapps/admin. - Variables :
DATABASE_URLseulement. - Deployment Protection → Vercel Authentication sur « All Deployments ».
- Ensuite seulement
ORBIT_ADMIN_PROTECTED=true, puis redéployer. - Pour chaque workspace qui doit en avoir : poser l’enveloppe mensuelle
studioMonthlyCreditsUsddepuis/workspaces/[id](elle n’est plus dérivée d’aucun abonnement ; 0 par défaut).
9. Après la mise en production
- Un vrai test d’attribution : lien avec UTM → inscription → activation → paiement de test → visible et attribué dans DataFast.
- Activer Vercel Web Analytics et Speed Insights sur le projet (déjà montés dans le code).
- Un moniteur externe sur
https://orbit.easyconnector.app/api/health(skillplatform-ops). - Studio : un dispatch GitHub réel (
ORBIT_RENDER_DISPATCH_TOKEN), une course réelle par moteur, les traces dans l’Observability de Vercel, le premierfetch:music --pindu paquet Remotion, la lecture du cas réelveo-probe(débloque G2-10, ci-dessous). - Fournir la source et la licence de chaque effet sonore voulu dans les rendus.
- Relire la copie française de la landing.
- Faire valider juridiquement les Conditions d’utilisation et la Politique de confidentialité (mentions « À compléter »).
10. Facultatif
-
blueprint-watch(dépôt de l’app) : variableBLUEPRINT_WATCH_ENABLED=trueet secretBLUEPRINT_READ_TOKEN(lecture seule sur les deux dépôts de référence). -
orbit-claims(dépôt de la documentation) : variableORBIT_CLAIMS_ENABLED=trueet secretORBIT_READ_TOKEN(lecture seule sur le dépôt de l’app). - BotID Deep Analysis (Vercel → Firewall → Rules, offre Pro) une fois BotID codé (P1 ci-dessous).
Côté app
Le travail de code qui reste, par priorité. P0 : avant la bascule de production ; P1 : dans le mois qui suit le lancement ; P2 : quand le besoin se confirme. Les lettres renvoient au tableau d’écarts du Blueprint.
P0
- Porte de bascule :
pnpm premerge --fullvert surmain(lint, typecheck, tests, build, E2E, migrations, drift, audit legacy, Remotion), puis vérification de landing, Brain, Studio, auth, API/MCP en Preview, avant de pointer le trafic de production (AGENTS.md, « Cutover »).
P1
- SEO / AEO / GEO (l) :
llms.txt, robots avec robots d’IA nommés, JSON-LD, images OG ; la politique de crawl attend la décision du propriétaire. - Webhook Resend (k) : suppression sur rebond et plainte (Svix, idempotent).
- Onglets de contenu du back-office (n) : KPIs, changelog, roadmap, FAQ, retours, coupons (skill
admin-structure). - Page d’état / moniteur externe sur
/api/health(m), et la checklist du tableau de bord Vercel. - Suppression de compte et export des données (o).
- Archiver et compresser comme vraies opérations de Memory (état « archivé » hors des CU actifs, fusion de Memories) : aujourd’hui seuls modifier et supprimer libèrent des CU.
- Facturation B2B Custom : facture et encaissement des conditions négociées (aujourd’hui le mode
customrègle capacité, quota et majoration, mais rien n’est facturé hors Stripe). - Table de jalons (h) :
UserMilestoneécrite dans la transaction du fait métier, source de l’entonnoir exact (DataFast ne voit pas qui refuse les cookies) ; objectifsworkspace_created,first_brain_write,first_generation. - BotID sur les POST exposés (envoi d’OTP, gestes de génération, création de workspace).
P2
- Parité de la vue d’ensemble : les Spaces sont posés sur un polygone régulier, le prototype les place à la main.
- Parité des icônes par Memory avec le prototype.
- Produit avant v1 : Context Pack par intention sur plusieurs Spaces, restriction d’un client MCP/API à certains Spaces, connecteurs de sources en libre-service (Notion, Drive, Shopify, Figma), Context Engine complet et Tool Context Binding, write-back Studio → Memory Proposal (remplace l’écriture héritée de
recordLearning). - Studio : surface Cinéma membre et Product Film sur le geste payant ; Studio agentique (capability headless, create/status/asset/revise via MCP et REST) ; G2-10 (Veo en 720p et son, après la course réelle).
- Flux E2E non couverts : E2E-19 à E2E-26 et E2E-28 à E2E-30 (définitions : Roadmap, « Phase 5 »).
- Connecteurs C3 à C8 (Blob, Gateway, ElevenLabs, GitHub sans jeton collé ; runner sans secret ; surface fondateur ; Postiz ; lectures DataFast et GitHub ; rendus et vidéo sur Workflow).
- Interface : un seul Dialog et un seul DropdownMenu ; découpage de
components/studio/{data.tsx,types.ts}enfeatures/studio/*. - Remake (R1 à R4) ; citations IA (q), phases de lancement et coupons (r), détection de code mort (s).
- Réconciliation Stripe : mémoriser le curseur entre deux passages (au-delà de quelques centaines de workspaces).
Décisions ouvertes
- Enveloppe Studio par défaut : aucune enveloppe mensuelle n’est liée à l’abonnement Brain aujourd’hui (0 USD à l’activation, posée à la main dans le back-office). En donner une par défaut, et laquelle ?
- Seuil d’alerte de dépense :
ORBIT_SPEND_ALERT_USDet/costslisent désormais des crédits (coût fournisseur × majoration), plus le coût fournisseur : le seuil est à revoir. - Marge des crédits : sa lecture exclut le breakage (crédits expirés non dépensés), elle est donc prudente. La garder ainsi ?
- Domaine : passage à
orbit.aiplus tard ; tout est centralisé dansapps/web/src/config/domains.ts(Changer de domaine). - Reçus : ceux de Stripe, ceux d’Orbit, ou les deux (le client recevrait deux reçus).
- Remboursement total de bonne volonté : il retire aujourd’hui la capacité (ou le reste d’un lot de crédits). Le garder ?
- Expéditeur : rester sur l’apex
easyconnector.appou passer à un sous-domaine d’envoi propre à Orbit (réputation séparée de l’autre produit) ; les envois marketing iront de toute façon sur un sous-domaine séparé. - Politique de crawl des robots d’IA (skill
seo-aeo-geo). - Quota de lectures : 3 000 lectures par 120 CU est un réglage de départ, à ajuster sur l’usage mesuré.
- Remake : texte des CGU sur les droits de la vidéo de référence (R4).
Fait récemment
- Surfaces machine en anglais : les derniers messages d’erreur REST et MCP en français sont traduits (codes inchangés), tenus par
api-errors-english.test.ts; la FAQ in-app ne dit plus « au coût réel du provider » ;pnpm premerge --fulllance le vraipnpm e2e; les fichiers quenext buildécrit dansapps/webne sont plus suivis. - Crédits Studio en montant libre (app #21) : 10 à 5 000 $, 1:1, valables 365 jours, cumulables, consommés après l’enveloppe mensuelle ; majoration à la consommation (1,3× standard, 1,15× custom) ; plus aucun pack ; lots, don et majoration dans le back-office ; anciens noms
STUDIO_*retirés. - Porte de fusion locale
pnpm premerge(app #19) et interrupteurCI_PAUSED(app #14). AGENTS.mdnettoyé et plafonné à 200 lignes (app #20).- Documentation unique : toute la prose vit ici (docs #9, app #18).
- Plan Orbit unique et quota de lectures MCP/REST ; attribution et durcissement Stripe du lancement ; abonnements en mode de facturation flexible (app #17).