Vue d’ensemblePlateforme

Plateforme

Vue d’ensemble technique de l’application BoostEcom, ses couches, sa pile et ses règles non négociables.

L’application BoostEcom/boostecom.app est un dépôt plat, sans workspaces : tout le code vit dans src/. Cette page en donne la carte ; les pages d’architecture détaillées de cet onglet en donnent le pourquoi.

Carte du code

RépertoireContenu
src/app/App Router : routes publiques, dashboard, Admin, API, MCP
src/modules/Modules autonomes : analytics, auth, billing, email
src/features/Fonctionnalités : ai (@Atlas, agents, chat, SDK, outils, mémoire, aperçu, workflow), connectors, shopify, tracking, aeo, cro, vitals, commerce…
src/features/ai/skills/ et src/features/ai/platform-skills/Deux bibliothèques de skills, jamais réunies : celle d’un marchand (ouverte selon le plan) et celle de la plateforme (platform.*)
src/components/Design system : ui, patterns, shells, shared…
src/lib/Utilitaires : security, cache, monitoring, core…
src/services/Couche serveur : database, cron, jobs, stripe, fleet…
src/config/, src/types/, src/env/Constantes plateforme, types globaux, environnement typé (src/env/server.ts)
src/test/Gardes transverses (documentation, ownership, environnement)
prisma/Le schéma unique, prisma/schema.prisma
content/Contenu servi à l’exécution (blog, docs produit, tutoriels, guides de tracking, marketplace, runbooks de l’Admin)
backlog/Un fichier par item de travail, lu par le Dev Studio

Pile

CoucheChoix
FrameworkNext.js 16 App Router, React 19, TypeScript, Server Components par défaut, Tailwind 4
Auth et donnéesNextAuth v4 + adaptateur Prisma, connexion par code à six chiffres envoyé par Resend (seul fournisseur) ; Prisma + Neon Postgres
ServicesStripe (abonnements, crédits, Stripe Tax), Resend, Upstash Redis, Vercel Blob
IAVercel AI SDK v6 (ai, @ai-sdk/react) routé par AI Gateway ; modèles dans src/config/ai-models.ts (pnpm models:check)
MCP@modelcontextprotocol/sdk, serveur dans src/app/api/mcp/[storeId]/ (register-tools.ts, filtré par scope)
UIshadcn sur Base UI, AI Elements, Motion v12, lucide-react, sonner ; sombre uniquement

Les agents durables ne sont pas livrés : @workflow/ai n’est pas installé.

Règles non négociables

  • Une seule base Neon, et c’est la production. Pas de dossier de migrations : prisma db push et une garde de schéma générée (pnpm db:guard, pnpm db:guard:check). Jamais de remise à zéro.
  • Le tenant vient du contexte, jamais du modèle. Un outil @Atlas ou MCP lit l’organisation dans sa session ; aucune entrée d’outil ne s’appelle orgId ou userId (src/test/tool-inputs-never-name-the-tenant.test.ts).
  • Facturation : estimation avant le stream (402 si le solde ne couvre pas), coupure en plein stream au solde, idempotence par table (StripeEvent, MonthlyReset, DailyBonus, AffiliateRedemption), crédits accordés lus dans metadata.amount hors taxe. Prix et crédits : PLAN_PRICING dans src/types/billing-plans.ts.
  • Shopify : outils dans src/app/api/mcp/[storeId]/register-tools.ts et ShopifyDirectClient (src/features/ai/sdk/sdk/shopify-bridge.ts) ; userErrors et 403 remontent tels quels ; version d’API unique (src/features/shopify/sdk/version.ts) ; aucune écriture sur le thème publié sans autorisation explicite.
  • Décisions : un item type: decision (prix, contrat, dépense, risque juridique) n’est tranché par aucun agent.
  • Journalisation : logger structuré (src/lib/monitoring/index.ts), une ligne AuditLog pour toute action de sécurité.

Démarrage local

pnpm install
cp .env.example .env     # la liste qui fait autorité est src/env/server.ts
pnpm dev                 # Next 16 / Turbopack, port 3000

pnpm build et un pnpm typecheck complet demandent beaucoup de mémoire ; les gardes rapides tournent dans le crochet pre-push de package.json.

Sources dans l’app : AGENTS.md, package.json, src/config/ai-models.ts, src/env/server.ts.