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épertoire | Contenu |
|---|---|
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
| Couche | Choix |
|---|---|
| Framework | Next.js 16 App Router, React 19, TypeScript, Server Components par défaut, Tailwind 4 |
| Auth et données | NextAuth v4 + adaptateur Prisma, connexion par code à six chiffres envoyé par Resend (seul fournisseur) ; Prisma + Neon Postgres |
| Services | Stripe (abonnements, crédits, Stripe Tax), Resend, Upstash Redis, Vercel Blob |
| IA | Vercel 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) |
| UI | shadcn 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 pushet 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
orgIdouuserId(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 dansmetadata.amounthors taxe. Prix et crédits :PLAN_PRICINGdanssrc/types/billing-plans.ts. - Shopify : outils dans
src/app/api/mcp/[storeId]/register-tools.tsetShopifyDirectClient(src/features/ai/sdk/sdk/shopify-bridge.ts) ;userErrorset 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 ligneAuditLogpour 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.