/* Page /make-automatisation-no-code — cas d'usage généré automatiquement (pipeline GSC).
 * Gabarit standard BoomMaker : hero + sections + FAQ + CTA. CSS partagés only. */

const { useState } = React;
const { Logo, ArrowUpRight, Check, ThemeToggle, FooterMin, useReveal } = window.BMShared;

const C = {
  "slug": "make-automatisation-no-code",
  "breadcrumb": "Make en pratique",
  "eyebrow": "Outils · Make 2026",
  "h1": "Make : l'outil no-code qui automatise",
  "h1Em": "ta boîte sans développeur",
  "lead": "Make connecte tes applications entre elles et fait tourner des tâches à ta place, 24h/24. Voici ce que ça change concrètement dans une TPE ou PME.",
  "blocks": [
    {
      "type": "text",
      "eyebrow": "C'est quoi Make",
      "h2": "Un outil qui relie tes apps et exécute des actions à ta place",
      "h2Em": "",
      "intro": "",
      "paragraphs": [
        "Make (anciennement Integromat) est une plateforme d'automatisation visuelle. Tu construis des scénarios en glissant-déposant des blocs : si telle chose se passe dans un outil, alors telle action se déclenche dans un autre.",
        "Exemple simple : un prospect remplit ton formulaire Tally, Make crée automatiquement une fiche dans ton CRM, envoie un email de bienvenue et notifie ton équipe sur Slack. Zéro copier-coller, zéro oubli.",
        "Ce n'est pas un outil réservé aux techs. Avec un peu d'accompagnement, un dirigeant ou une assistante peut comprendre ce qui tourne et pourquoi. C'est l'une des raisons pour lesquelles on l'utilise chez Boom Maker."
      ],
      "stats": [],
      "cards": [],
      "steps": [],
      "items": [],
      "label": "",
      "text": ""
    },
    {
      "type": "stats",
      "eyebrow": "Ce que ça change",
      "h2": "Des heures récupérées chaque semaine",
      "h2Em": "",
      "intro": "Pas de miracle, mais des gains réels sur les tâches les plus répétitives.",
      "paragraphs": [],
      "stats": [
        {
          "value": "5 à 12 h",
          "label": "gagnées par semaine sur la saisie manuelle et les relances, selon la structure"
        },
        {
          "value": "quelques jours",
          "label": "pour déployer un premier scénario fonctionnel en production"
        },
        {
          "value": "1 500 à 6 000 app",
          "label": "connectables nativement dans Make, dont les outils que tu utilises déjà"
        },
        {
          "value": "0 ligne",
          "label": "de code nécessaire pour la grande majorité des automatisations TPE/PME"
        }
      ],
      "cards": [],
      "steps": [],
      "items": [],
      "label": "",
      "text": ""
    },
    {
      "type": "cards",
      "eyebrow": "Cas concrets",
      "h2": "Ce que les petites structures automatisent en premier avec Make",
      "h2Em": "",
      "intro": "Voici les scénarios les plus fréquents qu'on configure pour nos clients.",
      "paragraphs": [],
      "stats": [],
      "cards": [
        {
          "tag": "Cas 01",
          "title": "Qualification et routage des leads",
          "body": "Un formulaire entrant déclenche une vérification, enrichit la fiche contact, l'affecte au bon commercial et envoie une séquence d'emails adaptée au profil. Plus aucun lead ne tombe dans un angle mort."
        },
        {
          "tag": "Cas 02",
          "title": "Facturation et suivi client",
          "body": "Quand un devis est signé dans ton outil de signature, Make crée la facture dans ton logiciel comptable, met à jour le CRM et programme une relance automatique à J+30 si la facture n'est pas payée."
        },
        {
          "tag": "Cas 03",
          "title": "Reporting hebdomadaire automatique",
          "body": "Make collecte les données de tes outils (ventes, trafic, tickets support), les compile et t'envoie un résumé chaque lundi matin. Tu arrives en réunion avec les chiffres de la semaine, sans avoir rien préparé."
        },
        {
          "tag": "Cas 04",
          "title": "Onboarding client ou collaborateur",
          "body": "Dès qu'un nouveau client signe ou qu'un salarié est créé dans ton SIRH, Make déclenche la création des accès, l'envoi des documents, les rappels de formation. Un process complet sans intervention humaine."
        }
      ],
      "steps": [],
      "items": [],
      "label": "",
      "text": ""
    },
    {
      "type": "steps",
      "eyebrow": "Comment on travaille",
      "h2": "De zéro à un scénario Make qui tourne en production",
      "h2Em": "",
      "intro": "",
      "paragraphs": [],
      "stats": [],
      "cards": [],
      "steps": [
        {
          "title": "On cartographie tes tâches répétitives",
          "body": "On commence par identifier les 3 ou 4 actions que toi ou ton équipe faites à la main chaque semaine. Pas besoin d'un audit de 3 mois : un appel de 30 minutes suffit souvent à repérer les gains évidents."
        },
        {
          "title": "On priorise selon le ROI",
          "body": "Toutes les automatisations ne se valent pas. On choisit d'abord celles qui font gagner le plus de temps ou qui réduisent le plus les erreurs, pour que tu voies un résultat concret rapidement."
        },
        {
          "title": "On construit et on teste",
          "body": "On configure le scénario Make, on le teste avec de vraies données, on gère les cas d'erreur. Tu valides avant que ça parte en production. Rien n'est mis en place sans que tu comprennes ce qui se passe."
        },
        {
          "title": "On te forme et on documente",
          "body": "On t'explique comment lire les logs, modifier une étape simple, ou couper un scénario si besoin. Tu n'es pas dépendant de nous pour faire tourner ce qu'on a construit ensemble."
        }
      ],
      "items": [],
      "label": "",
      "text": ""
    },
    {
      "type": "callout",
      "eyebrow": "",
      "h2": "",
      "h2Em": "",
      "intro": "",
      "paragraphs": [],
      "stats": [],
      "cards": [],
      "steps": [],
      "items": [],
      "label": "À retenir",
      "text": "Make n'est pas magique et ne remplace pas une stratégie. Mais sur les tâches répétitives et les flux entre outils, c'est l'un des meilleurs rapports effort/résultat du marché pour une petite structure."
    }
  ],
  "faq": [
    {
      "q": "Make ou Zapier, lequel choisir pour une TPE/PME ?",
      "a": "Les deux font de l'automatisation, mais Make est généralement plus puissant pour des scénarios complexes et moins cher à volume équivalent. Zapier est parfois plus simple à prendre en main seul. Si tu veux aller plus loin que des automatisations basiques, Make est souvent le meilleur choix. On peut t'aider à trancher selon ton contexte."
    },
    {
      "q": "Faut-il savoir coder pour utiliser Make ?",
      "a": "Non. L'interface est visuelle et la majorité des scénarios TPE/PME ne nécessitent aucune ligne de code. Certains cas avancés utilisent des formules ou du JSON, mais c'est gérable avec un accompagnement. Tu n'as pas besoin d'être développeur."
    },
    {
      "q": "Combien coûte Make ?",
      "a": "Make propose un plan gratuit limité, puis des plans payants à partir de quelques dizaines d'euros par mois selon le volume d'opérations. Pour la plupart des TPE, un plan entre 10 et 30 euros par mois couvre largement les besoins de départ. Le coût monte si tu automatises des volumes importants."
    },
    {
      "q": "Mes données passent-elles par Make ? Est-ce sécurisé ?",
      "a": "Make est une plateforme européenne (basée en République tchèque, filiale de Celonis). Les données transitent par leurs serveurs lors de l'exécution des scénarios. Pour des données sensibles (santé, données personnelles en volume), il faut vérifier la conformité RGPD avec ton DPO ou ton conseil juridique. Pour la majorité des usages PME, c'est un niveau de sécurité acceptable."
    },
    {
      "q": "Que se passe-t-il si un scénario plante ?",
      "a": "Make envoie une alerte et journalise l'erreur. Tu peux rejouer les opérations qui ont échoué une fois le problème corrigé. On configure aussi des alertes Slack ou email pour être prévenu immédiatement. Un scénario qui plante ne fait rien de mal, il s'arrête et attend."
    },
    {
      "q": "Boom Maker peut-il reprendre des scénarios Make déjà existants ?",
      "a": "Oui. Si tu as déjà des automatisations en place, on peut les auditer, les corriger ou les faire évoluer. On ne repart pas forcément de zéro. Un audit rapide permet de voir ce qui est solide et ce qui mérite d'être refait proprement."
    }
  ],
  "ctaTitle": "Tu veux voir ce que Make peut faire",
  "ctaEm": "dans ta boîte concrètement ?",
  "ctaText": "On t'offre un audit de 30 minutes pour identifier tes 3 premières automatisations prioritaires. Pas de pitch, juste du concret.",
  "ctaSecondary": null
};

const PageNav = () => {
  const [open, setOpen] = useState(false);
  return (
    <>
      <nav className="nav" id="nav">
        <a href="/" className="nav-logo" aria-label="Boom Maker"><Logo /></a>
        <div className="nav-links">
          <div className="nav-dropdown">
            <button type="button" className="nav-dropdown-trigger" aria-haspopup="true">
              Expertises <span className="nav-dropdown-caret">▾</span>
            </button>
            <div className="nav-dropdown-menu" role="menu">
              <a href="/expertises">3 piliers</a>
              <a href="/cas-usage">Cas d'usage</a>
              <a href="/partners">Partenaires</a>
            </div>
          </div>
          <a href="/tarifs">Tarifs</a>
          <a href="/news">News</a>
          <div className="nav-dropdown">
            <button type="button" className="nav-dropdown-trigger" aria-haspopup="true">
              À propos <span className="nav-dropdown-caret">▾</span>
            </button>
            <div className="nav-dropdown-menu" role="menu">
              <a href="/a-propos">BoomMaker</a>
              <a href="/#faq">FAQ</a>
            </div>
          </div>
          <a href="/contact">Contact</a>
        </div>
        <ThemeToggle />
        <a href="/audit-gratuit" className="btn btn-glow nav-cta-desktop">Audit gratuit <ArrowUpRight /></a>
        <button className="nav-burger" aria-label="Menu" aria-expanded={open}
                onClick={() => setOpen((o) => !o)}>
          <span /><span /><span />
        </button>
      </nav>
      <div className={`nav-mobile ${open ? 'open' : ''}`} onClick={() => setOpen(false)}>
        <span className="nav-mobile-group">/ Expertises</span>
        <a href="/expertises">3 piliers</a>
        <a href="/cas-usage">Cas d'usage</a>
        <a href="/partners">Partenaires</a>
        <a href="/tarifs">Tarifs</a>
        <a href="/news">News</a>
        <span className="nav-mobile-group">/ À propos</span>
        <a href="/a-propos">BoomMaker</a>
        <a href="/#faq">FAQ</a>
        <a href="/contact">Contact</a>
        <a href="/audit-gratuit" className="btn btn-glow">Audit gratuit <ArrowUpRight /></a>
      </div>
    </>
  );
};

/* Rend un bloc de contenu selon son type. Wrapper commun = .expertises-cases
 * (eyebrow + titre), puis corps spécifique. */
const Block = ({ b }) => {
  const head = (
    <>
      {b.eyebrow ? (
        <div className="expertise-eyebrow eyebrow"><span className="pulse" />{b.eyebrow}</div>
      ) : null}
      {b.h2 ? (
        <h2 className="expertises-cases-title">{b.h2}{b.h2Em ? <> <em>{b.h2Em}</em></> : null}</h2>
      ) : null}
      {b.intro ? <p className="uc-intro">{b.intro}</p> : null}
    </>
  );

  let body = null;
  if (b.type === 'stats') {
    body = (
      <div className="uc-stats">
        {b.stats.map((s, i) => (
          <div className="uc-stat" key={i}>
            <div className="uc-stat-value">{s.value}</div>
            <span className="uc-stat-label">{s.label}</span>
          </div>
        ))}
      </div>
    );
  } else if (b.type === 'cards') {
    body = (
      <div className="uc-cards">
        {b.cards.map((card, i) => (
          <article className="uc-card" key={i}>
            {card.tag ? <div className="uc-card-tag">{card.tag}</div> : null}
            <h3 className="uc-card-title">{card.title}</h3>
            <p className="uc-card-body">{card.body}</p>
          </article>
        ))}
      </div>
    );
  } else if (b.type === 'steps') {
    body = (
      <ol className="uc-steps">
        {b.steps.map((s, i) => (
          <li className="uc-step" key={i}>
            <div className="uc-step-num">/ {String(i + 1).padStart(2, '0')}</div>
            <div className="uc-step-content">
              <h3>{s.title}</h3>
              <p>{s.body}</p>
            </div>
          </li>
        ))}
      </ol>
    );
  } else if (b.type === 'checklist') {
    body = (
      <ul className="uc-checklist">
        {b.items.map((it, i) => (
          <li key={i}>
            <Check />
            <span>{it.strong ? <strong>{it.strong} </strong> : null}{it.text}</span>
          </li>
        ))}
      </ul>
    );
  } else if (b.type === 'callout') {
    body = (
      <div className="uc-callout">
        {b.label ? <span className="uc-callout-label">{b.label}</span> : null}
        <p>{b.text}</p>
      </div>
    );
  } else {
    body = b.paragraphs.map((p, i) => (
      <p className="expertises-cases-lead" key={i}>{p}</p>
    ));
  }

  return <section className="expertises-cases">{head}{body}</section>;
};

const PageContent = () => {
  useReveal();
  return (
    <div className="usecase-page tarifs-page">
      <PageNav />

      <article className="audit-hero">
        <div className="container">
          <nav className="expertises-breadcrumb" aria-label="Fil d'Ariane">
            <a href="/">Accueil</a>
            <span className="expertises-breadcrumb-sep" aria-hidden="true">/</span>
            <a href="/cas-usage">Cas d'usage</a>
            <span className="expertises-breadcrumb-sep" aria-hidden="true">/</span>
            <span aria-current="page">{C.breadcrumb}</span>
          </nav>
          <span className="eyebrow"><span className="pulse" /> {C.eyebrow}</span>
          <h1>{C.h1}{C.h1Em ? <> <em>{C.h1Em}</em></> : null}</h1>
          <p className="lead">{C.lead}</p>
        </div>
      </article>

      <section className="expertises-content tarifs-content">
        <div className="container">
          <div className="expertises-main">
            {C.blocks.map((b, bi) => <Block b={b} key={bi} />)}

            {C.faq.length ? (
              <section className="expertises-faq" id="faq" aria-labelledby="faq-title">
                <div className="expertise-eyebrow eyebrow"><span className="pulse" />Questions fréquentes</div>
                <h2 className="expertises-faq-title" id="faq-title">Ce qu'on nous demande <em>le plus souvent.</em></h2>
                <div className="expertises-faq-list">
                  {C.faq.map((item, i) => (
                    <details className="expertises-faq-item" key={i}>
                      <summary>
                        <span>{item.q}</span>
                        <span className="expertises-faq-caret" aria-hidden="true">+</span>
                      </summary>
                      <p>{item.a}</p>
                    </details>
                  ))}
                </div>
              </section>
            ) : null}
          </div>
        </div>
      </section>

      <section className="partners-content partners-content-minimal">
        <div className="container">
          <div className="partners-cta-final">
            <h2>{C.ctaTitle}{C.ctaEm ? <> <em>{C.ctaEm}</em></> : null}</h2>
            <p>{C.ctaText}</p>
            <div className="partners-cta">
              <a href="/audit-gratuit" className="btn btn-glow">Réserver l'audit gratuit <ArrowUpRight /></a>
              {C.ctaSecondary ? (
                <a href={C.ctaSecondary.href} className="btn btn-ghost">{C.ctaSecondary.label} <ArrowUpRight /></a>
              ) : (
                <a href="/cas-usage" className="btn btn-ghost">Voir tous les cas d'usage <ArrowUpRight /></a>
              )}
            </div>
          </div>
        </div>
      </section>

      <FooterMin />
    </div>
  );
};

ReactDOM.createRoot(document.getElementById('root')).render(<PageContent />);
