Blueprint pour cloner un dashboard e-com IA-natif

Iris Operator
→ ton clone en multi-plateforme

Iris Operator est le cockpit BI d'une marque DTC. Il agrège Shopify + Meta Ads + Klaviyo et sort CA, COGS, ROAS, profit net, kill-list ads, snooping concurrents — sans ouvrir un seul onglet de plateforme. Cette page décrit chaque module, la stack, les choix, et donne le prompt complet à coller dans Claude Code pour générer la même chose multi-régies.

Stack · Next.js 16 + React 19 + Tailwind 4
Backend · API routes + Firestore + Supabase
Infra · Cloud Run europe-west1
Cible · 14 modules, 8 intégrations

Les 14 vues du dashboard

Chaque module répond à une question business précise. Pas de "tableau de bord générique" — chaque page a un job à faire.

📅

Dashboard du jour

Pilotage

Le snapshot business de la journée en cours, rafraîchi toutes les 5 min.

  • CA, nombre de commandes, AOV
  • COGS, frais Stripe (1.5% + 0.25€), frais Shopify (0.6%)
  • Ad spend Meta, ROAS, MER, CPA
  • Profit net + delta vs J-1 sur chaque KPI
  • Top 15 produits du jour avec marge unitaire
  • 5 dernières commandes avec profit ligne par ligne
📓

Journal

Pilotage

Marqueurs d'événements business avec analyse before/after auto.

  • Logger un évènement (refonte produit, push pub, hausse de prix…)
  • Compare conversion rate + AOV sur fenêtre 7/14/30j avant/après
  • Chart daily breakdown side-by-side
  • Sauvegardé en Firestore, partageable par lien
🚒

Ads coupe-feu

Action

Vue priorisée : "qu'est-ce que je coupe maintenant ?".

  • Toutes les campagnes Meta triées par perte cumulée
  • Fenêtre 3/7/15/30j ajustable
  • Mini-chart spend vs revenue par campagne
  • Bouton Pause qui hit Meta Marketing API en 1 clic
📊

Media buying

Action

Reporting cadencé hebdo/mensuel pour le pilotage long terme.

  • Tableau weekly/monthly : spend, revenue, ROAS, MER, profit net
  • Leaderboard top ROAS / worst loss / part de spend
  • Pivot mois × campagne (12 mois glissants)
  • Delta WoW sur tous les KPI
⚠️

Kill List

Action

Verdict automatique campaign + ad set basé sur un système de fenêtres.

  • 4 niveaux de sévérité : kill / critical / watch / ok
  • Seuils ajustables (min spend, min ROAS)
  • Calcule "wasted spend" = combien tu perds en laissant tourner
  • Filtres et tri par ROAS moyen, sévérité, spend

Nouvelle collection

Produits

Tracking dédié des produits sortis récemment.

  • Quantités, commandes, revenue, prix moyen
  • Daily/weekly chart de la trajectoire
  • Tri custom sur n'importe quelle colonne
📦

Produits & Marges

Produits

Rentabilité unitaire de tout le catalogue, sur la période choisie.

  • COGS/unit + shipping/unit (formule par pays FR/BE/LU/CH)
  • Profit absolu et marge % par produit
  • Vue 7/30/90j
  • Source unique pour décider quoi pousser, quoi jeter
💰

P&L

Finance

Le vrai compte de résultat, pas le ROAS-vanity de Meta.

  • Daily / weekly / monthly
  • Revenue, COGS, ad spend (FB+GA+PIN), bROAS, MER, marge brute, profit
  • Préset "Depuis 01/01" qui croît tout seul
  • Export CSV ready
📧

Klaviyo

Email

Performance email/SMS sans ouvrir Klaviyo.

  • Campaigns + flows séparés, par mois
  • Open rate, click rate, revenue, orders
  • Top campaigns / top flows
  • Sync nightly via API Klaviyo + cache Firestore
💬

Feedback clients

Clients

Aggregateur des avis post-achat (formulaire custom).

  • Fit (taille), confort, qualité, écart visuel/réel par produit
  • Health score 0-100 par produit
  • Top issues automatique (NLP léger sur défauts/raisons retour)
  • Croisé avec ventes pour calculer le feedback rate
🔍

Snooper

Veille

Surveillance temps réel des concurrents Shopify.

  • Détection : nouveaux produits, ruptures, retours stock, changements de prix, new variants
  • Polling auto toutes les 5 min via service séparé
  • Notif Telegram + email à chaque event
  • Stats par concurrent (24h / 7j / breakdown par type)

Les régies à brancher

Iris Operator branche actuellement Shopify, Meta Ads, Klaviyo, Firestore et Telegram. Ton clone doit ajouter Google Ads, Microsoft Ads et Pinterest Ads.

Shopify Admin API
OAuth 2025-10 · Iris OK
Meta Marketing API
v19.0 · ads_management
Klaviyo API
Campaigns + Flows
Google Ads API
À ajouter pour le clone
Microsoft Ads API
À ajouter pour le clone
Pinterest Ads API
À ajouter pour le clone
Firestore
Cache + events Snooper
Telegram + Mailgun
Notifs Snooper / alertes

Tech choisie (et pourquoi)

Framework
Next.js 16
App Router, API routes server-side, RSC + 'use client' ciblé
UI
React 19 + Tailwind 4
Pas de lib UI, composants maison (KpiCard, DataTable, Chart)
Charts
Recharts
Léger, déclaratif, theming via CSS vars
DB / cache
Firestore + Supabase
Firestore pour cache & events, Supabase pour auth + journal
Hosting
Cloud Run
europe-west1, Dockerfile multi-stage, ~150ms cold start
Auth
Middleware Next + Supabase
Une seule session admin, pas de multi-tenant pour rester simple

Ce qui rend Iris Operator utilisable

Cache à 2 vitesses
5 min sur la journée en cours, 1h sur le passé. Pas de "loading 4s à chaque visite", mais les nouvelles ventes apparaissent vite.
Stale-while-revalidate
Hook useStaleData qui affiche le cache instantanément + refresh en background. Aucun spinner après le 1er chargement.
COGS pays-aware
Shipping calculé via formule par pays (FR / BE / LU / CH). Pas un coût moyen bidon — du vrai profit ligne par ligne.
Action depuis le dashboard
Pause d'une campagne Meta direct depuis Ads coupe-feu. Pas un dashboard read-only, un cockpit.
Verdict, pas data
Kill List ne montre pas des KPIs : elle dit "kill / critical / watch / ok". Le job de l'outil = trancher, pas afficher.
Sidebar groupée par intention
Pilotage / Action / Produits / Finance / Email / Clients / Veille. On range par "ce que je veux faire", pas par "source de données".

À coller dans Claude Code

Copie ce prompt dans un nouveau projet (Cursor, Claude Code, Codex peu importe). Le prompt assume que ton pote a déjà des credentials pour Shopify, FB, Google, MS, Pinterest. Si non, l'agent te le dira et te demandera.

# Mission Construis un dashboard e-commerce DTC nommé "OPERATOR" calqué sur "Iris Operator". C'est un cockpit BI pour un fondateur solo qui pilote une boutique Shopify avec spend pub multi-régies. Pas multi-tenant, pas SaaS — un seul user (moi), une seule marque. ## Stack imposée - Next.js 16 (App Router) + React 19 + TypeScript - Tailwind CSS v4 (pas de lib UI, composants maison) - Recharts pour les charts - API routes Next pour tout le backend (pas de serveur séparé) - Firestore pour le cache des appels API + events Snooper - Supabase pour l'auth admin + table "journal_events" - Déployable Vercel ou Cloud Run, Dockerfile multi-stage - Variables d'env via .env.local (pas de Doppler / Infisical au début) ## Intégrations à brancher # Shopify Admin API (OAuth client_credentials, version 2025-10) - SHOPIFY_STORE, SHOPIFY_CLIENT_ID, SHOPIFY_CLIENT_SECRET - Récupère orders, products, variants, customers - Module wrapper lib/shopify.ts avec cache token 1h # Meta Marketing API (v19+, scope ads_management + ads_read) - META_ACCESS_TOKEN, META_AD_ACCOUNT_ID - Récupère insights campaigns + adsets + ads avec spend, revenue, purchases, ROAS - Mutation pour pause campaign / adset - Module lib/meta-ads.ts # Google Ads API (developer token + OAuth refresh token) - GOOGLE_ADS_CUSTOMER_ID, GOOGLE_ADS_DEVELOPER_TOKEN, GOOGLE_ADS_REFRESH_TOKEN, GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET - Récupère insights campaigns + ad groups (cost, conversions, conv_value, ctr) - Mutation pour pause campaign - Module lib/google-ads.ts # Microsoft Advertising API (OAuth + dev token) - MICROSOFT_ADS_CUSTOMER_ID, MICROSOFT_ADS_ACCOUNT_ID, MICROSOFT_ADS_DEV_TOKEN, MICROSOFT_ADS_REFRESH_TOKEN, MICROSOFT_ADS_CLIENT_ID - Récupère campaigns performance report + ad groups - Module lib/microsoft-ads.ts # Pinterest Ads API (v5) - PINTEREST_ACCESS_TOKEN, PINTEREST_AD_ACCOUNT_ID - Récupère analytics campaigns + ad groups (spend, conversions, ROAS) - Module lib/pinterest-ads.ts # Klaviyo API (revision 2024-10) - KLAVIYO_API_KEY - Récupère campaign + flow performance metrics - Sync nightly + snapshot Firestore # Notifs (optionnel mais recommandé) - TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID pour alertes Snooper / Kill List - MAILGUN_API_KEY pour digest email quotidien ## Architecture & règles 1. Toutes les pages sont en /app/<module>/page.tsx, toutes les routes en /app/api/<module>/route.ts 2. Chaque API route DOIT être cachée via un helper cached(key, fn, ttlMs) : - 5 min sur les données du jour en cours - 1h sur les données passées - 24h sur les snapshots Klaviyo 3. Hook client useStaleData<T>(url) qui retourne { data, loading, refreshing } et fait du stale-while-revalidate via localStorage 4. Aggrégateur lib/ads-multi.ts qui unifie Meta + Google + MS + Pinterest derrière une interface commune AdsPlatform avec getDailySpend, getCampaignInsights, pauseCampaign 5. COGS calculé par produit avec formule shipping par pays (config dans Firestore, pas hardcodé) 6. Frais Stripe = 1.5% + 0.25€ par order, frais Shopify = 0.6% du revenue (configurable) ## Modules à livrer Sidebar groupée par intention : Pilotage - /daily — KPIs du jour vs J-1, top 15 produits, top 10 campaigns toutes régies, 5 dernières commandes avec profit ligne par ligne - /journal — Logger des events business + analyse before/after auto sur conversion rate + AOV (fenêtre 7/14/30j) Action - /ads — "Coupe-feu" : toutes les campagnes triées par perte cumulée (3/7/15/30j), bouton Pause par régie - /media-buying — Reporting weekly/monthly + leaderboard top ROAS / worst loss + pivot mois × campagne 12 mois glissants - /kill-list — Verdict auto par campaign + adset (kill / critical / watch / ok) avec seuils ajustables (minSpend, minRoas) et "wasted spend" Produits - /new-collection — Tracking spécifique des produits sortis < 60j - /products — Rentabilité unitaire de tout le catalogue avec COGS, shipping, profit, marge Finance - /reports — P&L daily / weekly / monthly avec ad spend décomposé par régie (FB / Google / MS / Pinterest), bROAS, MER, marge brute, profit net Email - /klaviyo — Campaigns + flows par mois avec open rate, click rate, revenue Clients - /feedback — Aggregateur feedback post-achat (fit, comfort, quality, visual) avec health score 0-100 par produit Veille - /snooper — Detection nouveaux produits / ruptures / retours stock / changements prix sur concurrents Shopify, polling toutes les 5 min en service séparé, notif Telegram ## Composants partagés - PageHeader (titre, sous-titre, slot actions) - KpiCard (label, valeur, delta vs J-1, mini sparkline optionnel) - RefreshIndicator (point vert qui pulse pendant le refresh background) - PeriodSelector (boutons 7/30/90j) - DataTable (tri par colonne, pagination simple) - Chart wrapper Recharts avec theming maison ## Design - Dark theme, accent bordeaux #6b1120 (change-le pour la marque de ton pote) - Sidebar 224px fixe à gauche, contenu fluide à droite - Pas d'icon library : SVG inline dans la sidebar - Tout en français (UI labels, dates, devises) - Devise = € par défaut, formats fr-FR (1 234,56 €) - Timezone Europe/Paris pour les bornes de jour - Police système, pas de Google Fonts ## Anti-patterns à éviter - NE PAS faire du multi-tenant — c'est un dashboard solo - NE PAS mettre de loader spinner au-delà du 1er chargement (stale-while-revalidate gère ça) - NE PAS stocker de credentials en dur — tout en .env.local - NE PAS appeler les API en client-side direct — toujours via /api/* (CORS, secrets, cache) - NE PAS agréger les régies "intelligemment" sans les exposer séparément aussi (toujours pouvoir voir Meta vs Google vs MS séparément) ## Order de livraison 1. Setup Next.js 16 + Tailwind + Sidebar + layout 2. /daily avec Shopify + Meta seulement (MVP minimum) 3. /products + COGS engine 4. /ads + /kill-list avec Meta 5. Brancher Google Ads, MS Ads, Pinterest derrière la même interface AdsPlatform 6. /media-buying, /reports (P&L) 7. /klaviyo, /journal, /feedback 8. /snooper (le plus complexe, à faire en dernier ou en service séparé) Pose-moi les questions sur les credentials manquants AVANT de commencer, pas pendant. Commence par scaffolder le projet et me confirmer la liste des intégrations qu'on a en main.

3 conseils que j'aurais voulu qu'on me donne

Commence par /daily
Le module qui sert le plus c'est le snapshot du jour. Si juste ce module marche bien, t'as déjà 60% de la valeur. Pas besoin d'avoir tout livré pour utiliser.
Mets le cache dès le début
Sans cache, l'agrégat Shopify + 4 régies prend 8-12s. Avec cache 5 min, 100ms. Et tu cognes pas les rate limits.
Brancher 1 régie à la fois
L'interface AdsPlatform commune permet d'ajouter Google puis MS puis Pinterest sans toucher aux pages. C'est l'unique abstraction utile dans tout le projet.