Documentation / {{ group_label }} / {{ active_label }}

Démarrer avec Single File FREE

Créez et déployez une page web à l'aide de prompts IA et de modèles. C'est la façon la plus rapide de démarrer avec QuickStart.

Temps estimé : ~5 minutes
1
Éditeur
2
Modèle
3
Édition & Preview
4
Compte
5
Déployer
6
Terminé !
1
Ouvrir l'éditeur de code

Connectez-vous à QuickStart et cliquez sur Fichier unique dans le menu de gauche. L'éditeur IA Coder s'ouvre : un environnement intégré pour HTML, SCSS et Vue.js sur un seul écran.

ASTUCE Pour une première fois, nous recommandons de partir d'un modèle plutôt que d'un éditeur vide.
2
Choisir un modèle

Cliquez sur le menu déroulant des modèles en haut de l'éditeur. Parcourez les modèles prêts à l'emploi — landing pages, portfolios, tableaux de bord — ainsi que ceux partagés par la communauté.

ASTUCE Les modèles communautaires se trouvent sous l'onglet « Shared Templates ».
3
Éditer le code et prévisualiser

Une fois le modèle chargé, le code HTML, SCSS et JavaScript apparaît. Modifiez à volonté puis cliquez sur Run pour voir le résultat en direct. Vous pouvez aussi demander à l'IA de générer du code via un prompt.

ASTUCE Exemple de prompt : « Crée un en-tête responsive avec 3 sections cartes ».
4
Connecter le compte Railway

Pour le premier déploiement, il faut un compte Railway. Allez dans Paramètres > Compte et enregistrez votre jeton API Railway — c'est une configuration unique qui s'applique à tous les déploiements ultérieurs.

ASTUCE Railway propose un plan gratuit, vous pouvez donc démarrer sans vous soucier du coût.
5
Déployer

Cliquez sur Deploy en haut de l'éditeur. La progression s'affiche étape par étape — génération des fichiers, upload, build — tout est automatique et prend en général 1 à 2 minutes.

ASTUCE À la fin du déploiement, un domaine est provisionné en même temps, votre page dispose donc immédiatement d'une URL live.
6
Terminé ! Domaine gratuit prêt

Une fois déployé, QuickStart attribue automatiquement un domaine gratuit. Cliquez sur le lien pour voir votre page en ligne. Félicitations !

ASTUCE Vous pouvez modifier le nom de domaine à tout moment dans la Gestion des domaines.

Démarrer avec un Projet

Construisez une application web full-stack avec frontend et backend. Le projet n'est pas un point d'entrée autonome — il se déploie sur un conteneur (domaine) qui doit déjà être provisionné via le chemin Base de données ou Macro. Terminez d'abord l'un de ces chemins, puis revenez ici.

Temps estimé : ~15 minutes (conteneur prêt)
1
Créer le projet
2
Programmes
3
Routes
4
Déployer
5
Vérifier domaine
1
Choisir le conteneur et créer le projet

Dans le menu Projet, cliquez sur « Nouveau projet ». Saisissez un nom et une description, puis sélectionnez un domaine (conteneur) existant et un dataset — la structure du projet sera échafaudée sur ce conteneur. Un domaine représente le conteneur Docker où vit le runtime, il doit donc être provisionné au préalable via Base de données ou Macro.

ASTUCE Si aucun domaine n'est disponible, commencez par « Démarrer avec une base de données » ou « Démarrer avec une macro » pour provisionner un conteneur.
2
Écrire les programmes

Ajoutez des programmes à votre projet — chaque programme représente une page ou une unité fonctionnelle. Créez l'UI en HTML/CSS et la logique serveur en PHP. L'IA peut générer le code via des prompts.

ASTUCE Forker un projet existant est bien plus rapide que partir de zéro.
3
Configurer les routeurs

Mappez les programmes à des URL via les routes. Par exemple, associez un programme « Board » à /board — les visiteurs y accèdent via cette URL. GET/POST sont configurables.

ASTUCE Avec l'extension VSCode, les routes sont générées automatiquement à partir des noms de fonctions.
4
Déployer

Cliquez sur Deploy pour lancer le déploiement automatique en 8 étapes : Pack → DB → chiffrement → upload → build → config → test → terminé. Progression en temps réel.

ASTUCE Premier déploiement 2-3 min, mises à jour suivantes env. 1 min.
5
Vérifier le domaine

Après le déploiement, visitez le domaine lié au projet. Testez que programmes, routes et connexions DB fonctionnent correctement.

ASTUCE En cas de problème, utilisez « Gestion à distance » pour inspecter et éditer directement les fichiers serveur.

Démarrer avec la base de données PRO

Le point d'entrée le plus léger. Ce chemin provisionne un conteneur Docker (domaine) avec un moteur de base de données (MySQL, MariaDB, PostgreSQL ou MongoDB au choix) + backend PHP/Laravel + npm — une stack volontairement minimaliste. Idéal si vous n'avez besoin que d'une DB et d'un backend web simple, et que vous voulez un footprint réduit. Commencez par stocker des données, exécuter du SQL, générer automatiquement des API REST. Passez au chemin Macro plus tard si vous avez besoin de plus.

Temps estimé : ~10 minutes
1
Créer dataset
2
Explorer tables
3
Exécuter SQL
4
Générer API
5
Utiliser données
1
Créer un dataset

Dans le menu Base de données, cliquez sur « Nouveau dataset » pour ouvrir l'assistant. Étape 1 : choisissez Deploy (provisionner un conteneur DB via Railway) ou Connect (renseigner host / port / identifiants d'une DB existante), puis sélectionnez le moteur — MySQL, MariaDB, PostgreSQL ou MongoDB.

ASTUCE QuickStart ne fournit pas de DB par défaut. Si vous n'avez pas de DB existante, Deploy est la voie la plus rapide.
2
Explorer les tables

Parcourez la liste des tables dans l'éditeur DB et inspectez la structure des champs. Créez de nouvelles tables ou modifiez les existantes.

ASTUCE Cliquez sur un nom de table pour voir ses champs et un aperçu des données.
3
Exécuter du SQL

Saisissez du SQL dans l'éditeur et exécutez-le, résultats instantanés. Tous les types (SELECT, INSERT, UPDATE, DELETE) sont supportés. L'IA peut aussi générer des requêtes en langage naturel.

ASTUCE Pattern courant : demander à une IA de rédiger le SQL, coller le résultat dans l'éditeur puis l'exécuter.
4
Autogénérer des APIs

Sélectionnez une table puis cliquez sur Générer l'API — une interface de mapping s'ouvre pour examiner la structure. Acceptez les valeurs par défaut pour produire les endpoints CRUD (create / read / update / delete) en une fois, ou reconfigurez les champs exposés, paramètres et forme de réponse avant la génération.

ASTUCE Les API générées se branchent directement sur les blocs du Layout Builder ou les programmes d'un projet.
5
Utiliser vos données

Reliez les API générées aux blocs du Layout Builder ou appelez-les depuis vos programmes pour construire des services basés sur les données. Import/export via CSV ou JSON.

ASTUCE L'intégration Google Sheets permet d'importer des données de tableur en temps réel.

Démarrer avec un Macro MAX

Choisissez ce chemin quand vous avez besoin d'un runtime bien plus riche que celui du chemin Base de données. Il provisionne un conteneur Docker (domaine) avec MariaDB et PostgreSQL inclus automatiquement, MongoDB en option, plus Python, Node.js, curl, jq, automatisation temporelle récurrente, ffmpeg, et la plupart des outils que vous pourriez un jour utiliser — préinstallés. Adapté aux charges composites : scraping/traitement de données, orchestration d'API externes, transcodage média, automatisations planifiées. Si vous hésitez entre « DB + PHP suffit » et « j'aurai peut-être besoin de plus », ce chemin est plus sûr.

Temps estimé : ~10 minutes
1
Macro
2
Code
3
Quick Test
4
Planning
5
Déployer
1
Créer un macro

Dans le menu Macro, cliquez sur « Nouvelle macro » et donnez-lui un nom. Si des paramètres d'entrée sont requis, définissez leurs noms, types et valeurs par défaut — ce sont les variables qui reçoivent les valeurs à l'exécution.

ASTUCE Une macro s'exécute avec ses paramètres, il faut donc en définir au moins un. Si écrire les paramètres de zéro est pénible, choisissez l'un des 24 scénarios prêts à l'emploi — paramètres et code de démarrage sont préremplis ensemble.
2
Écrire le code

Écrivez la logique d'automatisation en Node.js ou PHP dans l'éditeur. Appelez des API externes, transformez des données, gérez des fichiers — tout est possible. L'objet run_data donne accès aux paramètres et au contexte d'exécution.

ASTUCE Retournez { success: true, data: [...] } pour afficher les résultats sous forme de tableau.
3
Quick Test

Testez votre code instantanément. Cliquez sur Quick Test et la macro s'exécute immédiatement, le résultat apparaît dans le panneau inférieur. Formats supportés : tableau, JSON, liens de téléchargement, messages.

ASTUCE En cas d'erreur, la ligne exacte du problème est indiquée.
4
Planifier

Pour exécuter la macro automatiquement à intervalle régulier, saisissez simplement deux valeurs : heure de début (HH:MM) et intervalle en minutes. Exemples : 00:00 + 5 → toutes les 5 minutes à partir de minuit ; 03:30 + 1440 → une fois par jour à 3h30.

ASTUCE Les résultats des exécutions planifiées sont consultables dans les logs.
5
Déployer

Déployez votre macro sur un serveur Railway pour une exécution fiable et indépendante. Après déploiement, un endpoint API est créé, permettant aux systèmes externes de déclencher la macro via HTTP.

ASTUCE Les macros déployées peuvent être mises à jour sans redémarrage du serveur.

Vue d'ensemble de QuickStart

Assimiler d'abord les concepts clés ci-dessous rend beaucoup plus limpide la manière dont les fonctions de QuickStart s'articulent — et vous tirerez nettement plus de valeur du service. Parcourez la carte des concepts en haut par catégorie, puis cliquez sur n'importe quelle puce pour accéder à une fiche détaillée. Les liens croisés dans chaque description vous permettent de naviguer en douceur entre concepts apparentés.

Carte des concepts

Concepts clés

Domaine

Une unité de conteneur Docker où réside le runtime de votre projet. Provisionnée sur Railway avec une URL unique (p. ex. happycat.apidealder.net). Créée automatiquement lorsque vous passez par le parcours Deploy de la Base de données ou du Macro, et chaque Projet est installé sur un domaine existant. Un utilisateur peut posséder plusieurs domaines ; plusieurs projets peuvent partager un même domaine.

Déploiement

Le pipeline automatisé en 8 étapes qui fait passer votre code et votre schéma édités localement en état de fonctionnement réel : Pack → config BD → chiffrement → upload → build → configuration → test → terminé. Les résultats s'appliquent au Domaine cible et chaque exécution est enregistrée dans deploy_logs. Les redéploiements se terminent généralement en une minute environ.

Agent

Un exécuteur distant qui tourne à l'intérieur du conteneur Domaine de chaque utilisateur. Au lieu de faire transiter de grandes données par le serveur QuickStart, l'agent opère directement sur la base de données et le système de fichiers du conteneur du client. La plupart des CRUD des utilisateurs standards sont traités en envoyant SQL ou commandes directement à l'agent.

Projet

L'unité d'exécution de plus haut niveau d'une application web full-stack. Regroupe plusieurs Programmes, Routeurs, liaisons de Datasets, Traductions, historique des Révisions et membres de l'Équipe. Un projet n'est pas un point d'entrée autonome — un Domaine (conteneur) doit être prêt avant son installation.

Programme

Une page ou unité fonctionnelle à l'intérieur d'un Projet. Associe un front-end (HTML / SCSS / Vue.js) à un back-end (PHP) et le mappe à une URL via un Routeur. Vous pouvez générer ou itérer sur les programmes via prompts IA et revenir à tout moment à une Révision antérieure.

Constructeur de programme

Un outil pour assembler visuellement un Programme à partir de blocs plutôt que de code. Glissez-déposez des Blocs, reliez des sources de données, et le constructeur produit de vrais fichiers de programme. Vous pouvez basculer librement entre conception sans code et édition directe ; enfin, une commande de build convertit toute la configuration du constructeur en code source et la consolide en Programme standard.

Hook

Des points d'injection de code personnalisé à des emplacements précis d'un Programme généré par le constructeur. Conservez la logique commune — vérification de connexion, garde des permissions, pré-traitement d'upload — sous forme de snippets et réutilisez-la dans d'autres programmes. Le contenu des hooks est conservé à leurs positions nommées même après régénération, ce qui permet d'itérer librement.

Scaffold

Un modèle structurel réutilisable utilisé à deux niveaux. Un scaffold de projet est un plan qui produit, à la création d'un nouveau Projet, un ensemble préconfiguré de programmes, de schéma et de données initiales. Un scaffold de bloc fournit un squelette de tokens SCSS et de gabarits de style pour que les Blocs restent cohérents visuellement. Choisissez le scaffold le plus proche de votre objectif puis ajustez — pas besoin de partir de zéro.

Routeur

La table de mappage qui relie des chemins URL à des Programmes. Décrit de façon déclarative GET/POST, paramètres de requête et segments dynamiques (:id). Ajouter ou supprimer une route ne demande pas de déploiement : changement immédiat.

Révision

Versionnage automatique du code des Programmes et de l'agencement des blocs. Chaque sauvegarde laisse un instantané de différences, vous pouvez revenir à n'importe quel moment. Idéal pour expérimenter sereinement avec l'IA.

Solution

Un paquet-modèle public permettant de distribuer d'un coup Projet, Datasets et configurations. Un fork copie le projet avec ses données initiales dans votre compte. Un kit de démarrage partagé par la communauté.

Dataset

Un ensemble de définitions de tables (ou collections) de BD et d'informations de connexion. Prend en charge plusieurs pilotes : MySQL, PostgreSQL, MongoDB, SQLite. Se lie à un Projet pour des opérations CRUD et sert aussi de cible de sauvegarde pour Parser et macros.

Parseur

Un moteur de règles pour collecter automatiquement des données depuis des sites web. Configurez URL cible, Loop Splitter et sélecteurs XPath/JSON et il extrait les éléments répétés depuis HTML/JSON pour les enregistrer dans un Dataset. En s'enregistrant dans le planificateur, le crawl devient cyclique.

Bloc

Composants UI réutilisables utilisés dans le Constructeur de programme. Texte, image, liste, formulaire, etc. Une fois câblés à une source de données, ils deviennent dynamiques. Placés dans un Frame dans le constructeur de mise en page pour composer un écran.

Preset

Un helper de prompt IA intégré dans un Block. Quand vous demandez à l'IA de générer ou modifier du contenu lié à un bloc, le preset emballe automatiquement le contexte utile (type de bloc, objectif, forme des données, tokens de design, etc.) dans le prompt. Pas besoin de réexpliquer le setup à chaque fois, les sorties IA restent cohérentes entre itérations, et la boucle « générer-ajuster » va beaucoup plus vite.

Frame

Un modèle d'écran responsive — un conteneur à emplacements. Fournit des zones (en-tête, corps, barre latérale, pied) où placer des Blocs. Sert de squelette global d'un écran et se réutilise sur plusieurs pages.

Scene

Une unique slide au sein d'un diaporama. Chaînez des pages de layout comme scènes pour construire présentations ou canaux d'affichage, et contrôlez transitions, timing et interactions par scène.

Macro

Scripts serveur PHP/Node.js/Python. Pour automatiser des tâches répétitives : ETL, appels API en batch, migrations de données, import CSV, etc. Exécutés sur votre propre serveur de macros et vérifiés immédiatement via Quick Test.

Traduction

Fonction qui traduit automatiquement les textes du projet vers plus de 40 langues. Avec gestion des clés et des slugs ; la traduction IA peut générer toutes les langues d'un coup. Le changement de langue dans l'UI est immédiat.

Patch

Une mise à jour légère qui n'applique que les changements sélectionnés à un Projet déjà déployé. Au lieu d'un redéploiement complet, un patch n'envoie que les programmes, routeurs ou traductions modifiés à l'agent pour prise d'effet immédiate — idéal pour des hotfixes urgents ou de petits retouches.

User

Un compte QuickStart. Les utilisateurs sont répartis sur les paliers Free · Pro · Max selon leur abonnement, et chaque palier ouvre un ensemble différent de plans de service et de fonctionnalités. Upgrade à tout moment — voir la page Tarifs pour le détail complet.

Équipe

Des collaborateurs configurables par Projet. Les membres invités peuvent lire, éditer ou déployer selon leurs droits. L'appartenance aux projets se gère par équipe et se stocke en team_ids séparés par virgules.

Architecture

Comprendre l'architecture technique de QuickStart vous permet d'en tirer davantage.

Découpage en couches

Client (navigateur)

Rôle Écrans du service, saisies utilisateur et transferts de fichiers directs
  • Éditeurs dédiés pour Single File · Projet · Base de données · Macro · Collecte de données
  • Chatter avec l'IA et prévisualiser le résultat instantanément
  • Basculement entre 40 langues et aperçu dans la fonction Projet
  • Stocke en toute sécurité dans le navigateur les informations de connexion, les modifications en cours et les préférences de thème
  • Canvas glisser-déposer pour placer les blocs dans le Layout Builder
  • Les gros fichiers sont téléversés et téléchargés directement depuis le conteneur de l'utilisateur, sans passer par le serveur central

Serveur QuickStart

Rôle Tour de contrôle orchestrant comptes et opérations du service
  • Gestion des comptes, des plans et des paiements
  • Suit les listes et l'état courant des projets, solutions et domaines
  • Au démarrage d'un déploiement, chaque étape s'exécute automatiquement dans le bon ordre
  • Délivre les autorisations temporaires de transfert nécessaires aux navigateurs pour parler directement au conteneur
  • Sert les pages et ressources nécessaires au rendu de l'UI
  • Les données des utilisateurs réguliers ne traversent jamais le serveur central : charge et coût restent faibles

Agent Docker (serveur utilisateur)

Rôle Traite les vraies données, fichiers et exécutions directement dans le conteneur de chaque utilisateur
  • Toujours actif, à l'intérieur du domaine (conteneur) de l'utilisateur
  • Crée, lit, met à jour et supprime directement les vraies données de programmes, blocs, routeurs et datasets
  • Opérations de fichiers à distance — upload, édition, download
  • Lance directement les programmes, macros et tâches de collecte déployés
  • Vérifie les requêtes via une clé de sécurité dédiée et une autorisation temporaire
  • Les données de l'utilisateur restent isolées dans ce conteneur et ne se mélangent jamais à celles d'autrui

Hébergement Railway

Rôle Partenaire d'infrastructure fournissant l'hébergement de conteneurs, les environnements de déploiement et les domaines
  • Provisionne de nouveaux conteneurs et fournit l'environnement de déploiement
  • Attribue automatiquement un domaine par défaut et permet d'en connecter un personnel
  • Adapte automatiquement la puissance et la mémoire selon le trafic
  • Agrège les journaux d'exécution et les métriques d'état
  • QuickStart pilote les opérations sur les conteneurs via un canal d'intégration officiel

Flux réseau entre couches

Canal Extrémités Protocole Ce qui circule
Canal de contrôle Client ↔ Serveur QuickStart Connexion sécurisée à session Transporte les requêtes courantes : connexions, listes de projets, changements de paramètres. Les charges utiles sont petites, l'UI reste réactive et la charge serveur faible.
Canal de données (contournant le serveur) Client ↔ Agent Docker Autorisation de transfert à usage unique Uploads, downloads, édition distante et gros résultats de requêtes passent ici. Le navigateur de l'utilisateur communique directement avec son propre conteneur — le serveur central QuickStart n'est pas dans le chemin, donc les gros transferts ne coûtent ni stockage ni bande passante serveur et restent rapides.
Canal de coordination Serveur QuickStart ↔ Agent Docker Clé de sécurité propre au conteneur Sert à vérifier la santé du conteneur de l'utilisateur, à sonder les capacités disponibles et à échanger les signaux de gestion nécessaires autour des déploiements. Aucune vraie donnée utilisateur ne circule ici.
Canal d'approvisionnement Serveur QuickStart ↔ Railway Intégration officielle avec le fournisseur d'infrastructure Transporte les instructions d'infrastructure — création de nouveaux conteneurs, demandes de déploiement, câblage de domaines. Si l'utilisateur a enregistré son propre compte Railway dans QuickStart, ces actions se font dans ce compte.
Containment Agent Docker ⊂ Railway L'agent tourne à l'intérieur d'un conteneur géré par Railway. Railway possède le cycle de vie, les ressources et le réseau du conteneur ; les soucis d'infrastructure sont donc absorbés à son niveau et l'utilisateur peut se concentrer sur sa logique métier.
Avantages structurels

Le serveur central ne gère que le contrôle et la coordination, tandis que les données réelles s'échangent directement entre le navigateur de l'utilisateur et son propre conteneur. Comme il n'y a pas de goulet d'étranglement central, les transferts restent rapides même à forte charge, et les coûts de stockage et de bande passante serveur chutent fortement. Plus important encore, les données de chaque utilisateur restent isolées dans son propre conteneur — il n'existe tout simplement pas de chemin par lequel elles pourraient se mélanger à celles d'un autre utilisateur ou au serveur central, de sorte que la sécurité des données devient une propriété de l'architecture elle-même.

Tarifs & Plans

Démarrez gratuitement avec QuickStart. Passez à PRO ou MAX selon vos besoins.

Plan Services disponibles Idéal pour
FREE
Single File Layout Builder Slideshow (basique) Gestion de domaine Support communautaire
Particuliers publiant des idées sous forme de pages mono-fichier rapides
PRO
+ Tout FREE Projet full-stack Base de données Crawling web Curseur paramétrique Slideshow
Opérateurs d'applications web full-stack nécessitant aussi base de données et crawling web
MAX
+ Tout PRO Coder Builder Automatisation Macro Crawling planifié Canal Display
Power users ayant besoin d'automatisation planifiée et de fonctionnalités avancées
Voir les tarifs détaillés

Fichier unique

La façon la plus simple de créer une page web à partir d'un seul fichier.

Fichier unique
Fonctionnalités clés
1
Liste programmes
2
Nouveau
3
Éditeur de code
4
Déployer
5
Publier
1
Étape 1 · Disposition de l'éditeur

Allez sur /service/single. La barre d'outils supérieure est divisée en trois zones.

  • Gauche — Historique · Guide · Titre de l'app · Enregistrer (💾)
  • Centre — Liste déroulante de modèles (11 options)
  • Droite — Liste partagée · Partager · Copier · Exécuter ▶ · Déployer 📦

Le corps contient quatre onglets d'éditeur (prompt · html · scss · vuejs) et un aperçu en direct à droite.

ASTUCE Un petit point (●) à côté d'un onglet signale des modifications non enregistrées. Appuyez sur Ctrl+S avant Exécuter.
2
Étape 2 · Choisir un modèle ou écrire un prompt

Deux façons de démarrer :

  1. Modèles prêts à l'emploi — 11 options dans la liste : E-Commerce · Graphique boursier temps réel · Tableau de favoris · Tarification SaaS · Menu de borne · Réservation de restaurant · Hub créateur YouTube · Détail produit · Application de chat · Compte à rebours d'événement · Tableau de bord admin. Sélectionner un remplit instantanément les quatre onglets.
  2. Prompt AI de zéro — décrivez ce que vous voulez dans l'onglet prompt (p. ex. « page menu café avec 3 onglets de catégories »), puis le bouton AI génère automatiquement les onglets HTML/SCSS/Vue.
ASTUCE Le bouton « Liste partagée » donne accès à des modèles publiés par d'autres utilisateurs. Démarrer à partir d'un exemple déjà terminé chez quelqu'un d'autre est la voie la plus rapide.
3
Étape 3 · Éditer le code (4 onglets)

Changez d'onglet pour modifier chaque couche.

  • prompt — la description utilisée pour la régénération par AI. Éditer + régénérer rafraîchit le code.
  • html — structure et texte. Numéros de ligne + recherche Ctrl+F.
  • scss — couleurs, polices, espacements. La plupart des modèles déclarent les variables de thème en tête du fichier.
  • vuejs — données et interactivité. Utilise data() { return { ... } }, methods: { ... }, mounted().
ASTUCE Vue 3 Options API uniquement — const/let, fonctions fléchées et littéraux modèles sont interdits. Utilisez var et function.
4
Étape 4 · Prévisualiser avec Run ▶ et le bouton Historique

Cliquez Exécuter ▶ à droite de la barre d'outils pour rendre la page en direct dans le panneau d'aperçu. Cliquez à nouveau après modifications pour rafraîchir.

Le bouton Historique en haut à gauche ouvre vos versions enregistrées récentes. L'icône → Charger sur une ligne restaure cet état — votre filet de sécurité quand une modification casse quelque chose.

ASTUCE Les liens et boutons sont réellement cliquables dans l'aperçu. Vivez ce que verra un visiteur, de bout en bout.
5
Étape 5 · Déployer ou partager avec la communauté

Deux manières de sortir votre travail :

  • Déployer 📦 — bouton tout à droite de la barre d'outils. Après avoir connecté un compte Railway, une modale de progression s'exécute ; en 1–3 minutes votre page est en ligne sur un domaine gratuit.
  • Partager — l'icône partage dans la barre. Ajoutez titre/description/tags et publiez à la communauté ; les autres peuvent forker votre travail (c'est un partage de modèle, pas un déploiement en live).
ASTUCE Chaque enregistrement devient une entrée d'historique, donc si un Déploiement échoue, vous pouvez restaurer l'état précédent depuis l'Historique et réessayer.

Projet

Développez des applications full-stack avec frontend et backend.

Projet
Fonctionnalités clés
1
Liste projets
2
Créer projet
3
Ajouter programme
4
Routeur & menu
5
Déploiement & domaine
1
Étape 1 · Écran de liste des projets

Ouvrez Service > Projet depuis le menu. La disposition :

  • Barre latérale gauche — boutons bleus [+ Nouveau projet] / [+ Nouvelle équipe] plus les sections Récents, Solutions publiques, Mes projets, Équipes.
  • Fil d'Ariane supérieur — bascule entre les vues liste ↔ détail ↔ programmes ↔ déploiement.
  • Corps — cartes montrant pour chaque projet : badge de domaine, type BD, nombre de programmes/routeurs.
ASTUCE Un projet repose toujours sur un domaine existant (conteneur). Si vous n'en avez pas, déployez d'abord Base de données ou Macro pour en provisionner un.
2
Étape 2 · Créer un nouveau projet (assistant en 2 étapes)

Cliquez [+ Nouveau projet] → modale d'assistant.

  1. Étape 1 — cartes de fonctionnalités et diagramme de flux.
  2. Étape 2 — configuration
    • Domaine (obligatoire) — l'un de vos domaines existants
    • Dataset (obligatoire) — la BD utilisée par ce projet
    • Nom / description du projet
    • Attribution d'équipe (cases à cocher)
  3. [Enregistrer] en bas — activé seulement quand domaine et dataset sont choisis.
ASTUCE Plusieurs projets peuvent partager un même domaine — utile pour séparer un front public et une page d'admin sur le même conteneur.
3
Étape 3 · Ajouter un programme et développer dans l'éditeur

Un programme est une page ou un bloc fonctionnel du projet. Remplissez les infos de base dans le formulaire de création, puis plongez directement dans l'éditeur de code pour écrire Blade + SCSS + Vue sur un seul écran.

1) Créer un nouveau programme

La barre d'outils du détail projet affiche [+ Nouveau programme] et [+ Nouveau routeur]. Cliquer sur Nouveau programme ouvre une modale formulaire.

  • Nom du programme (p. ex. home, admin_dashboard)
  • Description — une ligne sur ce qu'est l'écran/la fonctionnalité
  • Typefrontend (HTML/CSS/JS) / backend (PHP)
  • Routeur — choisir un routeur existant, ou en créer un en inline avec alias + chemin URL + méthode HTTP

2) Ouvrir l'éditeur de code & disposition de l'écran

Cliquer sur l'icône d'une ligne de programme bascule en vue éditeur. L'écran est divisé en trois zones.

  • Fil d'Ariane + barre d'outils supérieurs — nom du programme courant, indicateur d'état de sauvegarde, et un groupe de boutons-outils, tous sur la même ligne.
  • Barre latérale gauche — liste des autres programmes du même projet. Chaque ligne a des icônes rapides (Code) et (Builder) pour sauter entre vues.
  • Éditeur 3 colonnes au centre — trois panneaux CodeMirror 6 (HTML / CSS / JavaScript) côte à côte. Cliquer sur un panneau le met en surbrillance focused, et le thème de l'éditeur suit automatiquement votre réglage Clair/Sombre.

3) Ce que contient réellement chaque onglet

  • HTML — HTML pur plus directives Blade (@if, @foreach) et sortie @{{ ... }}. Variables côté serveur, conditions et boucles directement dans le template.
  • CSS — syntaxe SCSS (imbrication, références &, variables, mixins) telle quelle. Compilée automatiquement au déploiement.
  • JavaScript — forme Vue 3 Options API (data / computed / methods / mounted). Le runtime la capte automatiquement et la lie au template de la colonne HTML.

Les raccourcis CodeMirror standard fonctionnent comme attendu : Ctrl+F pour la recherche dans l'éditeur, Ctrl+Z annuler, Ctrl+/ commenter, fermeture auto des crochets/balises, retour à la ligne doux.

4) État d'édition & cycle de sauvegarde

Dès que vous changez un seul caractère, Non enregistré apparaît dans la barre supérieure pour signaler des changements non sauvegardés. Cliquez sur [ Enregistrer] et les trois onglets partent en même temps ; au succès, un Enregistré clignote brièvement.

Chaque sauvegarde écrit les trois colonnes dans le corps du programme et enregistre simultanément l'instant comme revision. Enregistrer = instantané de version auto — vous pourrez revenir à n'importe laquelle plus tard.

5) Deploy on Save — en live à chaque enregistrement

Basculer la bascule [Deploy on Save] à côté d'Enregistrer sur ON et chaque sauvegarde auto-déploie aussi le changement vers la destination du projet (p. ex. le serveur principal). Un court badge « N déployés » apparaît brièvement après l'envoi, donc pas besoin de cliquer un bouton Déployer séparé — la boucle « éditer → en ligne » se referme toute seule. La bascule est mémorisée par projet.

6) Le cluster d'outils supérieur en coup d'œil

  • Base de données — ouvre la pop-up liaison dataset. Donnez un nom de variable, choisissez une table, réglez WHERE/LIMIT/ORDER, et le résultat de la requête est injecté automatiquement dans le programme sous cette variable.
  • Builder — bascule vers une vue d'édition à base de blocs du même programme. Vue Code et vue Builder partagent la même sortie.
  • Code Search — panneau recherche & remplacement projet-wide (voir 7 ci-dessous).
  • Revisions — historique de révisions avec panneau diff (voir 8 ci-dessous).
  • Guide de l'extension — pop-up expliquant comment éditer et déployer le même projet localement via l'extension VSCode.

7) Recherche & remplacement projet-wide

Tapez un mot-clé en haut et pressez Entrée ou le bouton . Les onglets de portée donnent deux choix — Project (tous les programmes du projet courant) ou Revisions (inclure les instantanés passés).

  • Les résultats montrent un badge de type (HTML / CSS / JS), l'ID du programme, son nom et le nombre de correspondances.
  • Les onglets de filtre de type All / HTML / CSS / JS restreignent à une seule colonne, avec le décompte par onglet.
  • Cliquer sur la flèche à côté d'un nom de programme saute directement dans l'éditeur de ce programme.
  • Cliquer [Show More] sur une ligne ouvre à droite le panneau de contexte avec le code entourant chaque correspondance.

Replace vit sur la deuxième ligne. Choisissez une portée (All / HTML / CSS / JS), remplissez termes de recherche et de remplacement, pressez le bouton — une confirmation « changements effectués dans N fichiers » apparaît, et sur Oui le remplacement projet-wide s'exécute en un coup.

8) Revisions · historique et retour arrière

Chaque sauvegarde ajoute un instantané ici. Dès que le panneau s'ouvre, il lance automatiquement un diff la dernière révision ↔ vos éditions actuelles à droite.

  • Gauche : la liste des révisions (paginée). Chaque ligne a trois icônes d'action :
    • Revert — écraser l'éditeur avec cette révision (les changements non enregistrés sont perdus).
    • Diff avec actuel — cette révision ↔ ce qui est dans l'éditeur maintenant.
    • Diff avec la précédente — cette révision ↔ la révision immédiatement avant.
  • Droite : diff côte-à-côte avec onglets HTML / CSS / JS. L'onglet qui a réellement changé est auto-sélectionné.

9) L'ordre réel qu'un auteur suit

  1. Ouvrir l'éditeur depuis l'icône d'une ligne de programme.
  2. Écrire dans les onglets HTML(Blade) → CSS(SCSS) → JS(Vue) selon ce que le changement nécessite.
  3. Aller chercher Base de données quand il faut des données, Code Search pour des recherches cross-programmes, Revisions pour comparer avec l'historique.
  4. Appuyer [Enregistrer] → attendre « Enregistré ». Si Deploy on Save est ON, le déploiement part aussi.
  5. Si quelque chose casse, revenir à l'instantané approprié via le panneau Revisions.
  6. Pour un renommage qui traverse beaucoup de programmes, utilisez Code Search → Replace pour le faire en une action confirmée.
ASTUCE Un programme sans routeur agit comme un layout / partial partagé que d'autres programmes incluent en interne. Comme chaque sauvegarde s'empile en révision, on peut expérimenter librement — et pour un hotfix où la boucle édition-à-live doit être la plus courte, activez brièvement Deploy on Save : chaque sauvegarde atteint immédiatement le serveur de prod.
4
Étape 4 · Associer les programmes à des URL via les routeurs

Enregistrez des routeurs dans la section pliable des routeurs de la vue détail, ou via [+ Nouveau routeur].

  • alias — identifiant interne (p. ex. home, api_orders)
  • Chemin URL — chemin public (p. ex. /home, /api/orders)
  • Méthode HTTP — GET / POST / PUT / DELETE / ANY

Reliez un routeur à un programme dans le sélecteur de routeur du formulaire du programme — les visiteurs tombant sur cette URL déclencheront le programme.

ASTUCE Avec l'extension VSCode, les entrées de routeur sont auto-suggérées à partir de noms de fonctions comme function list_orders().
5
Étape 5 · Déployer (pipeline en 9 étapes)

Cliquez sur l'icône 🚀 (fusée) d'une carte dans la liste des projets pour ouvrir la modale de déploiement.

  1. Choisissez un mode de déploiement : integrate (réutiliser le Docker existant) · rebuild · new
  2. Cliquez [Lancer le déploiement] → le pipeline en 9 étapes s'exécute (chacune devient verte en fin d'étape) :
    ① Création du pack → ② Préparation BD → ③ Préparation données → ④ Transfert serveur → ⑤ Build Docker → ⑥ Deploy Docker → ⑦ Connexion domaine → ⑧ Installation terminée → ⑨ Stabilisation du service
  3. Au final, l'URL du domaine est en ligne et immédiatement joignable.
ASTUCE Le premier déploiement prend 2–3 min ; les déploiements suivants en mode integrate tiennent en général en moins d'une minute. En cas d'échec, regardez les lignes rouges dans les logs sous la barre de progression.

Générateur de code (Code Builder)

Un assistant à onglets qui, autour d'une (ou plusieurs) tables de BDD, conçoit les écrans liste · détail · recherche · CRUD ainsi que le code PHP / Vue nécessaire, puis en un clic sur [Builder] produit un programme complet (Blade + Vue). Entrée : icône sur une ligne de programme. Plus de template à écrire à la main — le chemin schéma BDD → UI → interaction est automatisé de bout en bout.

Générateur de code (Code Builder)
Fonctionnalités clés
1
Connexion BD
2
Liste
3
Détail·Recherche
4
Hook·Code
5
Menu
1
Étape 1 · Connecter la BD et choisir tables / champs

Ouvrir le Code Builder via l'icône sur une ligne de programme. Huit onglets d'étape en haut (DB · List · Detail · Search · Hook · Style · Code · Menu) ; la plupart des programmes se terminent en les parcourant une fois de gauche à droite.

Le flux en un coup d'œil

  • [1] DB
    choisir tables
    choisir champs
    WHERE · ORDER
  • [2] List
    placer les champs
    groupes · tri
    cinq layouts
  • [3] Detail · Search
    façonner le formulaire
    choisir composants
    séparation insert / update
  • [4] Hook · Code
    injecter des hooks
    [Builder] émet le code
    réutiliser les snippets
  • [5] Menu
    arbre 4 niveaux
    [menu:code]
    include commun

Onglet DB en détail — si la connexion est coupée, vous voyez d'abord une bannière « DB non connectée » avec un guide de reconnexion. Dès qu'elle vit, le panneau s'ouvre ainsi :

  • #list (éditable) — une table principale. Choisissez-la dans la liste déroulante et pressez [Select]. C'est la table dont vous allez éditer / supprimer / insérer des lignes.
  • #list2 (lecture seule) — une table secondaire pour les jointures (ex. récupérer des libellés ou des noms).
  • #list3, #list4 … — cliquez sur le dans la barre latérale pour ajouter d'autres tables.
  • Trois sélecteurs de champs — depuis la même liste de colonnes, vous multi-sélectionnez séparément « champs pour List », « champs pour Detail » et « champs pour Search ». Une case à côté de chacun active / coupe tout d'un coup.
  • DB Search Option — trois lignes WHERE · ORDER BY · LIMIT, plus un Raw Query optionnel. Elles deviennent le filtre de requête par défaut de la liste.
  • En bas, [Update] enregistre l'étape ; [Reset] recommence.
ASTUCE Si un seul programme doit gérer plusieurs tables, ajoutez #list2, #list3 … selon besoin. Choisir des champs ici, c'est choisir la matière première — on tranche seulement « utilise-t-on cette colonne ? » ; les noms affichés, l'ordre et le formatage se peaufinent dans les onglets List / Detail / Search.
2
Étape 2 · Concevoir la page de liste (onglet List)

Les « champs pour List » choisis dans l'onglet DB apparaissent en candidats à gauche. Cet onglet définit à quoi ressemble l'écran de liste et comment chaque colonne se comporte.

Choisissez d'abord un des cinq layouts — les options ci-dessous s'ajustent automatiquement.

  • datatable — tableau avec tri et pagination intégrés.
  • table — tableau simple avec bascule de tri par colonne.
  • grid — grille de cartes.
  • modal — liste qui ouvre les lignes en modales sur place.
  • slots — intégrée dans les emplacements d'un layout frame.

Ajouter des items (colonnes de champ) — cliquer [+ Add Item] à gauche ouvre la liste des candidats. Choisir un champ existant ou utiliser + new pour ajouter un champ virtuel (pour des valeurs calculées ou composées).

  • Par ligne : header_value (libellé d'affichage) · header_text (description) · width · mutator (code personnalisé par champ) · sortable · linkable · use_opt (valeur d'option) · (bascule afficher/masquer).
  • ↑↓ pour réordonner, pour supprimer, la baguette pour du code assisté par IA.

Regroupement[Create Group] en haut à droite regroupe les champs sélectionnés en 1–5 groupes. Tapez pour assigner des items à un groupe.

  • En mode groupe, [Toggle Panel] bascule la vue sur un panneau d'édition de groupe. Vous y saisissez, par groupe, un group name (identifiant interne), un group header (titre affiché) et un layout (comment les colonnes à l'intérieur du groupe sont agencées). En haut du panneau, la group display method décide comment plusieurs groupes sont affichés — onglets, boîtes côte à côte ou une unique ligne input group.

[Update] en bas enregistre l'étape.

ASTUCE Le champ mutator héberge le snippet de post-traitement qui s'exécute sur une valeur de cellule avant rendu (formatage de date, séparateur de milliers, coloration d'insigne, etc.). S'il devient long, double-cliquer la ligne ouvre un layer editor avec plus de place.
3
Étape 3 · Popup détail / édition & Recherche (onglets Detail · Search)

L'onglet Detail définit le popup détail / édition (modal) qui s'ouvre quand vous cliquez une ligne de la liste. La mise en page ressemble fortement à l'onglet List ; le supplément clé est le choix d'un composant d'entrée par champ.

  • Liste déroulante Component — type d'entrée par champ : text · textarea · select · checkbox · radio · date · datetime · file · editor · hidden
  • opt_name / opt_value — options spécifiques au composant (liste d'options pour select, extensions autorisées pour file, format pour date …).
  • Icône triangle insert / update — bascule si le champ apparaît dans le formulaire Add, le formulaire Edit, ou les deux. P. ex. id / created_at sont généralement edit-only.
  • Bascule required (+/-) — champ obligatoire.
  • layout — placement / largeur de cellule (1/2, 1/3, pleine largeur …).
  • Dans la barre d'outils en haut, choisissez la colonne clé primaire (celle qui identifie une ligne de manière unique) et la clé de page de détail (celle qui passera dans l'URL à l'ouverture d'une page détail).

L'onglet Search partage le même éditeur. Différences :

  • Match mode — comment la valeur saisie est comparée à la BD : contains (correspondance partielle) · equals (exacte) · one-of (contre une liste séparée par virgules) · full-text (recherche de mot dans un texte long), etc.
  • Les composants reflètent l'UX de recherche — saisies libres, filtres à liste déroulante …

Les entrées de recherche sont auto-placées au-dessus de la liste ; leur soumission est combinée en AND avec le WHERE de l'onglet DB.

ASTUCE Les icônes mcode A/D/C/E dans l'en-tête sont des helpers pour component_opts : Extract · Decode · Concat · Encode. Quand les options se compliquent, extrayez-les en texte brut, modifiez, puis ré-encodez — beaucoup plus facile à gérer pour de longues chaînes d'options façon JSON.
4
Étape 4 · Hook · session conditions · [Builder] code generation

À ce stade, les étapes 1–3 ont rempli les « ingrédients » de l'écran. Il est temps d'ajouter comportement fin, permissions et logique personnalisée, puis de sortir le code.

Onglet Hook — affiche un petit diagramme du scaffold HTML et JavaScript généré, avec un ensemble de hook points (badges) où injecter du code.

  • Squelette HTML / JavaScript miniature en haut — les positions <?php ... ?>, <style>, <body>, modale, data / computed / mounted / methods sont marquées pour que vous voyiez exactement où votre hook atterrit.
  • Dépliez n'importe quelle ligne de hook avec pour révéler son éditeur. Double-clic pour le mode large.
  • Clic droit dans l'éditeur → Save Snippet / Load Snippet. Sauvegardez une logique récurrente (vérifications de connexion, gardes de permission, pré-traitement d'upload …) sous un ident et réutilisez-la dans n'importe quel autre programme.

Onglet Style — éditeur CSS / SCSS pour ce programme. Basculez css_integrate pour fusionner avec le bundle CSS global du projet ; basculez Backend Code pour attacher aussi un snippet PHP.

Onglet Code · la génération réelle — c'est ici que vous pressez [Builder].

  • Deux éditeurs CodeMirror — template Blade à gauche, Vue Script à droite. Ils aperçoivent le code assemblé à partir des étapes 1–3 et de vos hooks.
  • Session Condition, quatre cellules — Add / Delete / Read / Detail. Chacune prend un prédicat de session (p. ex. user_level>=3) qui garde cette opération CRUD.
  • Grille de fonctionnalités — activez des fonctionnalités réutilisables (export CSV / Excel, multi-suppression, persistance du tri …) et réglez les paramètres nécessaires.
  • Le bouton [Builder] en bas assemble tout en Blade + Vue Script et l'écrit directement dans le code réel du programme. Ensuite l'éditeur de code habituel prend la main — éditer, enregistrer, déployer comme d'habitude.
ASTUCE Boucle typique : « remplir les étapes 1–3 → appuyer sur [Builder] une fois → ajouter des snippets session / personnalisés dans Hook → appuyer [Builder] à nouveau pour régénérer ». Le contenu des hooks reste épinglé à ses positions nommées à travers les régénérations, donc vous pouvez itérer librement. Gardez les snippets propres et le prochain programme sera bien plus rapide.
5
Étape 5 · Menu wizard & [menu:code] shortcode

Une fois que vous avez plusieurs programmes, vous voudrez une navigation partagée. L'onglet Menu est un assistant qui construit un arbre de menu jusqu'à 4 niveaux de profondeur et le laisse déposer partout via un shortcode d'une ligne.

Menu group — un namespace qui contient une définition de menu à l'intérieur du projet.

  • Choisissez un groupe existant dans la liste déroulante, ou tapez un nouveau code de groupe (alphanumérique + underscore, 2–9 car.) et appuyez [Create Menu Group].

Éditeur d'arbre à 4 profondeurs — sélectionner un groupe révèle une table Depth 0 à gauche. Percer dans une ligne ouvre la profondeur suivante à sa droite ; jusqu'à quatre colonnes s'alignent au fur et à mesure (Depth 0 → Depth 3).

  Depth 0 ┐
          ├─ Depth 1 ┐
          │          ├─ Depth 2 ┐
          │          │          └─ Depth 3   ← max 4 niveaux
          └─ Depth 1'
           ...
  • Chaque table de profondeur a son propre [+ Add Menu] — le popup laisse remplir nom, alias d'URL et condition de session optionnelle.
  • Par ligne : éditer, supprimer, flèches pour réordonner.
  • Cliquer le bouton check au bout d'une ligne creuse dans les enfants de cet item dans la colonne de droite.

Injecter via un shortcode — une fois l'arbre en place, déposez-le sur vos pages réelles. Dans une zone include commune (un layout frame, un partial d'en-tête / sidebar), une seule ligne suffit :

<?php echo get_menus_by_code($project_id, 'group_code', 'nav nav-menu', 'role="navigation"'); ?>

Au rendu, le helper get_menus_by_code() lit la table project_menu et assemble des <ul>/<li> jusqu'à quatre niveaux. Les lignes de menu portant une session_condition ne s'affichent que si la session de l'utilisateur la satisfait. L'item dont l'URL correspond à la page courante reçoit automatiquement la classe active.

ASTUCE Pour placer un menu partagé sur chaque page, mettez get_menus_by_code($project_id, 'main') dans l'emplacement header / sidebar d'un layout frame. À partir de là, toutes les modifications de menu se font uniquement dans l'onglet Menu, et chaque page les reprend immédiatement. Les arguments custom_class et custom_attr laissent passer au renderer les noms de classes et attributs de votre thème de design, pour que le même menu s'adapte à dark/light, sidebar/topbar sans toucher au helper.

Layout Builder

Construisez des layouts en assemblant des blocs — sans code.

Layout Builder
Fonctionnalités clés
1
Liste de pages
2
Ouvrir le constructeur
3
Placer blocs
4
Liaison API
5
Déployer
1
Étape 1 · Écran de liste des pages

Allez à /layout/page.

  • Barre latérale gauche — bouton [+ Nouvelle page] + sections Récents / Partagés / Mes pages.
  • Barre d'outils supérieure — recherche (champ + mot-clé), onglets de bascule Block/Frame/Page, bascule Grille/Liste, lignes par page (20/50/100).
  • Corps — cartes de pages avec titre, description, frame et indicateur déployé-ou-non.
ASTUCE Un Block est un composant réutilisable, un Frame un modèle responsive à emplacements, une Page compose les deux. Basculez d'onglet pour gérer chaque type.
2
Étape 2 · Ouvrir la modale du constructeur de pages

Cliquer une carte de page ou l'icône de grille ouvre le builder plein écran. Il a trois zones.

  • Panneau gauche — haut : bande filmique Frame (choix du modèle responsive) ; milieu : canevas Frame (iframe + overlays de slots) ; bas : bande filmique Block (blocs glissables).
  • Panneau central — Data sampler (onglets Architecture / Data) pour le binding API.
  • Panneau droit — Déploiement + assistance IA.
ASTUCE Les modifications non sauvegardées affichent un badge rouge « Unsaved » en haut. Enregistrez toujours juste après une modification de Frame ou de Block.
3
Étape 3 · Glisser les blocs dans les emplacements du frame

Après avoir choisi un Frame, des slots de dépôt transparents apparaissent sur l'iframe. Commencez à glisser un bloc depuis la bande filmique Block — les slots s'illuminent en bleu — relâchez pour installer le bloc dans ce slot.

Les slots installés passent en « filled » ; re-cliquer sur le slot permet de changer. Le même bloc peut remplir plusieurs slots, et une même page mélange librement des blocs différents.

ASTUCE Si aucun bloc existant ne convient, allez d'abord dans l'onglet Block, créez-en un et revenez — les nouveaux blocs apparaissent automatiquement dans la bande filmique.
4
Étape 4 · Lier les données API (icône ⚡)

Dans l'onglet Architecture du panneau central, associez les clés de données d'exemple de chaque bloc aux vraies clés de réponse API.

  1. La colonne gauche de chaque carte de bloc montre l'arbre de clés d'exemple que le bloc attend.
  2. La bascule ⚡ (éclair) au centre active le mode binding API.
  3. À droite, choisissez un endpoint construit dans le service Base de données → l'arbre des clés de réponse de cette API se déplie.
  4. Cliquez pour apparier une clé d'exemple à une clé d'API — une ligne de mapping les relie et apparaît en bas dans « Pair Map » sous la forme sample_key → api_key.

L'onglet Data affiche la réponse JSON brute pour le débogage.

ASTUCE Si un endpoint n'est pas visible dans la liste, vérifiez qu'il est réellement déployé dans le service Base de données. Les APIs enregistrées mais non déployées n'apparaissent pas ici.
5
Étape 5 · Déployer — slug URL et paramètres exposés

Utilisez le panneau droit pour déployer.

  • Expose parameters — liste des paramètres query/path à exposer dans l'URL. Chaque ligne a une case d'activation, un nom, une source (query/path), une valeur par défaut. [Add] agrandit la liste.
  • Deploy URL — taper un slug tel que /my-page met à jour l'aperçu en direct.
  • [Deploy] — affiche une barre de progression + label d'étape ; terminé = en ligne sur le domaine.
  • En dessous, Deploy history accumule les URL passées que vous pouvez revisiter.
ASTUCE Exposer category en paramètre de chemin permet au même code de page de servir /product/beverage et /product/dessert avec des données différentes — sans duplication de code.

Diaporama

Service de canaux pour gérer présentations et contenus d'affichage.

Diaporama
Fonctionnalités clés
1
Liste diapos
2
Nouvelle diapo
3
Éditer diapos
4
Planification
5
Affichage & Déploiement
1
Étape 1 · Liste des diaporamas

Ouvrez Affichage > Diaporama depuis le menu. La barre latérale gauche a un bouton [+ Enregistrer diaporama] et un filtre « Diaporamas communautaires » ; le corps est une vue Grille/Liste.

Chaque carte montre titre, nombre de scènes, durée totale de lecture et état de déploiement.

ASTUCE L'usage principal de Slideshow, c'est diffuser le même contenu simultanément sur plusieurs écrans — signalétique magasin, moniteurs de salles de classe, écrans d'événement.
2
Étape 2 · Enregistrer un nouveau diaporama (assistant en 2 étapes)

Cliquez [+ Enregistrer diaporama].

  1. Étape 1 — Introduction : cartes + diagramme de flux (Remote → Upload → Diaporama → Navigateur), expliquant le mapping URI, les canaux, 67 transitions et le contrôle de timeline.
  2. Étape 2 — Enregistrer : saisissez titre + description → [Enregistrer] → vous atterrissez dans l'éditeur détaillé.
ASTUCE Les slides sont typiquement des pages construites dans Layout Builder. Préparez les pages à afficher avant de vous enregistrer.
3
Étape 3 · Chronologie et transitions

Le panneau Timeline central définit la lecture.

  • Durée totale — curseur, 10–3600 s.
  • Nombre de scènes — curseur de plage ; la durée par scène se calcule automatiquement.
  • Transitions — choisir parmi un catalogue de 67 (fade, slide, cube, page flip, etc.).
  • Confirmez avec le bouton [Enregistrer].
ASTUCE Plus de scènes = moins de temps par scène. Faites le calcul à l'avance : « 5 min total / 10 scènes = 30 s chacune ».
4
Étape 4 · Curseur paramétrique et canaux d'affichage

Curseur paramétrique (Page Sequencer) auto-génère N scènes à partir d'une seule page Layout en variant un paramètre.

  • Nom du paramètre (p. ex. month), algorithme (by_range / by_comma / by_json), valeurs (p. ex. 1-12 pas 1).
  • Résultat : 12 scènes auto-générées, une par mois.

Canaux d'affichage (MAX uniquement) — diffuser le même diaporama avec des compositions différentes sur différents écrans.

  • Nom de canal (p. ex. « Catégorie A », « Catégorie B ») + multi-sélection des diapos à inclure.
  • Activer « Utiliser un paramètre de requête » mappe les canaux aux URL via ?keyword=value.
ASTUCE Un canal = tous les écrans affichent la même chose. Multi-canal = menus/promos différents par borne à partir d'un seul diaporama.
5
Étape 5 · Déployer et partager

Le panneau de déploiement (se-deploy) à droite publie le show.

  1. Tapez un chemin URL (p. ex. /menu-signage) + choisissez un domaine dans le menu déroulant.
  2. Cliquez [Déployer le diaporama] — barre de progression, messages « Déploiement en cours... » et « Déploiement terminé ».
  3. Une carte d'historique de déploiement enregistre domaine / chemin / horodatage.

Pointez le navigateur de chaque écran sur l'URL en plein écran — terminé.

ASTUCE Chrome's "Kiosk" mode or a Raspberry Pi running Chromium in fullscreen makes autoplay reliable.

Collecte de données (Parser)

Crawl automatique de sites web avec stockage en base.

Collecte de données (Parser)
Fonctionnalités clés
1
Liste de règles
2
Assistant
3
Configurer extraction
4
Test d'éléments
5
Exécution parse
6
Planification
1
Étape 1 · Parser rules list

Ouvrez Data > Parser depuis le menu. Barre latérale gauche avec [+ Nouvelle règle de parseur] plus des sections Récentes / Publiques / Mes règles ; le corps est une vue Grille/Liste.

Chaque carte a les icônes (Run) · (Item test) · (Planification — MAX) · (Éditer) · (Dupliquer) · (Supprimer).

ASTUCE Pour un site similaire, forker une règle depuis « Publiques » est le plus rapide — les sélecteurs sont déjà calibrés.
2
Étape 2 · Assistant de création de règle (3 étapes)

[+ Nouvelle règle de parseur] ouvre un assistant en 3 étapes. L'assistant enregistre seulement les infos de base de la règle (nom, description, dataset cible) — l'URL de crawl, les sélecteurs et le mapping de champs sont remplis ensuite sur l'écran de paramétrage du parseur qui s'ouvre automatiquement à la fin de l'assistant.

  1. Étape 1 — Vue d'ensemble : introduction « Qu'est-ce qu'une règle de parseur ? » suivie de quatre cartes de fonctionnalités côte à côte (Extraction de données, Crawling web avancé, Mapping de champs, Réutilisation) et un schéma « Parser Pipeline » montrant d'un coup d'œil les quatre flux supportés (Règle parseur → BD / → Macro → BD / → Scheduler → BD / → Endpoint API → lancement de service). Pressez [Suivant].
  2. Étape 2 — Connexion base : cliquez une carte de dataset (avec badge db_type, nom de table, domaine) pour choisir où atterriront les lignes extraites. S'il n'y a pas de dataset, seul un lien « Go to Dataset » s'affiche. Presser [Suivant] lance automatiquement un déploiement en 3 étapes (« Agent connect → Parser engine deploy → Deploy complete ») qui provisionne le moteur du parseur sur l'agent docker choisi.
  3. Étape 3 — Créer la règle : entrez le nom de la règle et une description optionnelle, puis pressez [Create Rule]. Les infos de base (nom, description, dataset, flag de partage) sont enregistrées, l'assistant se ferme, et l'écran de paramétrage de la règle nouvellement créée s'ouvre automatiquement.

C'est là que l'assistant prend fin. Sur l'écran de paramétrage du parseur, vous remplissez alors l'URL cible, les options HTTP, le Loop Splitter, les sélecteurs XPath/JSON et le mapping de champs (voir ▶︎ Étape 3 · URL cible & sélecteurs d'extraction), vérifiez sur l'onglet « Test » et sauvegardez — alors seulement le parseur est prêt à vraiment tourner.

Une barre d'étapes en haut suit la progression ; [Retour] revient à l'étape précédente (désactivé pendant le déploiement). La modale de l'assistant ne se ferme que via le bouton [x] en haut à droite.

ASTUCE Pas encore de dataset ? Fermez l'assistant, passez au service Base de données, créez-en un (même une table vide fera l'affaire) — le parseur crée les colonnes automatiquement.
3
Étape 3 · URL cible & sélecteurs d'extraction

(Description de l'écran d'édition de règle du parseur : URL cible, Loop Splitter, sélecteurs XPath/JSON, fonctions de post-traitement et auto-enregistrement de la règle via AI Prompt. Le détail ci-dessous n'est pas encore entièrement traduit en français.)

Enter the Target URL at the top of the editor and combine three techniques to extract rows.

  • Loop Splitter (3 inputs — primary + 2 secondary) — string patterns that chop HTML into repeated units.
  • XPath selectors — up to 3 levels, extracting fields inside each unit. The selector should point at a node set (array), not a leaf value — if the actual data sits at //h3/a/text(), enter just //h3/a so the result comes out as an array.
  • JSON selectors — for JSON APIs, dot/bracket paths. Same idea: point at the array path. If the data has a shape like data.items[0].title, enter data.items as the selector so the item array is produced.
  • Post-processing functions — chain trim(@p), replace(...), regex(...), strtoupper(@p), slice(), remove() per column.

The fastest path is to feed a slice of the source (via the Loop Splitter) into the AI Prompt and let the AI response auto-register the rule. Hand-tuning selectors one by one is much slower — especially when the page structure is non-trivial.


Auto-register with an AI prompt (recommended)

Instead of hand-filling selectors, hand the sample to an AI and apply the completed rule it returns.

  1. Prerequisite — enter the Target URL and run the extract test once from the "Test" tab so a response body exists. That body is injected into the prompt automatically.
  2. Click the highlighted "AI Prompt" button (wand icon) at the top of the test result panel. A prompt is auto-built in the editor area just below it, picking the right language for the document out of 8 supported (Korean · English · Japanese · Chinese · Russian · German · French · Spanish) and the right document type (HTML / JSON / XML).
  3. Click inside the editor panel → Ctrl+ACtrl+C to copy everything.
  4. Paste into an AI such as ChatGPT / Claude / Gemini and run → the AI returns a rule JSON.
  5. Copy the response, then click the "Import Pattern" button (import icon) in the same panel — a paste-in textarea opens. Paste and click [Apply Pattern].
  6. Loop splitter, selectors, unique key, and every column are mapped into the right slots of the rule automatically; the editor switches to the "fields" tab so you can check the result immediately. A summary toast like "Pattern applied: N fields" appears at the bottom.

If the AI response isn't valid, you'll see an "Invalid JSON" toast and your existing values stay untouched — safe to retry.

ASTUCE Les SPAs à JS lourd renvoient un HTML vide sur une requête simple. Dans les DevTools, onglet Network, trouvez l'API JSON interne que le site appelle lui-même, et visez directement cette URL — bien plus stable.
4
Étape 4 · Item test

L'icône (fiole) sur une carte ou l'onglet « Test » dans l'éditeur ouvre la modale de test.

  • Barre du haut : « N items / M colonnes »
  • Export : CSV · XLSX · JSON · HTML
  • Grille : Row# + en-têtes de colonnes auto-détectés
  • Hover sur une cellule → bouton « Copy »

Ajustez les sélecteurs, testez, ajustez encore, testez — boucle jusqu'à ce que la sortie colle.

ASTUCE « Seulement 1 ligne extraite » signifie que votre Loop Splitter est trop large ; « les lignes ont l'air bonnes mais les cellules sont vides » signifie que les sélecteurs XPath/JSON sont mauvais. Diagnostiquez d'abord lequel avant de modifier.
5
Étape 5 · Parse Run (Run modal)

(Usage de la modale « Run » ouverte via l'icône ▶ (lecture) d'une carte de règle — interface en trois panneaux (liste d'URLs / Plan & Execute / retour de résultat), étapes URI · Fuzzer · Preview · Run mode · feedback live et effets attendus. Le détail ci-dessous n'est pas encore entièrement traduit.)

Clicking the (Play) icon on a rule card opens the Run modal — the single screen where you decide where to hit, with what parameter combinations, how to run, and where to store results, then launch and monitor in place.

  • [1] URI
    Target address
    {param} tokens
    path · query
  • [2] Fuzzer
    Parameter mix
    1-N · A,B · DB
    combine / pair
  • [3] Preview
    Expand URLs
    Fill left panel
    Verify count
  • [4] Run · Save
    Runtime / Schedule
    DB / CSV / JSON
    Items per run
  • [5] Start
    Flow checks
    [Start] enables
    Pause anytime
  • [6] Feedback
    Progress · stats
    Per-URL log
    Macro chain

Interface at a glance — 3-panel layout

  • Left panel · URL list — shows the preview URLs generated from the center panel, numbered. While a run is in progress the current row is highlighted and finished rows show a check, so you can see progress at a glance. Each row has a button to test-parse that single URL in isolation, and a at the top-right loads past run configurations for reuse.
  • Center panel · Plan & Execute — the main body: define URI, fuzzer parameters, run/save mode, then launch from the flow diagram's [Start] button.
  • Right panel · Result feedback — two tabs. "Results" shows live statistics and log during a run; "Parse Test" shows the cell-level preview when you click on the left.

Step-by-step

  1. URI input — first card in the center panel. Two example styles — path-token (/category/{param}/list) and query-string (?param={param}) — are pinned to the header as clickable hint badges. Names inside the curly braces {...} must match the parameter names defined in the next card so substitution works.
  2. Fuzzer parameters — the card that builds the list of values injected into each {...}. A top toggle picks one of two modes:
    • Combination — cartesian product of every parameter's values. E.g. {page}=1..10 × {cat}=A,B → 20 URLs.
    • Paired — zip-style: the n-th value of every parameter together. All lists must have the same length.
    For each parameter pick a name and a generator1-N (range with step), A,B (comma list), DB (pull from a dataset column with optional WHERE/ORDER/LIMIT), [,] (JSON array), or \n (newline list). adds another parameter.
  3. URL preview — the [URL preview] button at the bottom of the card expands the URI + parameter combinations into real URLs listed in the left panel. The count shows in the header badge, so you can immediately verify the expected size (e.g. range 10 × categories 2 = 20).
  4. Run mode & Save mode — the third card.
    • Run: Runtime (one-off) / Schedule (periodic, MAX plan). Schedule reveals start-time and interval (minutes) inputs inline.
    • Items per run: Page / PK.
    • Save: DB (dataset, or a custom external DB via host/user/password/database), CSV, JSON, or SQL. DB mode also surfaces table (collection) name and a DBMS badge so you can confirm the destination visually.
  5. Visual flow guide & Start — below the cards, a small flow diagram chains URI → Parameter → Preview → Save → [Start] → Macro. Each node lights up with a green check as its input is filled. Once required nodes are valid the [Start] button at the top-right activates. (If you pin a macro on the trailing node, it runs automatically right after the scrape.)
  6. Live feedback while running — the moment you press Start, the top progress bar fills up (parsed / total) and the right-panel "Results" tab updates in real time.
    • Stat cards: Total · Passed · Failed · Remaining — the red "Failed" card only appears when a failure actually happens.
    • Log view: one line per URL as it's processed, latest highlighted, each showing time · URL · +rows added; failed URLs carry an badge.
    • Pause / Resume: the Start button switches to [Pause] during a run — stop at any time safely.
    • File-save modes (CSV/JSON/SQL): the Output textarea below fills with the generated file body; a button grabs it immediately.

What this run screen buys you

  • Plan, run and observe in one screen — no tab hopping. Tweak the URI, parameter list, or save target and immediately re-run. The configure → run → verify loop is as tight as it gets.
  • A fuzzer that scales — generate tens of thousands of URLs without writing one by hand. Ranges, comma lists, DB columns, JSON arrays, newline lists — category × page × date combinations are ready in seconds.
  • DB-backed parameters (by_db_field) read a key table column and iterate detail pages on top of it — the classic "list → detail" two-stage crawl works end-to-end without spreadsheets or glue scripts.
  • Transparent live feedback — per-URL checkmarks, streaming log, and success/fail counters make it easy to spot exactly where things stalled. Rerun a failed row on its own via to isolate the cause.
  • Resource-friendly architecture — the actual HTTP and parsing runs on your docker agent, not the QuickStart server. Large crawls don't affect the service's bandwidth.
  • Macro chaining — attach a macro to run right after the scrape for notifications, aggregation, or post-processing, turning collect → clean → notify into a single action.
ASTUCE Commencez petit. Sur la carte Fuzzer, essayez d'abord une toute petite plage (p. ex. by_range 1-5), pressez « URL preview », confirmez le nombre attendu, puis montez en charge. Ça évite de tirer accidentellement des milliers de requêtes à cause d'une mauvaise config.
6
Étape 6 · Scheduled runs (MAX)

(Structure de la carte de planification (MAX uniquement), diagramme de flux en 5 étapes, vérification des résultats dans l'éditeur de base de données, astuce de chaînage avec un macro, etc. Le détail ci-dessous n'est pas encore entièrement traduit.)

Scheduled runs are a hands-off mode: the docker agent executes the rule on a fixed interval on its own, even while the screen is closed. Rows flow straight into the dataset (DB), so to actually see the results you open the target table in the Database editor.

  • [1] Schedule setup
    Start time
    Interval (min)
    Active toggle
  • [2] Agent sync
    [Save] pushes
    config to the
    docker agent
  • [3] Auto periodic run
    Agent runs alone
    QuickStart idle
    Background task
  • [4] DB accumulation
    Rows INSERT into
    dataset table
    Dup keys skipped
  • [5] Check in Database editor
    Data > Database
    Open the table
    Query with WHERE/ORDER

The (clock) icon on a card opens the schedule modal (FREE/PRO plans show a "Max" ribbon).

  • Start time (hour 0–23, minute 0–59)
  • Interval (minutes)
  • Active toggle
  • Run mode: Single URL / URL list (batch)

[Save] persists to QuickStart and auto-syncs to the selected docker agent. The agent is what actually runs the schedule — QuickStart never sits in the traffic path.


Verify results in the "Database editor"

Because scheduled runs are headless, the way to check the output is to open the target dataset directly and inspect the rows that piled up.

  1. Open Data > Database from the left menu.
  2. Click the dataset card that the parser rule is linked to — this opens the Database editor.
  3. Pick the target table from the left table list (e.g. items, products, etc.).
  4. Use WHERE / ORDER BY at the top to bring recent rows to the top (ORDER BY created_at DESC, ORDER BY id DESC) and inspect what the last scheduled run added.
  5. A quick row count (COUNT) or a date-range filter is enough to sanity-check trend — if the count grows each interval, the schedule is healthy.

The run log itself is shown as a table in the Run modal's right-panel "Results" tab when schedule mode is active, but for content verification of the actual harvested data, the Database editor is always the source of truth.

ASTUCE Dans le diagramme de flux de l'éditeur, choisissez un macro dans la liste « Select macro ». Il se déclenche juste après chaque scrape — parfait pour alertes, agrégation et post-traitement similaire. Chaînez une fois un macro vers une requête Database-editor et chaque exécution planifiée répétera automatiquement « collecter → raffiner → inspecter ».

Macro d'automatisation

Écrivez et exécutez des scripts serveur pour automatiser les tâches répétitives.

Macro d'automatisation
Fonctionnalités clés
1
Liste macros
2
Assistant
3
Écrire le code
4
Test rapide
5
Exécution planifiée
1
Étape 1 · Macro list

Ouvrez Data > Macro depuis le menu. Barre latérale gauche avec les sections Récents / Communauté / Mes macros ; le corps est une vue Grille/Liste. La barre d'outils supérieure prend en charge la recherche par nom ou description.

Cliquez sur [+ Nouveau macro] dans la barre latérale pour ouvrir immédiatement l'assistant de création.

ASTUCE Un macro automatise le travail répétitif (ETL, API par lots, migrations, imports CSV). C'est du PHP/Node.js/Python côté serveur, sans UI visible par défaut.
2
Étape 2 · Créer un nouveau macro (assistant en 4 étapes)

[+ Nouveau macro] ouvre un assistant en 4 étapes. Cet unique assistant couvre à la fois l'enregistrement des infos de base du macro et la préparation de son serveur d'exécution.

  1. Étape 1 — Intro macro : un « Qu'est-ce qu'un macro ? » d'introduction avec quatre cartes (Chaînage de pipelines, Pattern adaptateur, Entrée → Sortie, Génération de code) et un diagramme de flux montrant quatre topologies supportées (Requête BD · Chaînage · Parseur · Planificateur). Aucune saisie — pressez [Suivant].
  2. Étape 2 — Mode de connexion : préparer l'endroit où le macro tournera vraiment. Deux options :
    • Déployer un nouveau serveur de macro — connectez votre compte Railway (collez le token), puis choisissez langue · framework · stack principale · add-ons optionnels (MongoDB / FFmpeg / Puppeteer / WebSocket, etc.) · identifiants BD. Cliquer [Déployer le serveur] lance un pipeline en 6 étapes (Receive → Decrypt → Docker build → Deploying → Network → Verify) et votre compte se retrouve avec un runtime de macro dédié.
    • Connecter un serveur de macro existant — si vous avez déjà un serveur qui fait tourner votre code macro, entrez ses infos de connexion pour vous y rattacher.
    Une fois le serveur prêt, l'assistant passe automatiquement à la suite.
  3. Étape 3 — Sélection du type : choisissez l'un des 24 types de macros (pipeline ETL · API batch · migration de données · import CSV/Excel · et plus). Le code de départ correspondant au type — avec paramètres d'entrée, squelette de boucle et structure de sortie — est auto-généré comme point de départ pour l'étape suivante.
  4. Étape 4 — Enregistrer : entrez un nom de macro (p. ex. « Sync BD de nuit », « Traduction en masse ») et une courte description, puis pressez [Créer]. Le macro est enregistré, l'assistant se ferme, et la vue détaillée (éditeur de code) s'ouvre automatiquement.

Une barre d'étapes en haut suit la progression ; [Retour] renvoie à une étape précédente (désactivé pendant un déploiement). La modale ne se ferme que via le bouton [x] en haut à droite.

ASTUCE Un serveur de macro est partagé par de nombreux macros — vous déployez « votre serveur de macro » une fois et y faites tourner plusieurs macros. Pour tout macro après le premier, choisissez Connecter un serveur de macro existant à l'étape 2 de l'assistant pour vous rattacher au même serveur.
3
Étape 3 · Write code (PHP · Node.js · Python)

À la fermeture de l'assistant, un éditeur à 3 volets s'ouvre : à gauche, la définition des champs d'entrée ; au centre, l'éditeur de code avec onglets PHP / Node.js / Python ; à droite, le volet AI Prompt. L'éditeur est prérempli d'un scaffold pour le type de macro choisi à l'étape 3, donc vous ne modifiez généralement que l'essentiel.

Note : la localisation complète de cette longue section (grille de 6 cartes, tableau run_data, exemple de code, section AI Prompt) sera réalisée lors d'une prochaine passe. Messages clés : run_data.input_data arrive d'abord comme un tableau { item_name, item_value, item_type } qu'il faut retourner en objet clé/valeur ; run_data.conn_string/table_name/file_name sont pré-remplis ; les champs de retour data / json / download_links / message correspondent au type de sortie choisi dans l'assistant ; le volet AI Prompt à droite construit à partir d'un badge de scénario + votre textarea un prompt à copier dans ChatGPT/Claude/Gemini et dont vous collez le code retour dans l'éditeur central.

ASTUCE Le snippet « tableau d'entrée → objet » au début de votre fonction est la norme partagée par tous les macros d'exemple. Copiez ce bloc une fois et le même code marche pour Quick Test et les exécutions planifiées. Pendant le debug, une seule ligne console.log(params) / print($input_data) affiche les valeurs réellement reçues — elles tombent directement dans le terminal du bas.
4
Étape 4 · Quick Test

Basculez sur l'onglet Quick Test (icône fiole 🧪) en haut du volet gauche. Quick Test fait tourner le code à travers le serveur de macro préparé à l'étape 2.

  1. Remplissez les paramètres d'entrée ligne par ligne.
  2. Cliquez [Exécuter] → spinner « Running… ».
  3. L'affichage du résultat dépend de la forme de retour :
    • data → tableau
    • json → visualiseur JSON
    • download_links → liste de boutons de téléchargement
    • message/error → bloc texte <pre>

Stdout et stderr streamant en temps réel dans le volet terminal du bas — parfait pour le debug.

ASTUCE Quand le code ne se comporte pas comme prévu, regardez d'abord la sortie terminal — les coupables habituels sont les dépendances manquantes, les fautes dans les identifiants BD ou l'oubli de success dans l'objet de retour.
5
Étape 5 · Scheduled auto-run

Une fois que Quick Test passe bien, confiez le macro à une planification pour exécution sans surveillance. Dans la section Schedule de la vue détaillée, deux valeurs suffisent.

  • Heure de début (offset) — format HH:MM (p. ex. 00:00 = minuit, 03:30 = 3 h 30). C'est l'ancre du planning récurrent.
  • Intervalle N (minutes) — le macro tourne toutes les N minutes à partir de l'heure de début. Entrez 5 pour toutes les 5 min, 60 pour toutes les heures, 1440 pour une fois par jour.
  • Interrupteur Active — pause ou reprise sans perdre la config.

Exemples : heure de début 00:00 + intervalle 5 → toutes les 5 minutes dès minuit (00:00, 00:05, 00:10…). Heure de début 09:00 + intervalle 1440 → une fois par jour à 9 h.

Une fois enregistré, le serveur de macro fait tourner ce macro à cette cadence tout seul. QuickStart ne fait que signaler — l'exécution réelle et le trafic vivent sur le serveur de macro. (Pas d'expressions cron — le planificateur n'utilise que heure de début + intervalle.)

ASTUCE Ne planifiez qu'après que le serveur est prêt et Quick Test passé au moins une fois. La première exécution sans surveillance peut ne pas laisser de sortie terminal — ne pointez un planning que sur du code déjà vérifié.

Base de données

Créez et gérez des bases avec génération automatique d'API REST.

Base de données
Fonctionnalités clés
1
Liste des jeux
2
Créer jeu
3
Éditer tables
4
Saisir données
5
Partage & API
1
Étape 1 · Écran du service Base de données

Ouvrez Data > Base de données depuis le menu. La barre latérale gauche a un bouton bleu [+ Nouveau dataset] et des sections Récents / Publics / Mes / Équipe ; le corps est une vue en cartes Grille/Liste.

Les quatre icônes de chaque carte : (éditeur DB) · table (éditeur de cellules) · (réglages API) · copier/supprimer.

ASTUCE Un dataset, ce n'est qu'« une connexion BD + éventuellement une vue WHERE/ORDER ». Pensez-y comme « la tranche de table que vous voulez exposer », pas la BD entière.
2
Étape 2 · Assistant en 3 étapes (connecter → choisir → enregistrer)

[+ Nouveau dataset] → modale d'assistant.

  1. Étape 1 — trois options de connexion : Déployer une nouvelle BD (Railway) · Connecter une BD existante · Fichier local (JSON/CSV/Excel). Liste déroulante Type de BD (MySQL 3306 · MariaDB 3306 · PostgreSQL 5432 · MongoDB 27017) · hôte · port · BD · utilisateur · mot de passe → [Tester la connexion] vérifie que les identifiants atteignent la base.
  2. Étape 2 — en cas de succès, choisissez une table ; ses champs se déploient.
  3. Étape 3 — enregistrer le dataset : nom · description · table · PK · colonnes (* ou séparées par virgule) · WHERE · LIMIT · ORDER BY · shared. Le panneau de droite [Tester la requête] prévisualise le résultat ; puis [Enregistrer].
ASTUCE Appliquer WHERE ici est la plus forte sécurité possible. « Uniquement les produits en stock » posé au niveau du dataset se propage automatiquement à toutes les APIs en aval.
3
Étape 3 · Database Editor

Cliquez l'icône ▶ (lecture) d'une carte de dataset pour ouvrir l'éditeur plein écran, qui comporte trois panneaux.

  • Gauche — onglets (Tables/Views/Procedures/Functions), inspecteur de structure de table, icônes de commandes (Copier CREATE · Drop · Update · Insert · Delete · Join · Reverse · Refresh).
  • Centre — éditeur SQL multi-onglets. ▶ Run ou F5/F9. Export en TSV/CSV/JSON/SQL, ou envoi direct à un macro via « Send to Macro ».
  • Droite — grille de résultat avec édition cellule par cellule.
ASTUCE SQL en langage naturel : le bouton Ask (icône bulle de parole) en haut de l'éditeur accepte une question du style « total des ventes ce mois-ci par table » — un prompt IA combinant le schéma de la table sélectionnée et votre question est copié dans le presse-papiers. Collez-le dans ChatGPT / Claude / Gemini et vous obtenez un SQL prêt à exécuter.
4
Étape 4 · Autogénérer une API REST

Cliquez le bouton Réglages API (icône prise) sur une carte, la modale des réglages API s'ouvre.

  1. Bases : Namespace (obligatoire, queue d'URL) · Table · Table JOIN · Var de page (par défaut page) · Par page (50) · cache (0–1440 min).
  2. [Auto-générer] → assemble la forme JSON (main_container → main_fields → item_container → item_fields → detail). Chaque champ est un couple « clé JSON → variable SQL ».
  3. [Enregistrer][Déployer] active l'endpoint.
ASTUCE « Auto-layout » génère un bloc Layout Builder qui consomme cette API immédiatement — page instantanée sans écrire de front-end.
5
Étape 5 · Sécurité ACL et appels externes

Les endpoints sont en ligne à GET https://happycat.apidealder.net/endpoint/{namespace}. La section ACL de la modale les verrouille.

  • Clé API (bouton auto-générer · transport header/param · nom d'en-tête X-API-KEY)
  • Liste blanche IP — wildcards / CIDR
  • Restriction Referer — domaines autorisés
  • Limite de débit — max req/min

Exemple : curl -H "X-API-KEY: ..." https://happycat.apidealder.net/endpoint/menu_list

ASTUCE Une clé placée dans le JS du navigateur est visible depuis la source de la page. Sur les pages publiques, cadrez l'usage avec Referer + limite de débit ; pour garder la clé privée, appelez-la depuis le côté PHP de votre Project afin que la clé ne quitte pas le serveur.

Gestion à distance

Ouvrez et modifiez les fichiers de votre serveur déployé directement depuis le navigateur — sans client FTP ni SSH. Navigation dans les dossiers, édition de code, uploads et terminal tiennent sur la même page.

Gestion à distance
Fonctionnalités clés
1
Disposition écran
2
Connexion serveur
3
Parcourir dossiers
4
Éditer fichiers
5
Tâches & terminal
1
Étape 1 · Repérage de l'écran

Remote Management se divise en quatre zones. Sachez où regarder avant de cliquer.

  • Liste de serveurs à gauche — tous les domaines que vous gérez, avec un petit point d'état. Vous pouvez replier ce panneau sur les seules icônes pour gagner de la place.
  • Zone de fichiers centrale — l'explorateur de fichiers du serveur sélectionné. La barre d'outils en haut contient la barre de chemin, les boutons de tri et le bouton du terminal ; en dessous, le contenu des dossiers se déploie en colonnes au fur et à mesure que vous descendez.
  • Barre d'actions en bas — Envoyer · Nouveau dossier · Nouveau fichier · Télécharger · Supprimer. Les boutons ne s'allument qu'après avoir choisi un fichier ou un dossier.
  • Panneau terminal — console qui monte depuis le bas à la demande. Cliquez l'icône terminal de la barre d'outils pour l'afficher/masquer.
ASTUCE Si la liste de serveurs à gauche paraît à l'étroit, cliquez le bouton de pliage en haut pour la réduire aux icônes. Pratique sur écrans d'ordinateur portable étroits.
2
Étape 2 · Choisir le serveur à gérer

Cliquez un domaine dans la liste de gauche. Le point près du nom indique son état :

  • Point vert — en ligne. La liste de fichiers s'ouvre immédiatement.
  • Point gris — hors ligne. Le conteneur dort peut-être, ou le réseau est bloqué.
  • Point blanc — vérification en cours, ou état inconnu.

Si la liste est vide, vous verrez un message « Déployez d'abord un serveur » avec des boutons raccourcis vers les écrans de déploiement Single File, projet et base de données.

ASTUCE Si un point reste gris ou blanc longtemps, patientez 1–2 minutes et recliquez le domaine. Un conteneur inactif peut mettre quelques secondes à se réveiller.
3
Étape 3 · Trouver le dossier, choisir les fichiers

La zone centrale est un navigateur en colonnes — chaque dossier cliqué s'ouvre en nouvelle colonne à droite. Jusqu'à quatre colonnes visibles à la fois ; les chemins plus profonds replient automatiquement la colonne la plus à gauche.

  • Barre de chemin — l'icône maison revient à la racine (/), et chaque segment séparé par un slash au-dessus est cliquable pour sauter exactement là.
  • Saisie de chemin — tapez un chemin complet comme /var/www/html/storage/logs et Entrée pour y aller directement sans cliquer.
  • Boutons de tri — nom · taille · date de modification. Rappuyez sur le même bouton pour inverser l'ordre.
  • Sélection — un clic sélectionne un élément, Shift+clic sélectionne une plage, Ctrl/+clic ajoute ou retire un à un. Dès que plusieurs éléments sont sélectionnés, un badge « N sélectionnés » apparaît en haut à droite de la barre d'actions.
ASTUCE Si vous connaissez déjà le chemin, le coller dans la saisie de chemin est de loin le plus rapide — une Entrée remplace une demi-douzaine de clics.
4
Étape 4 · Ouvrir un fichier pour le voir ou le modifier

Cliquez une fois un fichier pour le sélectionner. Cliquez une seconde fois et il s'ouvre — la vue adaptée apparaît automatiquement à droite selon le type.

  • Fichiers texte/code → un éditeur avec coloration syntaxique s'ouvre au centre. HTML, PHP, Vue, CSS/SCSS, JavaScript/TypeScript, JSON et d'autres sont détectés automatiquement.
  • Images (PNG · JPG · GIF · SVG · WebP · BMP · ICO) → s'ouvrent dans une visionneuse pour vérification visuelle.
  • Fichiers binaires / exécutables déclenchent un message « Impossible d'éditer un fichier binaire » et ne s'ouvrent pas.
  • Le bouton [Enregistrer] en haut à droite de l'éditeur pousse immédiatement la modification au serveur — pas besoin de redéployer. Esc ou [Annuler] ferme sans sauvegarder.
  • L'éditeur n'ouvre que les fichiers jusqu'à 10 Mo ; au-delà, un message « trop volumineux » s'affiche.
ASTUCE Pour de petites corrections en prod telles que .env, des ajustements de config ou la consultation de logs, éditer directement ici est le plus rapide. Les sauvegardes passent en live au moment où vous appuyez sur Enregistrer — aucun redéploiement complet requis.
5
Étape 5 · Upload, download, suppression et shell

Combinez la barre d'actions du bas et le panneau terminal pour vraiment travailler.

  • Envoyer une archive — glissez ou cliquez pour choisir un .zip · .tar · .tar.gz · .tgz. Un aperçu du contenu de l'archive apparaît ; après Start Upload, le fichier part par blocs de 1 Mo avec une barre de progression, et le dossier courant se rafraîchit automatiquement en fin d'envoi.
  • Envoyer des fichiers — choisissez un ou plusieurs fichiers en une fois, ils sont envoyés tels quels dans le dossier courant (pas de décompression).
  • Nouveau dossier / Nouveau fichier — demande un nom. Lettres, chiffres, point, tiret et underscore uniquement.
  • Télécharger — les fichiers sont téléchargés tels quels ; choisissez un dossier et il est automatiquement zippé en un seul ZIP.
  • Supprimer — confirme une fois ; si plusieurs éléments sont sélectionnés, tout passe en une opération.
  • Déplacer / copier — glissez un fichier sur un dossier : un dialogue de confirmation s'ouvre. Ou Ctrl+X/Ctrl+C met la sélection de côté, puis Ctrl+V dans un autre dossier colle via le même dialogue de confirmation.
  • Terminal — l'icône terminal dans la barre d'outils fait monter le panneau du bas et vous connecte à la shell du serveur sélectionné. Tapez une commande et Entrée — stdout apparaît en blanc, stderr en rouge. / rappelle les commandes précédentes, et le répertoire courant est suivi pour vous : après cd some/path, la commande suivante s'exécute depuis là.
ASTUCE Les conteneurs reposent sur Alpine Linux léger, donc le shell par défaut est /bin/sh — pas bash. Installez de nouveaux paquets avec apk add nom-du-paquet.

Guide des prompts IA

QuickStart n'embarque pas d'IA à interroger directement. À la place, les boutons Prompt IA disséminés dans le produit capturent le contexte sous vos yeux (schéma de table, échantillon HTML, structure de layout…) dans un prompt structuré et le copient dans le presse-papiers. Collez-le dans une IA externe (ChatGPT, Claude, Gemini) ; la réponse est ensuite réappliquée dans l'UI via le bouton Import adjacent. Le prompt est déjà charpenté pour la tâche — pas besoin de réfléchir à « quoi décrire ».

Extension VSCode

Une extension VS Code pour travailler confortablement sur votre projet QuickStart en local dans l'éditeur de votre choix. Téléchargez le projet en paquet depuis la console web, ouvrez le dossier dans VS Code, et tout ce qui suit (authentification automatique → préparation automatique Laravel / frontend → édition → déploiement vers d'autres serveurs → synchronisation bidirectionnelle web ↔ éditeur) se passe dans un seul panneau QUICKSTART en bas. Parcourez les étapes ci-dessous une fois — ensuite tout se fait par clic.

Traduction en 40 langues

Un outil qui traduit d'un coup toutes les phrases d'écran d'un projet (mots et libellés de menu) vers plusieurs langues. Il scanne les pages du projet pour trouver les termes à traduire, assemble le prompt pour l'IA à votre place, réinjecte automatiquement la réponse de l'IA dans la grille, persiste le résultat dans le stockage de traductions du projet (table project_translate) et exporte finalement un lang_files.json prêt pour Laravel. Objectif : passer à 40 langues en un seul cycle — conçu pour qu'un débutant puisse suivre les étapes ci-dessous sans difficulté.

Market de solutions

Parcourez et forkez projets, macros et fichiers uniques créés par d'autres pour démarrer les vôtres.

Fork & Partage

Partagez vos projets et forkez ceux des autres pour prendre une longueur d'avance.

Gestion des domaines

Gérez les domaines gratuits fournis par QuickStart.

Construire votre premier site

Tutoriel complet de construction d'un site portfolio du début à la fin.

Temps estimé : 15–25 min
1
Ouvrir l'éditeur
2
Choisir un modèle
3
Modifier
4
Aperçu
5
Connecter l'hébergement
6
Déployer
7
En ligne !
1
Étape 1 · Ouvrir l'éditeur Single File

Après connexion, ouvrez depuis la navigation supérieure ou le tableau de bord Services → Single File. L'écran se divise en une barre d'outils supérieure et le corps :

  • Barre d'outils supérieure — à gauche : Historique · Guide · Saisie du titre · Enregistrer (💾). Au centre : liste déroulante de modèles. À droite : Partager · Exécuter ▶ · Déployer 📦.
  • Éditeur au centre — quatre onglets en haut : prompt · html · scss · vuejs. Cliquez pour basculer.
  • Panneau d'aperçu à droite — rend quand vous cliquez sur Exécuter.
ASTUCE L'éditeur peut s'ouvrir vide à la première visite. Pas d'inquiétude — l'étape suivante choisit un modèle dans la liste déroulante.
2
Étape 2 · Choisir le modèle Restaurant Booking System

Ouvrez la liste déroulante de modèles au centre de la barre d'outils et choisissez « Restaurant Booking System ». Le déroulement :

  1. Dès que la valeur de la liste change, le modèle sélectionné est appliqué automatiquement.
  2. Les quatre onglets (prompt · html · scss · vuejs) se remplissent automatiquement du code pré-construit et du prompt AI utilisé pour le régénérer.
  3. L'onglet actif bascule par défaut sur prompt — ce texte est celui qu'utilisera l'IA si vous demandez une régénération.
  4. Cliquez Exécuter ▶ dans la barre d'outils, et l'aperçu à droite rend un écran de réservation à 3 colonnes (calendrier / créneaux horaires / formulaire de réservation).

Remarque : ce modèle est un écran d'opérateur permettant au propriétaire de gérer dates, créneaux et disponibilité des tables — pas une simple page d'accueil menu pour visiteurs.

ASTUCE Changer de modèle écarte le code courant. Appuyez sur Enregistrer (💾) dans la barre d'outils avant, si vous voulez garder quelque chose.
3
Étape 3 · Personnaliser via la modale de paramètres et le code

Ce modèle se personnalise sur deux niveaux : une modale de paramètres (sans code) et des modifications de code directes. Le point d'entrée est l'icône ⚙ Paramètres en haut à droite de la page rendue, à côté du bouton de thème (☀/🌙).

A. Modale de paramètres — données seulement, pas de code

  1. Cliquez ⚙ → un overlay plein écran ouvre une modale centrée (4 onglets).
  2. Time Ranges — ajustez les heures de début et de fin du matin / déjeuner / dîner avec des champs numériques. Une barre de visualisation en haut reflète les segments colorés en direct. Si début == fin, le segment est marqué « (inactif) ».
  3. Time Slots — choisissez un pas (10 / 30 / 60 / 120 min), puis basculez chaque créneau de la grille actif/inactif. Les compteurs actif/inactif s'affichent en haut.
  4. Tables — liste avec renommage inline + suppression, et un champ en bas pour ajouter des tables. Cette liste alimente le sélecteur « Table » du formulaire de réservation.
  5. Holidays — jours de fermeture récurrents (Dim–Sam, 7 boutons bascules) + jours fériés spécifiques (champ date + texte de motif, liste avec ajout/suppression). Les motifs n'apparaissent que dans les paramètres, jamais sur l'écran public.

B. Modifications de code — nom du commerce, thème, etc.

  • onglet html — remplacez la chaîne du titre d'en-tête "레스토랑 예약" par le nom de votre établissement. Utilisez Ctrl+F pour la trouver.
  • onglet vuejsmounted() contient une génération de données factices (D+1 ~10 %, D+2 ~5 %, D+3 ~2 % de réservations aléatoires + un tableau de noms coréens). En production, videz ce bloc ou remplacez-le par un appel d'API serveur. Les jours fériés sont récupérés depuis https://date.nager.at/api/v3/PublicHolidays/{year}/KR — remplacez KR par un autre code pays au besoin.
  • onglet scss — le thème utilise des propriétés CSS personnalisées, pas des variables SCSS. Définies sous .reservation (clair) / .reservation.dark (sombre) : --primary (accent de marque), --bg (fond de page), --card-bg, --text / --text-sub, --border, --holiday (rouge jour férié), --closed-bg (ambre jour de fermeture), --occ-bg / --occ-border (créneau avec places restantes). Modifier uniquement ces variables décale l'apparence globale de façon cohérente.

Après édition : Enregistrer (💾)Exécuter ▶ pour rafraîchir. Les onglets non sauvegardés affichent un petit point (●).

ASTUCE Les valeurs modifiées dans la modale ne vivent qu'en mémoire et se réinitialisent au rafraîchissement. Pour persister, ajoutez dans mounted() un chargement localStorage et un watcher qui enregistre les changements, ou passez au service Project (PRO) pour stocker en vraie base de données.
4
Étape 4 · Exécuter un scénario de réservation complet

Maintenant, essayez vous-même une réservation comme si vous étiez un client. C'est exactement ce que feront votre équipe ou vos visiteurs après mise en ligne. Suivez cet ordre dans l'aperçu :

  1. Choisissez une date dans le calendrier (gauche) — cliquez n'importe quelle date à partir d'aujourd'hui. Les jours rouges sont fériés, les ambrés sont des fermetures spécifiques que vous avez définies, les grisés sont des jours de fermeture réguliers — non cliquables. Les jours qui ont déjà des réservations affichent dans le coin un petit nombre comme « +2 », pour voir d'un coup d'œil l'état des réservations.
  2. Choisissez une heure (centre) — après avoir choisi une date, les horaires disponibles apparaissent comme des boutons arrondis. Le nombre « 2/5 » signifie « 2 déjà réservé / 5 tables au total ». Teinte claire = beaucoup de places, sombre = presque complet, barré = complet et non cliquable.
  3. Voir qui a déjà réservé — cliquer sur un bouton horaire ouvre dessous la liste des réservations existantes à cet horaire (nom du client, table, nombre de convives). Évite les doubles réservations.
  4. Remplissez le formulaire (droite) — la date et l'heure choisies apparaissent en synthèse en haut. Remplissez du haut en bas :
    • Nom du client
    • Téléphone : tapez simplement les chiffres, formaté automatiquement en « 010-1234-5678 »
    • Table : les tables déjà prises à cet horaire sont automatiquement masquées pour éviter une double réservation
    • Nombre de convives : de 1 à 20
    • Note : demandes spéciales (anniversaire, accès fauteuil roulant, etc.)
  5. Cliquez le bouton [Réserver] — si le nom est vide, un avertissement apparaît. Sinon une confirmation « Réservation terminée » s'affiche, et le « +N » du calendrier ainsi que le « N/M » du bouton horaire augmentent immédiatement de 1. Le formulaire se vide tout seul et est prêt pour la réservation suivante.
  6. Essayez les thèmes clair et sombre — cliquez l'icône ☀/🌙 en haut à droite. Votre établissement peut être utilisé en plein jour comme le soir en pénombre — vérifiez la lisibilité dans les deux cas.

Pour vérifier le rendu téléphone et tablette, tirez simplement à la souris la fenêtre du navigateur pour la rétrécir. À mesure que l'écran devient étroit, les 3 colonnes se réarrangent en 2, puis finissent empilées sur 1. L'équipe utilise souvent des tablettes et les clients leur téléphone — assurez-vous que textes et boutons restent assez grands pour être touchés facilement sur écran étroit.

ASTUCE Les réservations saisies pendant ce test disparaissent au rafraîchissement du navigateur (les données d'exemple sont régénérées). Pour conserver vraiment les réservations, passez au service Project ou Database du plan PRO — couvert au prochain chapitre du guide.
5
Étape 5 · Connecter votre compte d'hébergement Railway

Le déploiement utilise l'hébergeur Railway. Au premier clic sur Deploy, une modale « Connecter le compte Railway » s'affiche. L'ordre :

  1. Cliquez Log in with Railway → la page de connexion Railway s'ouvre dans un nouvel onglet.
  2. Pas encore de compte Railway ? Créez-en un gratuitement (e-mail ou GitHub).
  3. Sur l'écran « QuickStart demande l'autorisation de déployer », cliquez Authorize.
  4. Vous êtes redirigé vers QuickStart, un toast « Connecté » apparaît.

À faire une seule fois — les déploiements suivants sautent cette étape.

ASTUCE Railway propose un tarif gratuit et ne demande pas de carte bancaire pour commencer.
6
Étape 6 · Lancer le déploiement (observer la modale de progression)

Une fois le compte connecté, cliquez à nouveau Deploy. Une modale de progression s'ouvre et parcourt 8 étapes — chacune devient verte à la fin.

  1. Pack — empaqueter votre code.
  2. Upload — envoyer le paquet à Railway.
  3. Install — installer les bibliothèques nécessaires.
  4. Build — compiler SCSS et bundler Vue.
  5. Migrate — placer les fichiers statiques au bon endroit pour le serveur web.
  6. Start — démarrer le conteneur.
  7. Health — vérifier que le site répond vraiment.
  8. Complete — finaliser et attribuer l'URL.

En général 1 à 3 minutes au total. Dépliez Afficher les logs en bas de la modale pour suivre en direct.

ASTUCE En cas d'échec, cherchez les lignes rouges dans le panneau de logs. La majorité des erreurs sont des fautes de frappe ou des parenthèses manquantes.
7
Étape 7 · Mettre en ligne sur votre domaine gratuit

À la fin du déploiement, un bouton Ouvrir le domaine apparaît en bas de la modale. Cliquez : le domaine gratuit attribué automatiquement (p. ex. happycat.apidealder.net) s'ouvre dans un nouvel onglet. Partagez cette URL avec qui vous voulez.

Plus tard, pour lier votre propre domaine (p. ex. myname.com), allez dans Paramètres → Gestion des domaines du tableau de bord, enregistrez le domaine personnalisé, et ajoutez chez votre fournisseur DNS les enregistrements indiqués.

ASTUCE Le domaine gratuit fonctionne immédiatement ; les domaines personnalisés nécessitent 5 à 30 minutes de propagation DNS.

Créer un serveur API

Créez un serveur d'API REST et reliez-le à un frontend qui affiche les données.

Temps estimé : 10–20 min
1
Ouvrir le service
2
Connecter BD
3
Choisir table
4
Inspecter les données
5
Générer API
6
Déployer
1
Étape 1 · Ouvrir le service Base de données

Depuis la navigation supérieure ou le tableau de bord, cliquez sur Services → Base de données pour ouvrir la page de base de données. L'écran se divise en une barre latérale gauche et un corps central.

  • Barre latérale gauche — en haut un bouton bleu [+ Nouveau dataset], suivi des sections « Récents », « Datasets publics », « Mes datasets », « Équipe ».
  • Corps central — la barre d'outils supérieure propose une boîte de recherche (nom / table / URI), un commutateur grille⇄liste, et un sélecteur de lignes par page (20/50/100). Plus bas, vos datasets existants apparaissent sous forme de cartes.
  • Quatre icônes sur chaque carte▶ (lecture) ouvre l'Éditeur de base de données · icône table ouvre l'Éditeur de cellule · bouton Réglages API (icône prise) ouvre les réglages d'API · plus copier/supprimer. Double-clic sur le nom de la carte pour renommer en ligne.
ASTUCE Pas encore de dataset ? Aucun souci, l'étape suivante en crée un via l'assistant.
2
Étape 2 · Enregistrer un nouveau dataset (assistant en 3 étapes)

Cliquez [+ Nouveau dataset] dans la barre latérale gauche — un assistant modal en 3 étapes s'ouvre au centre. Le flux :

  1. Étape 0 — Aperçu : cartes explicatives sur les datasets et leurs capacités. Cliquez Next pour continuer.
  2. Étape 1 — Mode de connexion : choisissez l'une des trois grandes options.
    • Déployer une nouvelle BD — provisionne un nouveau conteneur BD sur Railway.
    • Connecter une BD existante (le plus fréquent) — se connecter à une BD existante.
    • Fichier local — uploader un JSON / CSV / Excel comme dataset.
  3. Pour « Connecter une BD existante » :
    • Liste déroulante Type de BD — MySQL (port 3306 par défaut) · MariaDB (3306) · PostgreSQL (5432) · MongoDB (27017). La sélection remplit automatiquement le port par défaut.
    • Hôte · Port · Nom de base · Utilisateur · Mot de passe
  4. Cliquez [Tester la connexion] en bas — en cas de succès, l'assistant avance automatiquement à l'étape 2 ; en cas d'échec, une erreur rouge apparaît dessous.
ASTUCE Si le test de connexion échoue, c'est le plus souvent un pare-feu — le serveur BD doit accepter les connexions depuis des IP externes. Pour une BD cloud, ajoutez l'IP du serveur QuickStart à la liste des « IP autorisées ».
3
Étape 3 · Choisir une table et enregistrer le dataset

Une fois connecté, l'assistant enchaîne automatiquement deux étapes supplémentaires.

Étape 2 — Sélection de table

  • Les tables de la BD apparaissent en lignes (nom · icône · nombre de lignes · commentaire).
  • Cliquer sur une table déploie le panneau de droite et montre sa liste de champs.

Étape 3 — Enregistrer le dataset (c'est ici que les métadonnées « dataset » sont finalisées)

  • Gauche — formulaire d'enregistrement :
    • Nom du dataset (obligatoire) — ex. « Liste menu »
    • Description du dataset
    • Liste déroulante de la table cible (obligatoire)
    • Champ clé primaire — sélectionne automatiquement id s'il existe.
    • Colonnes incluses — * (toutes) ou séparées par virgules comme id,name,price
    • Clause WHERE — p. ex. stock_flag = 1
    • LIMIT — p. ex. 0,100 (offset 0, 100 lignes)
    • ORDER BY — p. ex. created_at DESC
    • Case Shared — exposer en lecture seule aux autres utilisateurs.
  • Droite — testeur de requête : cliquer [Tester la requête] exécute le SQL réel avec vos paramètres courants et affiche le nombre de lignes, de colonnes et un aperçu en direct. Ajustez les conditions à gauche jusqu'à voir ce que vous voulez.
  • Cliquez [Enregistrer] → l'assistant se ferme → une nouvelle carte de dataset apparaît sur l'écran principal.
ASTUCE Si vous filtrez avec WHERE au niveau du dataset, les APIs en aval héritent de ce filtre. Les règles d'accès du type « uniquement les produits en stock » doivent être imposées au niveau du dataset plutôt que par l'appelant.
4
Étape 4 · Examiner les données dans le Database Editor

Le clic sur l'icône ▶ (lecture) d'une carte de dataset ouvre l'Éditeur de base de données en overlay plein écran. Il a trois panneaux.

  • Gauche — explorateur d'objets : onglets en haut (Tables / Views / Procedures / Functions). Cliquez une table pour voir en dessous, dans l'inspecteur, colonnes · types · commentaires. La bande de commandes au-dessus de la liste couvre Copier le script CREATE, Drop, Update, Insert, Delete, Join, Reverse, Refresh.
  • Centre — éditeur SQL : gère plusieurs requêtes sous forme d'onglets. Double-clic sur un onglet pour renommer. La barre d'outils contient un bouton ▶ Run plus les raccourcis F5 / F9. Les résultats s'exportent en TSV / CSV / JSON / SQL, ou passent directement à un Macro via « Send to Macro ».
  • Droite — grille de résultats : lignes de la dernière requête, édition au niveau de la cellule.

Utilisez cette étape pour confirmer que les données que vous allez exposer ressemblent vraiment à ce que vous voulez. Sinon, corrigez ici d'abord.

ASTUCE Les cellules de la grille de résultats sont éditables directement, mais pour de vraies données de prod, écrire explicitement UPDATE ... WHERE id=... dans l'onglet SQL est plus sûr et laisse une trace plus claire.
5
Étape 5 · Générer l'API automatiquement (Namespace → Endpoint)

Exposez maintenant ce dataset en REST API. Cliquez sur le bouton Réglages API (icône prise) sur la carte du dataset pour ouvrir la modale Réglages API.

  1. Bases
    • Namespace (obligatoire) — devient la queue de l'URL. menu_list produit /endpoint/menu_list.
    • Table — table cible (auto-remplie depuis le dataset)
    • Table JOIN — seconde table optionnelle si vous voulez joindre
    • Var de page — nom du paramètre de pagination (par défaut page)
    • Par page — 50 par défaut
    • Temps de cache — 0 à 1440 minutes
  2. Auto-générer la réponse : cliquer [Auto-générer] construit la forme JSON en main_container → main_fields → item_container → item_fields → (optionnel) detail. Chaque champ est un couple « clé JSON → variable SQL » (p. ex. name → $customer_name). Vous pouvez ajouter ou retirer des champs à la main.
  3. Contrôle d'accès (ACL) — détaillé ci-dessous.
  4. Cliquez [Enregistrer] pour sauvegarder la définition de l'API.
  5. Cliquez [Déployer] pour lancer le pipeline de déploiement — une barre de progression apparaît, et l'endpoint passe live quand c'est fini.
ASTUCE Le bouton « Auto layout » génère un modèle de bloc Layout Builder qui consomme immédiatement cette API. On peut transformer l'API en page rendue sans écrire un front-end personnalisé.
6
Étape 6 · Appeler depuis l'extérieur et verrouiller la sécurité

Une fois déployé, l'endpoint est public (avec un domaine personnalisé) à :

  • GET https://happycat.apidealder.net/endpoint/menu_list
  • GET https://happycat.apidealder.net/endpoint/menu_list?page=2
  • GET https://happycat.apidealder.net/endpoint/menu_list/csv — téléchargement CSV

Authentification par API Key (section ACL dans la modale API) :

  • API Key — cliquez [Auto-générer] pour une clé aléatoire au format UUID.
  • Transportheader ou param.
  • Nom d'en-tête, p. ex. X-API-KEY / Nom de paramètre, p. ex. api_key.

Exemples d'appel

Par en-tête :

curl -H "X-API-KEY: your-secret-key" https://happycat.apidealder.net/endpoint/menu_list

Par paramètre :

curl "https://happycat.apidealder.net/endpoint/menu_list?api_key=your-secret-key"

Fetch navigateur :

const res = await fetch('https://happycat.apidealder.net/endpoint/menu_list', { headers: { 'X-API-KEY': 'your-secret-key' } });
const data = await res.json();

Garde-fous supplémentaires (tous dans la section ACL) :

  • Liste blanche IP — wildcards (192.168.1.*) et CIDR (10.0.0.0/24).
  • Restriction Referer — liste des domaines autorisés.
  • Limite de débit — nombre max de requêtes par minute.
ASTUCE Une clé API dans le JS du navigateur est visible dans le code source de la page — parfait quand l'endpoint est volontairement public, mais pas quand vous voulez garder la requête et la réponse privées. Sur les pages publiques, associez la clé à une restriction Referer et à une limite de débit pour contenir l'usage aux domaines et cadences voulus. Si la clé doit rester privée, appelez l'API depuis du code serveur (un programme PHP dans votre Project) et ne gardez la clé qu'à cet endroit — la configuration la plus simple.

Automatiser la collecte de données

Construisez un pipeline qui scrape des articles de sites d'actualité et les stocke en base.

Temps estimé : 20–30 min
1
Créer règle
2
URL
3
Sélecteurs
4
Test
5
Planifier
6
En BD
7
Ouvrir API
1
Étape 1 · Ouvrir la page des règles du parser

Depuis la navigation supérieure ou le tableau de bord, cliquez sur Services → Collecte de données pour ouvrir l'écran de liste des règles du parseur. La disposition ressemble à la page Base de données.

  • Barre latérale gauche — en haut un bouton bleu [+ Nouvelle règle de parseur], puis « Récents », « Règles publiques » et « Mes règles » (avec filtre par utilisateur).
  • Corps central — barre d'outils avec recherche, bascule grille/liste, pagination. En dessous, vos règles existantes s'affichent en cartes (ou lignes de tableau).
  • Icônes sur chaque carte⚗️ (tube) Test d'items · ⏱ (horloge) Planification (affiche un ruban « Max » si hors de votre plan) · modifier · dupliquer · supprimer. Les cartes indiquent nom de règle, page de test, description et date de création.
ASTUCE Pour un premier essai, forker une règle depuis « Règles publiques » est le plus rapide — les sélecteurs sont déjà calibrés, il suffit de changer l'URL cible.
2
Étape 2 · Créer une nouvelle règle (assistant en 3 étapes)

Cliquez [+ Nouvelle règle de parseur] dans la barre latérale gauche → un assistant en 3 étapes s'ouvre.

  1. Étape 1 — Vue d'ensemble : quatre cartes d'info (Extraire / Crawler / Mapping de champs / Réutilisation) et un diagramme de pipeline (Règle parseur → Base / Macro / Planificateur / API). Pas de saisie, juste contexte.
  2. Étape 2 — Connexion base de données : choisir un dataset dans une liste de cartes comme destination des données collectées. Chaque carte indique nom de dataset, type BD, table et domaine. Après sélection, pressez [Suivant] — un flow auto en 3 phases (« Connexion de l'agent → Déploiement moteur parseur → Déploiement terminé ») installe le moteur sur l'agent docker choisi.
  3. Étape 3 — Enregistrement de la règle :
    • Nom de la règle (obligatoire) — p. ex. « Naver News section IT »
    • Description — une ligne sur ce qu'elle collecte
    • Cliquez [Créer la règle] et l'assistant se ferme, vous atterrissez directement sur l'écran de configuration du parseur.
ASTUCE Si vous n'avez pas encore de dataset à l'étape 2, fermez l'assistant et créez-en un d'abord sur la page Base de données. Une table vide convient — le parseur crée les colonnes automatiquement selon ce qu'il extrait.
3
Étape 3 · URL cible et configuration de l'extraction

L'éditeur de règle s'ouvre avec un champ URL cible en haut. Saisissez la page à scraper (p. ex. https://news.example.com/it), puis configurez l'extraction. Le parseur combine trois approches.

  • Loop Splitter (3 entrées — principal + 2 secondaires) — un motif textuel qui découpe le HTML en unités répétées. Exemple : utiliser un bout de <li class="article"> comme splitter pour que chaque article devienne un item.
  • Sélecteurs XPath (jusqu'à 3 niveaux) — récupère titre / URL / image à l'intérieur de chaque unité répétée via XPath. Le sélecteur doit pointer vers un ensemble de nœuds (tableau) ; si la valeur est en //h3/a/text(), entrez juste //h3/a.
  • Sélecteurs JSON (3 niveaux) — si la page renvoie du JSON, utilisez la syntaxe point/crochet pour pointer sur le chemin tableau. Pour des données de forme data.items[0].title, entrez data.items afin que le tableau d'items soit produit.
  • Post-traitement par fonction — la colonne « function » s'applique à chaque valeur extraite :
    • trim(@p) — supprime les blancs (@p est la valeur courante)
    • replace(old,new) / regex(pattern,replacement)
    • Appels PHP directs comme strtoupper(@p)
    • Helpers intégrés : get_data() · slice() · remove() · map()

Le plus rapide n'est pas de taper des sélecteurs à la main — c'est de passer une tranche de la source (via le Loop Splitter) dans l'AI Prompt et laisser la réponse de l'IA enregistrer automatiquement la règle. C'est exactement ce que couvre l'étape 4 ci-dessous.

ASTUCE Pour les sites qui rendent via JavaScript (SPAs React, etc.), un simple fetch HTTP ramène du HTML sans données. Dans les DevTools, onglet Network, repérez l'API JSON interne appelée par le site lui-même, et ciblez cette URL directement avec un sélecteur JSON — bien plus stable.
4
Étape 4 · Laisser l'IA générer la règle

Au lieu de taper à la main des dizaines de sélecteurs, vous pouvez passer l'échantillon à une IA et appliquer la règle complète qu'elle retourne. C'est la voie recommandée pour les débutants.

Prérequis — avoir saisi une URL cible à l'étape 3 et lancé au moins une fois le test d'extraction depuis l'onglet « Test » de l'éditeur, pour qu'un corps de réponse existe. Ce corps rejoint automatiquement le prompt.

A. Construire & copier le prompt

  1. Dans le panneau de résultats du test, cliquez en haut sur le bouton 🪄 « AI Prompt » (icône baguette) en surbrillance.
  2. Le type de document (HTML / JSON / XML) est auto-détecté, le corps est extrait puis assemblé en prompt.
  3. Le panneau d'éditeur juste sous le bouton se remplit d'un prompt au format markdown. Il contient :
    • Un paragraphe d'introduction à la tâche
    • L'échantillon HTML/JSON
    • Les définitions cibles — délimiteur de répétition, champ detail-URL, clé unique, et pour chaque colonne : libellé, nom de variable, type, règles de découpe, fonction de post-traitement
    • Un JSON d'exemple et l'instruction explicite « N'émettre aucun texte autre que du JSON »
  4. Le prompt est multilingue (8 langues : coréen · anglais · japonais · chinois · russe · allemand · français · espagnol) — un document coréen produit des libellés coréens, un document chinois des libellés chinois, etc.
  5. Cliquez dans le panneau → Ctrl+ACtrl+C pour tout copier.

B. Coller dans l'IA choisie et exécuter

  1. Coller dans ChatGPT / Claude / Gemini et envoyer.
  2. L'IA répond par un JSON de règle.
  3. Copier la réponse (ou seulement la partie JSON).

C. Coller la réponse pour remplir automatiquement les champs de la règle

  1. Revenez dans le même panneau, cliquez le bouton 📥 « Import Pattern » (icône d'import) — une zone de texte avec indice de format s'ouvre.
  2. Collez votre JSON, puis cliquez [Appliquer le pattern].
  3. Délimiteur de répétition, sélecteurs, clé unique et champ detail-URL se placent automatiquement en haut de la règle, et chaque colonne (libellé, variable, type, règles de découpe, fonction de post-traitement) est remplie d'un coup dans la liste des champs. Les noms de variable dupliqués sont renommés auto pour éviter les collisions.
  4. L'éditeur passe automatiquement sur l'onglet « fields » pour vérification immédiate, et un toast résumé « Pattern applied: N fields » apparaît en bas.
ASTUCE Si la réponse de l'IA n'est pas du JSON valide ou que la liste de champs est vide, un toast « Invalid JSON » apparaît et vos valeurs existantes restent intactes. Ajoutez « Output JSON only, no other text » à votre conversation IA, ou collez uniquement la partie JSON. Par ailleurs, les règles générées par IA sont rarement parfaites du premier coup. Vérifiez toujours via l'étape 5 (Test d'items) et réglez à la main les quelques champs qui en ont besoin.
5
Étape 5 · Aperçu via le test d'éléments

Une fois les sélecteurs grossièrement en place, vérifiez qu'ils extraient bien ce que vous voulez. Deux points d'entrée :

  • L'icône ⚗️ sur la carte d'une règle
  • Ou l'onglet « Test » en haut de l'éditeur de règle

La modale Test d'items s'ouvre avec :

  1. Barre de statut en haut — résumé « N items / M colonnes ». Si N vaut 0, le Loop Splitter est faux — corrigez-le en premier.
  2. Boutons d'export — CSV · XLSX · JSON · HTML, pratiques pour partager un échantillon avec l'équipe.
  3. Grille de résultats — Row# + en-têtes de colonnes auto-dérivés du premier item, une ligne par item extrait.
  4. Hover de cellule — un bouton « Copy » apparaît au survol pour copier la valeur dans le presse-papiers.

Si les résultats sont faux, fermez la modale, ajustez sélecteurs/fonctions et retestez — cette boucle représente ~70 % du travail de parseur.

ASTUCE Signaux courants : « les colonnes sont bonnes, mais seulement 1 ligne » → Loop Splitter trop large. « Les lignes sont bonnes, mais les colonnes sont vides » → sélecteurs XPath/JSON faux.
6
Étape 6 · Sauvegarde dans le dataset

Une fois le test propre, confirmez les réglages de sauvegarde dans la section « Save » de l'éditeur.

  • Menu Save type — sur « Database » (déjà auto-défini si vous avez choisi un dataset dans l'assistant).
  • Table cible / nom de collection — où atterrissent les lignes. Si elle n'existe pas, l'agent la crée au premier lancement, avec les colonnes détectées dans votre test.
  • Mode DBDataset (lié) / Custom. Custom permet de saisir directement hôte · utilisateur · mot de passe · base de données (utile pour écrire dans une BD différente de celle de l'assistant).

Ce qui se passe à l'exécution

  1. Vous exécutez la règle (bouton « Persist » du test ou la planification de l'étape suivante), et l'agent docker frappe l'URL cible.
  2. Les items sont extraits : Loop Splitter → sélecteurs XPath/JSON → traitement fonctions.
  3. Les items extraits sont insérés dans la table cible. Les doublons (par hash d'URL ou par la clé choisie) sont sautés ou mis à jour automatiquement.
  4. Comme cette table vit dans la même BD que la carte de dataset de l'étape 5, l'endpoint API /endpoint/... construit avant sert désormais les données les plus fraîches.
ASTUCE Le mode DB custom est utile pour faire atterrir des données dans une BD interne que vous ne voulez pas publier comme dataset partagé. Les identifiants sont stockés dans la BD de QuickStart, créez donc un compte dédié lecture/écriture pour le parseur plutôt que d'utiliser votre login admin.
7
Étape 7 · Planification et exécution automatique (MAX)

La dernière étape la fait tourner toute seule. Cliquez sur l'icône ⏱ (horloge) d'une carte de règle pour ouvrir la modale de planification. Cette fonctionnalité est exclusive MAX — sur les autres plans, l'icône affiche un ruban « Max ».

  1. Champs du planning :
    • Heure de début — heure (0–23) + minute (0–59). Ex. 03h30.
    • Intervalle (minutes) — 60 = toutes les heures, 1440 = une fois par jour.
    • Active — interrupteur. Off garde la config mais met les runs en pause.
    • Run modeSingle URL (une seule URL cible) ou Batch (boucle sur une liste d'URL, une par ligne).
  2. Cliquez [Enregistrer] — le planning est sauvegardé dans QuickStart et auto-synchronisé avec l'agent docker sélectionné, qui exécute réellement.
  3. À partir de là, l'agent déclenche la règle à votre intervalle et alimente le dataset. QuickStart ne fait que signaler — il n'est pas sur le chemin du trafic, donc aucun surcoût de bande passante.

Chaînage avec un macro (optionnel) — dans le diagramme de flux de l'éditeur, utilisez la liste déroulante « Select macro » pour choisir un macro. Juste après la fin d'un scrape, il s'exécute. Exemple : comparer les prix produits fraîchement scrapés à ceux d'hier ; s'ils ont baissé de N%, envoyer une alerte Slack.

ASTUCE Vérifiez toujours robots.txt et les CGU du site visé. Des intervalles très courts (p. ex. chaque minute) nuisent au site cible et provoquent des bannissements. Pour les actualités ou prix e-commerce, 60 à 1440 minutes est le vrai compromis entre politesse et fraîcheur.

Migration de base de données · réplication B → A → C

Construisez à la main un pipeline de réplication à trois étages : récupérer les données depuis une base externe en production (B), les déposer dans votre propre jeu de données (A · Docker), puis les pousser vers une autre base externe (C). Un unique bouton Migration dans la liste des données gère l'entrée et la sortie, tandis que la couche A en profite pour nettoyer les colonnes, réécrire les URL et agréger.

Durée : 20–30 min
B
B · Source externe
ex. origin.acme.com · MySQL · sales_db
Import
hard_sync / soft_sync
A
A · Mon dataset (Docker)
ex. my_staging · couche transformation/tampon
Export
append / soft_sync
C
C · Cible externe
ex. warehouse.acme.com · PostgreSQL · reporting
1
Scénario
2
Préparer A
3
Connecter B
4
B→A import
5
Transformer en A
6
A→C export
7
Automatiser
1
Étape 1 · Pourquoi passer par A — comprendre le scénario à trois étages

Pousser directement de la base de production (B) vers la base analytique (C) paraît le plus simple, mais en pratique les noms de colonnes diffèrent, des données personnelles traînent et les fuseaux horaires ne correspondent pas — il faut un sas pour nettoyer au passage. Le dataset QuickStart (A) joue exactement ce rôle.

  • B (source externe) — la boutique ou l'ERP en exploitation. Y toucher, c'est arrêter le service, donc lecture seule.
  • A (mon dataset · Docker) — votre atelier. Renommer des colonnes, réécrire les URL, écarter les champs inutiles, ajouter des agrégats — tout se fait ici.
  • C (cible externe) — la base BI, celle d'un partenaire, toute destination. Seule la version propre sortie d'A y entre.

Atouts de ce schéma :

  1. B et C peuvent tourner sur des moteurs différents (MySQL ↔ PostgreSQL …) — A fait le pont.
  2. Les données restent dans A, si C est effacé on reprousse. Rollback facile.
  3. Dans A on itère autant qu'il faut et on ouvre la vanne vers C quand tout est prêt.
ASTUCE On se dit souvent « et si j'envoyais B directement à C ? », mais dès la première exigence « les colonnes s'appellent différemment » ou « passer UTC en KST » ou « retirer les champs perso », la couche intermédiaire devient indispensable. Mettez A dès le départ, vous n'aurez pas à redessiner le pipeline plus tard.
2
Étape 2 · Préparer A (votre dataset)

On commence par créer le dataset (A) qui accueillera les données de B.

  1. Menu haut → Données → Base de données. La liste s'ouvre.
  2. En haut à droite [+ Nouveau dataset]. Saisir :
    • Nom — ex. replication_staging
    • Type de BDDMySQL ou PostgreSQL. Même moteur que B = moins de conversions.
    • Hôte — par défaut la BDD incluse dans l'agent Docker (pré-remplie).
    • Nom de la BDD — ex. my_staging
  3. [Enregistrer] — une ligne apparaît avec les icônes 🔌 test · édition · migration · export.
  4. Cliquer d'abord 🔌 et obtenir « Connexion réussie » avant de continuer.

Le dataset A est le tampon intermédiaire où transitent brièvement les données venues de B et celles qui iront vers C.

ASTUCE Pas besoin de créer les tables tout de suite : le hard_sync de l'étape 4 copiera le schéma de B dans A et créera les tables automatiquement. Si au contraire A doit avoir une structure totalement différente, créez les tables à la main dans l'éditeur SQL et prévoyez d'utiliser append à l'étape 5.
3
Étape 3 · Ouvrir la modale Migration et saisir la connexion B (source)

Dans la liste, sur la ligne A, cliquer l'icône Migration. Une grande modale en trois colonnes s'ouvre.

  • Gauche · Deck A — votre dataset (replication_staging) est déjà branché, ses tables et champs sont visibles immédiatement.
  • Centre · barre d'outils — indicateur de direction (A → B / B → A), bouton [Inverser], et la liste d'actions (⚡ hard_sync, 🔄 soft_sync, ➕ append …).
  • Droite · Deck B — le formulaire de connexion distante.

Le sens par défaut est A → B (pousser vers l'extérieur), mais on veut tirer depuis B : cliquer [Inverser] au centre pour passer à B → A. Le badge de Deck B devient « source », celui de Deck A « target ».

Remplir alors dans Deck B la connexion de la base de prod externe (B) :

  1. Hôte — ex. origin.acme.com ou 10.0.1.23
  2. Type de BDDMYSQL · POSTGRESQL · MONGODB · ELASTICSEARCH
  3. Nom de la BDD — ex. sales_db
  4. Compte / mot de passe — fortement recommandé : compte en lecture seule. Avec uniquement SELECT, impossible d'abîmer B.
  5. [Test de connexion] → « Connexion réussie » et la liste des tables distantes se charge toute seule.
ASTUCE Si le test échoue, dans 99 % des cas c'est le pare-feu ou la liste blanche d'IP. Demandez au DBA de B d'ajouter l'IP sortante de l'agent QuickStart. Quand l'erreur ressemble à Access denied for user 'xxx'@'1.2.3.4', transmettez cette IP telle quelle — c'est celle que voit le serveur cible.
4
Étape 4 · Import B → A : choisir les tables et lancer hard_sync

Après une connexion réussie, Deck B affiche la liste des tables et un bouton [Suivant] apparaît en haut à droite. Il fait passer Deck B de « connexion » à « sélection des tables ».

  1. Sélection des tables — cocher celles à importer. [Toutes les tables] coche tout. Démarrer petit (orders · customers · products) est plus sûr.
  2. Filtre (optionnel) — le champ WHERE en bas de Deck B accepte created_at > '2026-01-01'. LIMIT 0, 1000 ne prend que 1000 lignes d'échantillon. Toujours limiter au premier essai.
  3. Inspecter les champs (optionnel) — l'icône à côté d'une table ouvre la liste des colonnes ; décocher celles qu'on ne veut pas copier (password_hash, national_id …).
  4. ⚡ hard_sync — dans la barre centrale, cliquer [hard_sync] (icône éclair). La fenêtre « Exécuter hard_sync sur {count} tables ? » demande confirmation. Côté A, chaque table est DROP → CREATE → INSERT. La barre de progression montre table courante / total et l'avancement par ligne.
  5. À la fin, le log en bas affiche « Success » et la liste des tables de Deck A se rafraîchit avec les nouvelles tables.

Autres actions que hard_sync :

  • 🔄 soft_sync — UPDATE/INSERT/DELETE par clé primaire seulement ; les lignes déjà dans A absentes de la source ne sont pas supprimées. Pour la sync régulière.
  • ➕ append — insère uniquement les id absents d'A. Idéal pour l'incrémental.
  • 🔀 merge — insère uniquement les lignes dont l'id ne collisionne pas avec A.
ASTUCE Un hard_sync intégral de millions de lignes prend des minutes à des dizaines de minutes. Au premier passage, tailler à 10k–100k lignes via WHERE + LIMIT, valider schéma et flux, puis retirer la limite au deuxième passage. Laissez l'onglet ouvert et travaillez en parallèle dans un autre.
5
Étape 5 · Nettoyer dans A — la substitution au centre de la modale

Les données brutes sont dans A, mais les envoyer telles quelles à C casse en général quelque chose. Deux façons de nettoyer.

① Substitution depuis la modale de migration — en bas de la barre centrale, le bloc « Configuration de la substitution » remplace en masse. Exemple : B stocke https://cdn-old.acme.com/, C attend https://cdn.acme.com/ :

  1. Choisir [Texte] (ou [Regex]).
  2. Zone de gauche : https://cdn-old.acme.com/
  3. Zone de droite : https://cdn.acme.com/
  4. Au prochain hard_sync / soft_sync, la valeur est remplacée à la volée et écrite dans A (ou dans C à l'étape 6). La source n'est pas modifiée.

② Via l'éditeur SQL — retour à la liste des datasets, icône sur la ligne A, lancer du SQL.

  • ALTER TABLE orders DROP COLUMN password_hash; — retirer des colonnes sensibles
  • UPDATE orders SET created_kst = CONVERT_TZ(created_at, 'UTC', 'Asia/Seoul'); — conversion de fuseau
  • CREATE TABLE orders_summary AS SELECT product_id, COUNT(*) cnt, SUM(amount) total FROM orders GROUP BY product_id; — table agrégée

Avant l'étape 6, valider dans l'éditeur : SELECT * FROM orders_summary LIMIT 20;.

ASTUCE Pour éviter que les deux couches se marchent dessus, séparez les rôles : substitutions simples (URL, domaines, préfixes) dans la modale de migration ; changements de structure (ajouter/retirer des colonnes, changer le type, agréger) dans l'éditeur SQL. Mélanger rend la question « où cette valeur a-t-elle été modifiée ? » pénible à résoudre.
6
Étape 6 · Export A → C : inverser, brancher la cible, envoi incrémental

On pousse maintenant les données propres d'A vers la cible externe (C). Retour à la liste des datasets, cliquer à nouveau sur la ligne A.

  1. Vérifier la direction — au centre on doit lire A → B, où B dans l'UI désigne désormais notre C. S'il reste B → A depuis l'étape 3, cliquer [Inverser]. Deck A devient source, Deck B cible.
  2. Connexion cible dans Deck B (= C) — hôte warehouse.acme.com, type POSTGRESQL, base reporting, compte avec droits INSERT/UPDATE. [Test de connexion] → réussite.
  3. Tables à envoyer dans Deck A — cocher orders_summary · products · customers_clean ou celles déjà préparées.
  4. Choisir l'action :
    • C est créé pour la première fois : ⚡ hard_sync, la structure est recopiée, les tables absentes sont créées.
    • C contient déjà des données et c'est une sync régulière : 🔄 soft_sync, UPDATE/INSERT/DELETE sur C depuis A.
    • C accumule seulement : ➕ append, seuls les nouveaux id d'A sont ajoutés à C.
  5. Lancer — confirmer et suivre la barre. Si le réseau tousse, les lignes sont découpées ; relancer reprend au point d'arrêt.
ASTUCE Avant le premier export, sauvegardez C. hard_sync DROP la table cible avant de la recréer ; une mauvaise sélection efface tout. En prod, préférez par défaut soft_sync ou append et gardez hard_sync pour l'initialisation.
7
Étape 7 · Automatiser et vérifier — macro pour réplication périodique

Une fois le pipeline passé à la main, emballez-le dans une macro pour le planifier. Service → Macro, nouvelle macro, appelez la migration depuis le code.

  • Le corps ressemble à fetch('/dataset/api/mig_run', { method: 'POST', body: JSON.stringify({ dataset_id: 123, action: 'soft_sync', deck_b: {host, db_name, user, password}, sel_tables: ['orders'] }) }). Le plus sûr : exécuter une fois le bouton à la main et copier la requête depuis l'onglet Network.
  • Dans l'onglet Planification de la macro, posez un cron. Ex. tous les jours à 3 h : 0 3 * * *.
  • Gardez B → A et A → C en deux macros distinctes, pour qu'un échec d'un côté ne gèle pas l'autre. Chaînez l'ordre B → A puis A → C en regardant le success du résultat de la première.

Check-list de vérification :

  1. SELECT COUNT(*) FROM orders sur C et comparer avec A et B.
  2. Un id récent au hasard : comparer les colonnes entre B · A · C.
  3. Insérer exprès une ligne dans B et vérifier qu'elle arrive en 5–10 min dans A puis dans C. Si non, consulter le log d'exécution de la macro et celui de la migration.
ASTUCE À la première macro, faites tourner à la main sur peu de données avant de la confier au planificateur. Mettre le cron en premier revient à accumuler des erreurs nocturnes pendant plusieurs jours avant qu'on s'en aperçoive. Après automatisation, la première semaine, jetez un œil au log chaque matin jusqu'à ce que ça tienne.

Éditeur de cellules · coller depuis Excel dans votre dataset

Un parcours pratique pour insérer des centaines ou milliers de lignes dans une table de dataset, simplement en copiant-collant depuis Excel / Google Sheets. Un clic sur Éditeur de cellules dans la liste des datasets ouvre une grille navigateur — sans FTP ni SQL.

Durée : 10–15 min
Excel · Sheets
colonnes/lignes organisées
Ctrl + C
Éditeur de cellules
grille dans le navigateur
Ctrl + V
Table du dataset
INSERT automatique
1
Scénario
2
Ouvrir l'éditeur
3
Schéma
4
Coller
5
Vérifier
6
Enregistrer
1
Étape 1 · Quand le coller-pour-insérer bat tout le reste

Dans ces cas, un coller écrase largement un SQL à la main :

  • Un marketeur envoie un Excel avec 500 codes promo à pousser en BDD.
  • Un designer fournit une Google Sheet nom · prix · catégorie à charger d'un coup.
  • Un partenaire livre un CSV liste de membres à importer tel quel.
  • On veut préparer pour l'assistant IA une table de 100 exemples déjà faits.

L'Éditeur de cellules se comporte comme Excel : une grille lignes × colonnes. Un Ctrl+C côté Excel et un Ctrl+V dans n'importe quelle cellule — tabulations ou virgules détectées automatiquement et les lignes se placent. Pas de dialogue de mapping : les colonnes se remplissent de gauche à droite depuis la cellule de départ.

ASTUCE Pour des dizaines de milliers de lignes d'un coup, l'import CSV ( dans la liste) ou la Migration sont plus robustes. Le coller-pour-insérer brille quand on veut garder l'œil sur quelques centaines à deux milliers de lignes qui entrent.
2
Étape 2 · Ouvrir l'Éditeur de cellules

Menu haut → Données → Base de données. La liste de vos datasets s'affiche en cartes ou en lignes.

  1. Trouver la ligne d'un dataset dont vous êtes propriétaire (user_id = vous). Les datasets partagés sont en lecture seule.
  2. Cliquer l'icône Éditeur de cellules dans les actions de la ligne. Un modal plein écran s'ouvre.
  3. Disposition : à gauche panneau d'options (sélection de table · pas de page · tri · recherche · remplacement) ; au centre la grille ; à droite la barre d'outils (enregistrer · +/– ligne · Undo/Redo · copie · export CSV/SQL · ✨ assistant IA).
  4. Choisir la table cible dans le déroulant de gauche. Ses lignes existantes se chargent. Table vide → grille vide.
ASTUCE L'ouverture + chargement prennent 1 à 2 s. Pour une grande table, réduire le pas de page (10 · 20 · 50 · 100) pour alléger le rendu. 50 par défaut convient dans la plupart des cas.
3
Étape 3 · Vérifier le schéma — clé primaire et ordre des colonnes

Avant de coller, s'assurer que l'ordre des colonnes Excel = celui de la table. Un décalage place les valeurs dans les mauvaises colonnes.

  • En-têtes — la première ligne de la grille affiche noms et types. Les colonnes Excel doivent suivre cet ordre, de gauche à droite.
  • Clé primaire (PK) — les colonnes avec 🔑 sont la PK. Avec id en auto_increment, ne pas inclure id dans la sélection Excel ; la BDD l'affecte à l'INSERT.
  • Colonnes NOT NULL — en-têtes en rouge, pas de vide possible ; remplir dans chaque ligne.
  • Trop/pas assez de colonnes — le surplus à droite est ignoré ; ce qui manque à droite reste vide.

Si le schéma ne colle pas : régénérer via Créer une grille (X × Y) dans le panneau de gauche, ou réordonner Excel avant de copier.

ASTUCE Sans PK, l'enregistrement s'arrête sur "Aucune clé primaire définie". Retournez dans l'éditeur SQL et faites ALTER TABLE ... ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;.
4
Étape 4 · Coller — Excel Ctrl+C → Grille Ctrl+V

Cœur du flux. Dans Excel/Sheets, sélectionner la plage sans la colonne id et Ctrl+C. Retour dans l'éditeur :

  1. Cliquer la cellule de départ. Généralement la colonne la plus à gauche, une ligne sous la dernière existante — les nouvelles lignes s'ajoutent à la fin.
  2. Ctrl+V. L'éditeur détecte tabulation (par défaut Excel) ou virgule (CSV) et répartit lignes/colonnes automatiquement.
  3. La grille s'étend, les nouvelles lignes apparaissent avec un fond légèrement teinté — "nouvelle, non enregistrée".
  4. Coller d'autres plages en choisissant une nouvelle cellule de départ.

Séparateur manuel — déroulant Séparateur à gauche : tab · virgule · virgule sûre (respect des guillemets). CSV avec virgules dans des guillemets → virgule sûre, les portions entre guillemets restent dans une seule cellule.

ASTUCE La meilleure habitude : ne jamais sélectionner la colonne id dans Excel. Un 1, 2, 3 collé par erreur entrera en conflit avec des ids existants ou perturbera l'auto_increment.
5
Étape 5 · Vérifier et corriger — ce que signifient les couleurs

Avant d'enregistrer, passer les yeux sur la grille. Trois états sont marqués par couleur.

  • Ligne teintée — "nouvelle" ligne fraîchement collée, deviendra un INSERT.
  • Point jaune au coin d'une cellule — cellule modifiée d'une ligne existante, UPDATE.
  • Ligne grisée — en file d'attente de suppression. La barre d'état affiche « 🗑 X lignes seront supprimées » et un bouton [Restaurer].

Gestes courants :

  • Double-clic sur une cellule pour y taper directement.
  • Barre de droite / — ligne vide au curseur / suppression de la ligne courante.
  • Ctrl+Z · Ctrl+Y — annuler/refaire (jusqu'à 50 instantanés).
  • Rechercher/Remplacer — panneau gauche ; texte ou regex, s'applique à toute la grille.

La barre d'état affiche ✏ X lignes, Y cellules modifiées. Si le nombre surprend, corriger avant d'enregistrer.

ASTUCE Fermer la fenêtre ou rafraîchir avec des modifications non enregistrées déclenche une confirmation. Annuler et faire Ctrl+S d'abord.
6
Étape 6 · Enregistrer — 💾 lance INSERT/UPDATE d'un coup

Quand tout semble bon, enregistrer via Enregistrer à droite ou Ctrl+S. L'éditeur assemble et exécute :

  • Nouvelles lignesINSERT INTO table (col1, col2, ...) VALUES (...). Les PK auto_increment sont affectées par la BDD.
  • Lignes avec cellules modifiéesUPDATE table SET col=val WHERE id=..., seulement les colonnes changées.
  • Lignes en file de suppressionDELETE FROM table WHERE id=....

Succès : toast « X lignes enregistrées ». Le teinté des nouvelles lignes disparaît, les id vides reçoivent le numéro de la BDD. Ces lignes sont désormais des données normales.

Échec — le panneau memo affiche l'erreur, souvent NOT NULL manqué, type incorrect ou doublon unique. Corriger la ligne et enregistrer à nouveau.

ASTUCE Enregistrer plusieurs milliers de lignes d'un coup peut dépasser le timeout réseau. Découpez le coller en paquets de 500–1000 lignes ou passez à l'import CSV.

Assistant IA · traitement en masse avec « valeur souhaitée / actuelle »

Utilisez les marqueurs « valeur souhaitée / valeur actuelle » et le ✨ bouton assistant de l'Éditeur de cellules pour exécuter des centaines de tâches IA — traduction, résumé, classification, extraction, normalisation, détection d'anomalies — avec une seule génération de prompt. Quelques exemples marqués suffisent : l'IA apprend le motif et applique la même règle au reste. Le « retaper l'instruction à chaque ligne » disparaît presque totalement.

Durée : 15–25 min
1
Souhaitée
Actuelle
Marquer exemples
2
✨ Générer prompt
3
IA analyse
4
📥 Appliquer

Cas d'usage les plus réussis

1
Concept
2
Préparation
3
Souhaitée
4
Actuelle
5
Prompt
6
IA traite
7
Appliquer
1
Étape 1 · « as if to be » — pourquoi quelques exemples résolvent des centaines de cas

as if to be est une instruction par apprentissage de motif : « Si le résultat déjà abouti (Souhaitée) ressemble à ceci, alors transforme le brut (Actuelle) de la même façon ». Au lieu de formuler la règle en mots, on montre à l'IA quelques sorties de la règle, elle généralise au reste.

L'Éditeur de cellules propose deux marqueurs (couleur 1 · couleur 2).

  • Marqueur 1 (Souhaitée · par défaut turquoise) — cellules exemples corrects du rendu.
  • Marqueur 2 (Actuelle · par défaut orange) — cellules brutes que l'IA doit compléter.

Pourquoi c'est puissant :

  1. Pas besoin de formuler la règle en langage naturel — les exemples parlent pour elle.
  2. Fonctionne même pour les règles trop subtiles pour les mots (ton, nuance, registre).
  3. Un seul prompt couvre des centaines de cellules. Le « coller chaque ligne vers l'IA » disparaît.
  4. Ajouter/retoucher des exemples améliore la qualité instantanément. Boucle de tuning en secondes.
ASTUCE La première fois, « quelques exemples suffisent vraiment ? » peut paraître douteux. Faites tourner le cas de traduction le plus simple en 5 minutes — après une passe, vous verrez ce patron partout.
2
Étape 2 · Préparation — colonne source, colonne cible, 2–5 exemples de graine

Dataset ouvert dans l'éditeur, préparez cette structure :

  1. Colonne source — ce que l'IA lit. Ex. fr_text, product_desc, address_raw.
  2. Colonne cible — ce que l'IA remplit. Ex. en_text, summary, city. Manquante ? Ajoutez-la en SQL : ALTER TABLE ... ADD COLUMN en_text TEXT;.
  3. 2–5 lignes de graine — colonne cible remplie à la main. Trois bons exemples déterminent la qualité de 500 lignes.

Choisir de bons exemples :

  • Variété — court, long, cas spécial. Des exemples trop semblables laissent l'IA en difficulté sur les cas limites.
  • Niveaux — facile, moyen, épineux.
  • Style explicite — sauts de ligne, majuscules, registre formel/informel doivent apparaître dans les exemples.
ASTUCE Le temps passé à remplir les graines semble perdu — ne sautez jamais cette étape. 5 minutes pour 2–5 exemples font gagner des heures : l'IA traite 500 lignes en 30 s. Zéro exemple = IA à côté, résultat à jeter.
3
Étape 3 · Marquer les cellules d'exemple en « Souhaitée »

Dans la palette de marqueurs du panneau droit, cliquer la première pastille (turquoise · Souhaitée) pour l'activer (liseré renforcé).

  1. Cliquer chaque cellule d'exemple remplie à la main — elle devient turquoise, donc marquée comme « Souhaitée ».
  2. Les marqueurs basculent : recliquer dé-marque.
  3. Sélectionner une plage par glisser puis cliquer la pastille pour marquer en bloc.

Renommer l'étiquette crayon à côté de l'étiquette (« Souhaitée » par défaut). Pour une traduction « Traduction anglaise », pour un résumé « Résumé une ligne », pour une classification « Catégorie ». L'étiquette entre dans le prompt à l'étape 5 et précise la tâche pour l'IA.

ASTUCE Les « Souhaitée » n'ont pas besoin d'être nombreuses : 2–5 suffisent. Au-delà de 15, le prompt s'alourdit et grignote les tokens utiles aux vraies cellules à transformer.
4
Étape 4 · Marquer les cellules à transformer en « Actuelle »

Activer la deuxième pastille (orange · Actuelle).

  1. Sélectionner par glisser les cellules vides ou brutes de la colonne cible — ex. en_text de la ligne 4 à la fin.
  2. Un clic sur la pastille orange ; toutes passent en orange, ce sont les cibles pour l'IA.
  3. La colonne source (fr_text) ne se marque pas ; l'IA lit automatiquement la source de chaque ligne cible.
  4. Renommer aussi cette étiquette : « Vers l'anglais », « Plus court », « Assigner une catégorie » — une instruction d'un mot.

Au final la grille montre cellules turquoises (exemples justes) + cellules oranges (vides à remplir) côte à côte — c'est la forme canonique de « as if to be ».

ASTUCE Au-delà d'environ 200 cellules par lot, on risque la limite de tokens de réponse IA. Baissez le pas de page à 50–100, marquez uniquement les cellules visibles, et traitez par lots. 3 à 5 passes et c'est bouclé.
5
Étape 5 · ✨ Assistant → prompt automatiquement dans le presse-papiers

Clic sur Assistant IA dans la barre de droite. L'éditeur lit les marqueurs, assemble un prompt structuré et le met automatiquement dans le presse-papiers. Toast « Prompt IA copié ».

Structure typique (textes variables selon étiquettes et exemples) :

  1. Message système — "You are a data transformation assistant"
  2. Énoncé de tâche — depuis les étiquettes. Ex. "Transform each 'Current Value' cell according to the pattern shown in 'Desired Value' examples."
  3. Liste d'exemples — (ligne, colonne, valeur) de chaque cellule turquoise.
  4. Liste de cibles — (ligne, colonne, valeur brute) de chaque cellule orange.
  5. Contrat de sortie — seul un tableau JSON [{"pos":"ligne,colonne","return_txt":"valeur"}, ...] est accepté.

Arrêt — zéro marqueur turquoise et zéro orange déclenche une alerte. Retour aux étapes 3 et 4.

ASTUCE Collez le prompt dans Notepad/Notion au moins une fois avant de l'envoyer à l'IA. Dix secondes suffisent pour vérifier exemples et étiquettes et éviter des requêtes IA gâchées.
6
Étape 6 · Coller dans l'IA → copier le JSON → coller dans Memo

Coller le prompt dans Claude · ChatGPT · Gemini et envoyer. L'IA répond par un tableau JSON.

  1. Sélectionner uniquement la partie JSON et Ctrl+C. Texte autour sans importance — ne prendre que le tableau.
  2. Dans l'éditeur, Ctrl+V dans la zone Memo en bas à droite. Memo est la zone d'atterrissage pour la sortie IA.
  3. Vérifier d'un œil : [{"pos":"3,5","return_txt":"Translated"},{"pos":"4,5","return_txt":"Another"}, ...].

Nettoyer le bavardage — l'IA précède souvent le JSON par « Here is the JSON you asked for: ». Ne prendre que le tableau (de [ à ]). Le bouton « Appliquer » de l'étape 7 parse du JSON strict.

ASTUCE Si la réponse fait des dizaines de kilo-octets, enregistrer la sortie IA dans un fichier et ne recopier que le JSON dans Memo. L'ordre des entrées n'importe pas.
7
Étape 7 · 📥 Appliquer → grille mise à jour → enregistrer

JSON dans Memo — bouton 📥 Appliquer le résultat IA à droite. L'éditeur parse et écrit return_txt à pos. Toast « X cellule(s) appliquée(s) ».

  • Les cellules écrites portent le point jaune modifié — présentes dans la grille, pas encore en BDD.
  • Une cellule vous déçoit ? Ctrl+Z annule mais perd tout le lot IA. Souvent plus rapide : corriger à la main les mauvaises cellules.
  • OK → Ctrl+S. Même chemin UPDATE que section 1 étape 6.

Boucle et stratégie de lots :

  1. Avant d'appliquer tout le lot, regardez 10 échantillons. Qualité qui dérive : retouchez exemples/étiquettes en 3–4 et régénérez le prompt.
  2. Qualité ok : page suivante, nouveau marquage, étapes 5–7 de nouveau.
  3. À la fin, maintenez une colonne méta (batch_note) listant les exemples utilisés par lot — relancer une section devient trivial si le style change.
ASTUCE Il y a toujours 1–2 % de coquilles ou d'écarts dans les sorties IA. Avant d'enregistrer, passez la recherche sur des chaînes suspectes ("undefined", "N/A", "???") et corrigez les occurrences. « 80 % par l'IA, 20 % rapides à la main » bat la course à la perfection.

Fork → personnalisation → publication · l'histoire menupan

Prenez la solution menupan (carte numérique) du marché, forkez-la sur votre compte, remplacez le logo par celui de votre entreprise, basculez le menu de démo vers vos vrais produits, ajustez couleurs et polices à la marque, et publiez sur votre domaine. Au lieu de partir de zéro, vous dérivez un projet déjà fonctionnel et le rendez vôtre rapidement — le scénario le plus courant en pratique.

Durée : 30–45 min
Marché de solutions
choisir la carte menupan
Fork
Mon projet
domaine · BD auto-câblés
Personnaliser
Ma marque
logo · menu · couleur · police
Publier
Domaine en prod
menu.mycafe.com

Boucle de design — Inspect → tester → demander à l'IA → écrire dans le CSS

1
F12 Inspect
2
Modifier en direct
3
Demander à l'IA
4
Sauver dans le CSS
1
Scénario
2
Fork
3
Logo
4
Menu
5
Test F12
6
Palette IA
7
Sauver · publier
1
Étape 1 · Scénario — le café "Sodam" rend menupan « le sien »

Un cas concret rend tout plus parlant. Le café "Sodam" veut une carte numérique sur tablette à l'entrée. Construire de zéro est lent ; prendre la solution menupan du marché et la rhabiller aux couleurs du café est radicalement plus rapide.

Ce qu'on boucle en 30–45 min :

  • Logo — remplacer le logo menupan par celui du café "Sodam".
  • Articles du menu — supprimer la démo (Americano 4500 KRW, etc.) et ajouter la vraie carte.
  • Couleurs et police — passer du bleu par défaut à un beige chaud + brun foncé, et la police corps à une police lisible en coréen.
  • Mise en ligne — publier sur un domaine à vous, par ex. menu.sodam.kr.

Pourquoi forker ?

  1. Mise en page, schéma de BD et back-office sont déjà faits — 90 % de temps de construction économisé.
  2. Le fork tourne sous votre compte, votre domaine, votre BD ; l'original reste intact, seule votre copie est éditable.
  3. Si menupan se met à jour plus tard, votre fork n'est pas affecté — vos personnalisations restent.
ASTUCE « Fork » paraît abstrait ? Imaginez « vous prenez un même vêtement sur le portant et l'ajustez chez vous ». Celui en boutique reste tel quel ; seul votre exemplaire à la maison est coupé, ourlé, teint.
2
Étape 2 · Forker menupan depuis le marché de solutions

Menu haut → Communauté → Marché de solutions (ou /solution). Galerie de cartes.

  1. Filtres en haut (Tout / Project / Macro / Community / Direct) — choisir Project — ou taper menupan / carte numérique dans la recherche.
  2. Clic sur la carte : page de détails avec aperçus, fonctionnalités et ressources requises (domaine / BD).
  3. Sur la page : Forker comme nouveau projet. Le modal de fork s'ouvre.
  4. Saisir :
    • Domaine — parmi vos domaines actifs, ex. menu.sodam.kr. Pas de domaine ? Ouvrir un autre onglet sur Paramètres → Domaines et obtenir un sous-domaine gratuit (~.apidealder.net) avant de revenir.
    • Dataset — la BD pour les données du menu. Nouveau ou existant.
    • Nom & description — ex. nom sodam_menu, description « tableau de menu en magasin Café Sodam ».
    • Bascule "Auto-déploiement" — l'activer pour que la première mise en ligne se lance dès le fork terminé. Recommandé la première fois.
  5. Cliquer [Lancer le fork]. 30 s à 2 min plus tard, toast de fin. Une nouvelle ligne apparaît en haut de Mes projets dans la barre latérale, et l'espace de travail s'ouvre seul.
ASTUCE Pas de domaine ni de dataset → le modal vous oriente vers « Ajoutez d'abord un domaine ». Ouvrir Paramètres → Domaines dans un autre onglet, prendre un sous-domaine gratuit, revenir au modal.
3
Étape 3 · Logo — uploader via Gestion distante + remplacer l'URL dans l'éditeur

Deux moitiés : (a) uploader le nouveau logo via Gestion distante ; (b) changer l'URL du logo dans l'éditeur de programmes.

(a) Upload du logo via Gestion distante

  1. Menu haut → Service → Gestion distante. Dans la liste de serveurs à gauche, sélectionner le domaine de votre projet forké (menu.sodam.kr). Le voyant doit être vert.
  2. Au centre, taper /public/assets dans la barre de chemin et Entrée.
  3. En bas, [Uploader un fichier] et choisir le logo (sodam_logo.png). Pas besoin d'archive pour un seul fichier.
  4. Vérifier dans le navigateur : https://menu.sodam.kr/assets/sodam_logo.png doit renvoyer 200 OK et afficher l'image.

(b) Remplacer l'URL dans l'éditeur

  1. Retour dans l'espace de travail → projet → Programmes. Liste des programmes (souvent main, menu_list).
  2. Double-clic sur celui qui affiche le logo (souvent main) → l'éditeur s'ouvre.
  3. Rechercher/Remplacer (Ctrl+H) : chercher l'ancien chemin, généralement /assets/menupan_logo.png.
  4. Rechercher menupan_logo.png, remplacer par sodam_logo.png, Tout remplacer. HTML et CSS d'un coup.
  5. Ctrl+S. Aperçu à droite : votre logo doit apparaître.
ASTUCE Logo nickel en aperçu mais perdu après déploiement ? 9 fois sur 10, problème de chemin absolu/relatif. Toujours commencer par un slash : /assets/sodam_logo.png. Les chemins relatifs (../assets/...) cassent sur les routes profondes.
4
Étape 4 · Contenu du menu — page admin (recommandé) ou éditeur de BD

menupan livre une page admin pour que le personnel ajoute / édite / supprime les plats. Deux voies, privilégiez fortement l'admin.

(Recommandé) page admin

  1. Aller à https://menu.sodam.kr/admin (ou le chemin défini par menupan) et se connecter. Les identifiants par défaut sont dans le README de la page de détails.
  2. Menu de gauche : Gestion du menu. Catégories (Café · Dessert · Sans café) et articles (Americano · Latte · …) en tableaux/cartes.
  3. Supprimer toutes les entrées de démo, puis ajouter votre carte ligne par ligne :
    • Nom (Americano) · prix (4500) · description (...) · catégorie (Café) · photo (URL d'une image uploadée via Gestion distante).
  4. Le quotidien — édition, ré-ordonnancement, bascule afficher/masquer — tout passe par là. Cette page est aussi pour le personnel du café.

(Alternative) Éditer directement la BD

  • Pour les opérations en masse non couvertes par l'admin (ex. +500 sur tous les cafés d'un coup) : Données → Base de données → le dataset créé au fork → Éditeur de cellules.
  • Sélectionner menu_item et éditer, ou en SQL : UPDATE menu_item SET price = price + 500 WHERE category='Café';. (Voir Best Practices → Éditeur de cellules · Coller dans la BD.)
  • Attention : modifier des colonnes inconnues à l'admin ou casser des PK/FK peut rendre l'admin inutilisable. C'est pourquoi le quotidien reste dans l'admin.
ASTUCE Pour les photos, le plus stable est de les uploader d'abord via Gestion distante et de coller l'URL dans l'admin. Même si l'admin a son propre uploader, un chemin unique (/assets/menu/*.jpg) facilite les sauvegardes et les migrations.
5
Étape 5 · Expérimenter le design — F12 Inspect pour changer couleurs et polices en direct

Avant de toucher au code, trouvez la couleur qui plaît dans le navigateur. Les modifications sont temporaires — un rafraîchissement les efface — donc on expérimente sans crainte.

  1. Ouvrir le menu publié (https://menu.sodam.kr) dans Chrome, F12 pour DevTools (ou clic droit → Inspecter).
  2. L'icône flèche dans un carré en haut à gauche (sélecteur d'élément) : la cliquer puis sélectionner la zone à recolorer (en-tête, fond de carte). À droite, le panneau Styles liste les règles CSS appliquées.
  3. Survoler une valeur de couleur (background-color: #2563eb;) : un petit carré apparaît. Le cliquer ouvre le color picker ; glisser ou taper un hex.
  4. font-family: ...; se modifie pareil : taper un autre nom ('Pretendard', 'Noto Sans KR', sans-serif).
  5. Quand la combinaison plaît, noter les codes hex et les polices. Étape 6 (IA) ou étape 7 (code) s'en serviront.

Astuces utiles :

  • Comparer plusieurs éléments — un changement d'en-tête « casse » le corps ? Ajustez les deux à la fois.
  • Onglet Computed — affiche la valeur réellement appliquée (avec héritage). Pratique pour traquer « d'où vient cette valeur ? ».
  • Forcer :hover — le bouton :hov au-dessus de Styles fixe :hover·:focus pour vérifier les couleurs hover.
ASTUCE Les modifs F12 disparaissent au rafraîchissement. Capture ou notes : « En-tête #6b4423, fond carte #f5ecd9, corps #3c2415, accent #c97a4a, police Pretendard 500 ».
6
Étape 6 · Demander à l'IA de meilleures couleurs et polices

Si la sélection de l'étape 5 ne convainc pas, demandez à l'IA ; vous obtenez 5 à 10 candidats d'un coup. Prompt type pour Claude / ChatGPT :

Je fais le tableau d'affichage du menu en magasin pour le café "Sodam".
Ambiance : « café coréen chaleureux et calme ».
Espace : décoration en bois, lumière jaune chaude.

Palette actuelle :
- Fond en-tête : #2563eb (bleu)
- Fond corps : #ffffff
- Texte : #1f2937
- Accent : #2563eb

Suggérez 5 jeux de palettes plus en phase avec cette ambiance.
Pour chaque jeu, donner les 4 hex (en-tête / fond corps / texte / accent)
et une ligne courte décrivant la sensation.

Aussi 3 polices Google (ou polices coréennes libres) bien lisibles
en coréen et adaptées à cette ambiance.

L'IA répondra en gros :

  • Jeu 1 (beige chaud · brun foncé) — en-tête #6b4423, fond #f5ecd9, texte #3c2415, accent #c97a4a · se fond naturellement avec bois et lumière chaude
  • Jeu 2 (minimal moderne) — …

Vérification des candidats :

  1. Retour à F12 (étape 5) : tester chaque hex un par un et choisir le jeu préféré.
  2. Les hybrides (« en-tête du 1, accent du 3 ») gagnent souvent. À noter aussi.
  3. Pour les polices : https://fonts.google.com, recherche, vérifier les glyphes sur votre menu.
ASTUCE Ne demandez pas « de jolies couleurs ». Donnez (1) ambiance/déco du lieu, (2) hex actuels, (3) sensation voulue (chaleureux/calme/haut de gamme…) — la qualité bondit. ~5 jeux à comparer suffit en général dès le premier tour.
7
Étape 7 · Reporter dans le CSS → enregistrer → déployer (avec « déploiement à la sauvegarde »)

Reporter le choix F12 + IA dans le vrai code. Après cela, le rendu survit au rafraîchissement et tous le voient.

  1. Espace de travail → projet → Programmes — double-clic sur le programme de design (souvent main ou theme).
  2. Onglet SCSS (ou CSS). Les variables couleur sont en général en haut du fichier ($primary-color, $bg-color …).
  3. Brancher les hex sur les variables :
    $header-bg: #6b4423;
    $body-bg: #f5ecd9;
    $text-main: #3c2415;
    $accent: #c97a4a;
  4. Pour la police coréenne, ajouter en tout début de SCSS @import url('https://fonts.googleapis.com/css2?family=Pretendard&display=swap'); et mettre font-family: 'Pretendard', sans-serif; sur body.
  5. Ctrl+S. L'aperçu en bas doit refléter le changement immédiatement.

Deux façons de publier

  • Option A — déploiement manuel (par défaut) : bouton 🚀 Déployer dans la barre haute. 1–2 min de build et de livraison ; menu.sodam.kr bascule sur le nouveau design. Sûr la première fois.
  • Option B — déploiement à la sauvegarde (parfait pour les itérations) : basculer la « sauvegarde = déploiement » dans la barre haute. Chaque Ctrl+S déclenche un déploiement. Idéal pour balayer rapidement couleurs / polices / menus en voyant le résultat en prod. À désactiver pendant les heures de service du café (clignotements en plein éditer).

Une fois déployé, ouvrir https://menu.sodam.kr sur smartphone et tablette pour la vérification finale. La même URL sur la tablette à l'entrée — c'est ce que verront les clients.

ASTUCE Avec « sauvegarde = déploiement » activé, un mauvais code envoyé en sauvegarde casse la prod un instant. Sur les gros changements, désactivez la bascule, vérifiez en aperçu, déployez une seule fois manuellement. La bascule ne sert qu'aux petits réglages couleur — c'est l'usage sain.

Block Builder × Programme Builder × liaison de données · un front piloté par JSON

Concevez un composant réutilisable (block) dans le Block Builder, glissez-le dans un slot de l'étape « list » du Programme Builder (a.k.a. Coder Builder) puis liez de vraies lignes d'un dataset à la variable de ce slot — c'est tout le procédé. Quand le schéma est dans la main, vous pouvez monter des écrans où une seule spécification JSON tient lieu de page frontend complète. Pour que le premier passage se déroule simplement, ce guide se limite à une seule page « liste de produits ».

Durée : 30–40 min

Anatomie en un coup d'œil — bibliothèque de blocks · slots du frame · dataset

Voyez le frame comme un cadre photo, les slots comme les encoches à l'intérieur, un block comme une photo mise en page, et le dataset comme l'album qui fournit le texte imprimé par-dessus — le reste s'éclaire tout seul. Glisser la photo dans le cadre, laisser couler les lignes de l'album sur la photo : c'est toute la besogne du jour.

Bibliothèque de blocks
Block en-tête
Liste de cartes produit
Carte d'avis
Block pied de page
dans le slot
Frame (cadre)
slot 1En-tête
slot 2★ Liste produits
slot 3Pied de page
lier à « list »
Dataset · table products
🍎 Pomme · 1500
🍌 Banane · 2000
🍇 Raisin · 3500
… 7 lignes de plus

Le chemin des données — pipeline en 4 étapes

1
Le block a un sample_data
2
On le glisse dans un slot du Programme Builder
3
On lie « list » au dataset
4
La page live se rend automatiquement
1
Scénario
2
Dataset
3
Block
4
Mode slot
5
Slots
6
Liaison
7
Codegen · déploiement
1
Étape 1 · Scénario et analogie — bâtir une page « liste de produits »

Au lieu d'écrire fetch() à la main et son v-for, il existe un schéma : prendre un composant déjà conçu (block), le glisser dans un slot d'un frame, brancher un dataset — la page est faite. Ce guide fait la boucle de bout en bout.

Encore l'analogie : un cadre photo vide (frame) reçoit des photos mises en page (blocks) ; un album (dataset) fournit le texte ; accrocher le cadre au mur, c'est le déploiement.

La page d'aujourd'hui — « la liste de produits de notre boutique » : un en-tête en haut, dix cartes au centre (vraies lignes du dataset), un pied de page en bas. Une page banale.

  • Un pas plus loin : sur des montages avancés, on relie 8 à 10 tables de dataset — cotations, news, classements — à plusieurs variables en même temps (list / list3 ... list10) et la page entière se rend depuis une seule spec JSON. Ce guide reste sur le premier point de couture : une variable (list) + un dataset (products).
  • Pourquoi ce schéma marche — le designer s'occupe seulement de l'apparence du block, le data ownerr du dataset, le responsable de la page de l'appariement des slots dans le Programme Builder. Les rôles se séparent proprement. Les données changent sans casser le design, et inversement.
ASTUCE Dites-vous « cette manche c'est juste les bases ». Si vous y greffez tout de suite catégories, recherche, pagination, vous perdez la trace au premier accroc. D'abord le cas minimum bout-en-bout, l'écran suivant ajoute la chair.
2
Étape 2 · Préparer le dataset — table products avec 5 à 10 lignes

D'abord les vraies données. Construire l'écran sur une table vide ne prouve rien. Données d'abord, écran ensuite, c'est la règle.

  1. Menu haut → Données → Base de données. Pas de dataset à vous ? [+ Nouveau dataset]. Ex. nom shop, MySQL/PostgreSQL.
  2. Dans son éditeur SQL (), créer la table :
    CREATE TABLE products (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), price INT, image_url TEXT);
  3. Ouvrir l' Éditeur de cellules sur products, ajouter 5 à 10 lignes. Coller depuis Excel (Ctrl+V) est le plus rapide (voir Best Practices → Éditeur de cellules · Coller pour insérer).
  4. Vérification rapide : SELECT * FROM products LIMIT 3;. À l'étape 6 ce dataset alimentera la variable list.

Quelles colonnes — uniquement celles que le block utilisera. name · price · image_url suffit. Plus, ça ne gêne pas, mais commencer simple accélère le débogage.

ASTUCE Selon la politique des datasets, l'écriture (et l'éditeur de cellules) demande un dataset à vous (user_id = vous). Les datasets publics d'autres comptes sont en lecture seule. Dans la liste, prenez ceux sans cadenas.
3
Étape 3 · Block Builder — créer le block « liste de cartes produit »

Maintenant le block qu'on glissera dans le slot. Menu haut → Design → Block (ou /layout/block) ouvre la bibliothèque. [+ Nouveau block].

  1. Nom — quelque chose de mémorisable comme product_card_list.
  2. Zone HTML — gabarit grille de cartes. Astuce : nommer la variable list :
    <div class="card-grid">
      <div class="card" v-for="item in list" :key="item.id">
        <img :src="item.image_url">
        <div class="name">@{{ item.name }}</div>
        <div class="price">@{{ item.price }}</div>
      </div>
    </div>
  3. Zone CSS/SCSS — grille basique :
    .card-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }
    .card { padding:14px; border:1px solid #eee; border-radius:8px; }
  4. sample_data — données factices en JSON, clé list :
    { "list": [
      {"id":1,"name":"Échantillon A","price":1000,"image_url":"/assets/sample.jpg"},
      {"id":2,"name":"Échantillon B","price":2000,"image_url":"/assets/sample.jpg"}
    ] }
  5. Enregistrer. La prévisualisation du Block Builder doit afficher automatiquement deux cartes depuis sample_data. Cette prévisualisation est la vérification critique. Si rien ne sort : vérifier que le nom de variable dans le HTML (list) correspond à la clé dans sample_data (list).
ASTUCE Voyez sample_data comme un placeholder que le dataset remplacera ensuite. Le designer termine le block sans dataset, et quand les données arrivent elles s'inscrivent naturellement. Garder le nom de variable du block (list) identique au nom de liaison ou non (avec mapping) — c'est la décision-clé des étapes 5–6.
4
Étape 4 · Programme Builder → étape list → passer en layout slot

La page (programme) maintenant. Service → Projet → [mon projet]+ Nouveau programme, ou ouvrir un programme existant dans le Programme Builder (Coder Builder). Même outil, deux noms. Huit onglets d'étape.

  1. Huit onglets — db · list · detail · search · hook · style · code · menu. On clique le second, list.
  2. Bascule de mode — en haut de l'onglet list, deux modes : « champs / slots ». Par défaut « champs » (table-like). On veut des blocks designés → on bascule en slots. L'UI passe en config en 3 étapes :
    • 1) Sélection du frame — quel cadre, combien de slots et leur disposition.
    • 2) Configuration des slots — quel block dans quel slot, comment mapper les variables.
    • 3) Aperçu du code — résultat synthétisé.
  3. Si « frame / slot » paraît abstrait : pensez « un cadre 3 rangées qui attend trois photos ». On choisit le frame à l'étape 5.
ASTUCE Repasser de slots vers champs peut faire perdre la config slot. Évitez les allers-retours — cette page se fait en mode slots jusqu'au bout.
5
Étape 5 · Choisir un frame, glisser le block carte produit dans le slot 2

Dans 1) Sélection du frame en mode slot, ouvrez la dropdown et choisissez quelque chose de simple — « 3-row (haut/milieu/bas) » convient. Frame choisi, [Appliquer], et 2) Configuration des slots crée automatiquement les lignes slot 1, slot 2, slot 3 …

  1. Au slot 2 (milieu), ouvrez la dropdown sélection du block et prenez product_card_list de l'étape 3. Les options s'affichent souvent en id - nom - auteur.
  2. Dès la sélection, l'aire du slot affiche la prévisualisation du block via sample_data — deux cartes. Si vous les voyez, le block est bien posé.
  3. Slot 1 (haut) et slot 3 (bas) : on peut y mettre les blocks header/footer préparés à l'avance, ou les laisser vides. Pour le premier passage, le slot 2 suffit.
  4. Chaque ligne de slot a aussi un data_placer (sélecteur source) et un data_selector (sélecteur cible). Pour l'instant les deux à list. Sens à l'étape 6.
  5. Le block est dans le slot, mais il fonctionne encore avec le sample. Le dataset réel arrive juste après.
ASTUCE Si le slot semble vide après avoir choisi un block, dans 9 cas sur 10 le sample_data du block est vide. Retournez à l'étape 3, remplissez sample_data, sauvegardez, rafraîchissez le Programme Builder.
6
Étape 6 · Lier le dataset à la variable list — le cœur

L'étape la plus importante. On câble la variable list du block sur les vraies lignes de la table products.

À quoi servent les deux champs :

  • data_placer (sélecteur source) — nom de variable tel qu'écrit dans le block. Notre block contient v-for="item in list", donc list.
  • data_selector (sélecteur cible) — nom de variable au niveau de la page. Avec deux listes de cartes sur une même page, list entrerait en collision ; on mappe vers product_list et review_list. Une seule liste ? list reste list.

Pour rester simple, on garde les deux à list.

Brancher le vrai dataset — section « variables de données / data_vars » en haut du Programme Builder (ou panneau latéral). Vide ? + Ajouter une ligne.

  1. Nom de variable : list (doit correspondre au data_selector de l'étape 5).
  2. Dataset : sélectionner shop de l'étape 2.
  3. Table : products.
  4. WHERE (optionnel) : vide = tout. Ex. price > 0.
  5. LIMIT (optionnel) : 0, 20 pour les 20 premières lignes.
  6. ORDER BY (optionnel) : id desc pour les plus récentes en premier.
  7. Enregistrer.

En interne, ça donne une fiche JSON (vous ne l'écrivez pas, mais conceptuellement) :

{"var_name":"list","dataset":{"id":42,"table_name":"products","str_limit":"0, 20","str_order":"id desc"}}

C'est la spec que suivra le moteur de rendu : à l'exécution il fera SELECT * FROM products ORDER BY id desc LIMIT 20, dépose les lignes dans list, et le v-for du block enchaîne.

ASTUCE La force de data_placer ≠ data_selector : un même block peut apparaître plusieurs fois sur une page. Une « recommandés » et une « nouveautés » réutilisent le même product_card_list, avec des data_selectors différents (recommend_list, new_list) reliés à des WHERE différents sur la même table products.
7
Étape 7 · Codegen → enregistrer → prévisualiser → déployer

Tout câblé ? Direction 3) Aperçu du code en mode slot (ou l'onglet code) pour laisser le système synthétiser le résultat.

  1. Générer le code (synchroniser). Le système assemble :
    • Squelette HTML du frame + HTML de chaque block dans <[slot-1]>·<[slot-2]>·…
    • À l'intérieur de chaque block, list → data_selector de l'étape 5 (toujours list ici).
    • Les définitions data_vars sont ajoutées à l'init de la page.
  2. Inspectez la sortie. v-for="item in list" intact, et en haut un list = await fetch('/api/...') ou injection serveur — c'est bon.
  3. Ctrl+S ou Enregistrer. La prévisualisation doit afficher les vraies cartes products. 5 à 10 cartes du dataset, plus seulement les 2 du sample_data.
  4. Final : 🚀 Déployer dans la workspace (ou « sauvegarde = déploiement » activé), vérification sur le domaine en ligne.

Pourquoi la spec JSON est le frontend — à ce stade, tout le comportement de la page tient en trois JSONs :

  • slot_info — quel frame + quels slots + quels blocks.
  • data_vars — chaque variable reliée à quel dataset, table, filtre.
  • ui_info — options UI supplémentaires (presque vide ici).

Plus de code à la main : ajustez ces trois JSONs et la page se redessine. Ça devient magique : faire 10 écrans s'approche du coût d'un seul, parce que chaque nouvel écran est surtout une nouvelle combinaison de blocks et de liaisons existants.

ASTUCE Prévisualisation vide ? Ordre de vérification : ① test de connexion du dataset (🔌) OK, ② noms de variables alignés entre block et data_vars (les deux list ?), ③ products contient bien des lignes, ④ WHERE pas trop strict (résultat 0). Presque toutes les prévisualisations vides cassent là.

Parseur avancé · Récupérer le cURL tel quel et boucler sur un dataset

Pour les sites où un simple GET ?q=... ne suffit pas — ceux qui exigent cookies, jeton CSRF, en-tête Authorization et un corps JSON POST — ce guide vous accompagne de A à Z : reproduire la requête du navigateur à l'identique, marquer les emplacements qui changent par ligne, et boucler l'appel N fois sur un dataset, en collectant les réponses dans une nouvelle table.

environ 25–35 min

Pipeline en un coup d'œil — requête navigateur → clone cURL → injection de variables → boucle

1
Capturer dans le
navigateur (F12)
2
Copy as cURL —
tout le paquet
3
Vérifier 1 fois
dans Postman
4
Marquer les
emplacements ${var}
5
Enregistrer la règle
+ boucle dataset

cURL ligne par ligne — URL · Cookies · En-têtes · Corps

Une requête de navigateur empile généralement quatre choses — URL/méthode, cookies de session, en-têtes auth/AJAX et un corps POST. Seules les parties qui varient par ligne deviennent des ${variables}; tout le reste reste tel quel.

curl -X POST 'https://example.com/api/search'
URL · Méthode Endpoint et GET/POST. Ne change généralement pas par ligne.
-H 'Authorization: Bearer eyJhbGc...' -H 'X-Requested-With: XMLHttpRequest'
En-têtes auth · AJAX Authorization Bearer, X-Requested-With, etc. En oubliez un, la réponse peut revenir vide.
--data-raw '{"q":"${query}","page":${page},"size":20}'
Corps POST · emplacements variables Aux endroits qui doivent changer par ligne (mot-clé, page), écrivez ${nom}.

La boucle en une image — lignes du dataset → substitution → réponses

Une ligne du dataset de gauche est injectée dans les emplacements ${variable} du modèle cURL au centre, et la réponse atterrit en nouvelle ligne dans le dataset de droite. 100 lignes en entrée → 100 appels automatiques, sans bouton à cliquer.

Dataset d'entrée (keyword_list)
query="meilleur croissant", page=1
query="café paris", page=1
query="café paris", page=2
... N lignes
${var}
injection
Modèle cURL (emplacements)
POST /api/search
{"q":"${query}",
"page":${page}}
+ cookies · en-têtes tels quels
réponse
stockée
Dataset de réponses (search_results)
query="meilleur croissant" → 20
query="café paris" → 20
query="café paris" p2 → 20
... total N×20 lignes
1
Scénario
2
Capture (F12)
3
Vérif Postman
4
Marquer variables
5
Préparer dataset
6
Enregistrer la règle
7
Exécuter + override
1
Étape 1 · Scénario — pourquoi ramener tout le cURL

Pour un site simple, une URL GET comme https://site.com/search?q=hello suffit. Mais plus de la moitié des sites du quotidien ne sont pas si simples.

  • Résultats visibles uniquement après login — sans cookie de session, on récupère une page vide ou l'écran de connexion.
  • POST + corps JSON — le mot-clé n'est pas dans l'URL, il vit dans le corps : {"q":"hello","page":1,"size":20}.
  • Jetons CSRF / Bearer — chaque requête a besoin d'un en-tête supplémentaire, sinon réponse vide.
  • X-Requested-With · Referer · User-Agent — sans ces marqueurs AJAX, le serveur répond souvent volontairement vide.

Recopier chaque en-tête à la main n'est pas raisonnable. Le chemin le plus rapide : copier la vraie requête du navigateur en une commande cURL d'une ligne, tout laisser comme capturé, et remplacer uniquement les morceaux qui varient par ligne par des variables.

Ce que nous allons construire — un dataset de N mots-clés (par ex. keyword_list), puis appeler N fois l'API de recherche du site et empiler les réponses dans un second dataset (par ex. search_results).

ASTUCE Reproduire un appel exactement, c'est la moitié du travail. Si un seul appel ne se reproduit pas, boucler 100 fois ne sert à rien. C'est pour ça que les prochaines étapes se concentrent uniquement sur « faire fonctionner un appel ».
2
Étape 2 · F12 → Copy as cURL — capturer la requête entière

Ouvrez le site cible dans Chrome (ou Edge) et lancez une recherche normale.

  1. F12 ouvre les DevTools, puis onglet Network.
  2. La recherche remplit la liste de requêtes. Celle qu'il faut contient en général search, list, query ou api dans son nom et renvoie du JSON.
  3. Cliquez la ligne, vérifiez dans le panneau Response à droite que le corps est bien les données voulues.
  4. Clic droit sur la ligne → Copy → Copy as cURL (bash). Même sous Windows : la version bash a le quoting le plus propre.

Votre presse-papiers contient maintenant une seule ligne du genre curl 'https://...' -H 'Cookie: ...' -H 'Authorization: ...' --data-raw '{...}'. C'est long, mais cela contient URL · cookies · tous les en-têtes · corps d'un coup.

ASTUCE Une seule recherche produit 10–30 entrées dans Network. Ignorez pubs, analytics et images ; cherchez celle dont la prévisualisation de réponse montre vos résultats. L'onglet Preview est le filtre le plus rapide.
3
Étape 3 · Rejouer dans Postman — vérifier l'appel unique

Ne collez pas le cURL directement dans le parseur. Confirmez d'abord dans Postman (ou Insomnia / Bruno) qu'un appel passe exactement. Si ça bloque ici, la règle de parseur bloquera aussi.

  1. Ouvrir Postman → en haut à gauche Import → onglet Raw text.
  2. Coller la ligne cURL avec Ctrl+V, cliquer Continue → Import.
  3. Un nouvel onglet de requête s'ouvre, en-têtes et corps préremplis. Cliquer Send en haut à droite.
  4. Statut 200 et corps identique au navigateur → c'est bon. Corps vide, 401, 403 ou 302 → vérifiez la liste ci-dessous.
  • Cookie expiré — la cause la plus fréquente. Retournez dans le navigateur, vérifiez que vous êtes encore connecté, puis F12 → Copy as cURL à nouveau.
  • En-tête perdu à l'import — Postman laisse parfois tomber 1–2 en-têtes. Ouvrez les Headers du navigateur et de Postman côte à côte et comparez ligne par ligne.
  • Referer / Origin — certains sites renvoient vide sans ces deux. Si le navigateur les envoie, ajoutez-les ici.
ASTUCE Le moment où Postman renvoie un beau 200, c'est la vraie ligne de départ. Sauvegardez la requête dans une collection Postman à ce moment-là — pour ne pas avoir à recapturer plus tard quand vous revenez voir les emplacements de variables ou la forme de la réponse.
4
Étape 4 · Marquer les variables — ${var} pour ce qui change par ligne

En regardant la requête Postman qui marche, marquez ce qui changera au prochain appel. Candidats classiques :

  • Mot-clé dans le corps POST"q":"hello""q":"${query}"
  • Page / offset"page":1"page":${page} (les nombres sans guillemets)
  • Catégorie / filtre"cat":"food""cat":"${category}"
  • Plage de dates"from":"2026-04-01""from":"${date_from}"
  • Variable dans le chemin URL/api/user/12345/api/user/${user_id}

L'astuce : nommer chaque variable exactement comme la colonne du dataset que vous allez créer. Si vos colonnes vont s'appeler query · page · category, écrivez aussi ${query} · ${page} · ${category} dans le cURL. Noms identiques → mapping automatique à l'étape suivante, sans câblage manuel.

Format — le parseur reconnaît le motif ${nom}. Lettres ASCII, chiffres et underscore uniquement (pas d'espaces, pas de caractères localisés, pas de ponctuation).

ASTUCE Ne variabilisez jamais ce qui doit rester fixe (cookies, jetons d'auth, en-têtes constants). Marquez uniquement les morceaux vraiment dynamiques par ligne. Les valeurs qui changent « de temps en temps » — comme un cookie qui expire — ne sont pas des variables, c'est un signal que la règle elle-même doit être rafraîchie.
5
Étape 5 · Construire le dataset d'entrée — keyword_list

Le parseur lit le dataset ligne par ligne et alimente les emplacements de variables du cURL. Donc dans cette étape, on prépare les N combinaisons d'entrée comme un dataset.

  1. Menu latéral Données > Datasets → en haut à droite + Nouveau dataset.
  2. Nom évident, par ex. keyword_list. Ajoutez des colonnes dont les noms correspondent exactement aux variables de l'étape 4 — par ex. query (varchar) · page (int) · category (varchar).
  3. Lignes au choix — (a) tapées dans l'UI une à une, (b) préparées dans Excel/Sheets puis collées via le Cell Editor en mode coller → insérer en BDD (voir guide cell-paste).
  4. Ne voyez pas trop grand. 3–5 lignes suffisent pour démarrer. À 100 lignes, une erreur = 100 appels foirés.

Pratique aussi de préparer dès maintenant le dataset de sortie. Par ex. search_results avec query, rank, title, url, snippet. Vous y pointerez le parseur à l'étape 6.

ASTUCE Si le nom de colonne diffère du ${variable} du cURL ne serait-ce que d'un caractère, le mapping automatique casse et il faut câbler à la main. Copiez le nom de variable de l'étape 4 et collez-le tel quel comme nom de colonne — c'est l'habitude la plus sûre.
6
Étape 6 · Enregistrer la règle de parseur — Page test · cURL · variables

Maintenant on crée la règle dans le parseur et on relie le cURL au dataset.

  1. Menu latéral Données > Parseur → en haut à droite + Nouvelle règle.
  2. Champ Page de test (URL de base) — collez l'endpoint du début du cURL, par ex. https://example.com/api/search. Si l'URL contient elle-même une variable, écrivez-la pareil : ${user_id}.
  3. Champ cURLCtrl+V sur la ligne avec variables marquées de l'étape 4. Le parseur sépare automatiquement méthode, en-têtes, cookies, corps, et trouve les motifs ${...} qu'il enregistre comme variables candidates.
  4. Choisir le dataset d'entréekeyword_list de l'étape 5. Les noms identiques se mappent tout seuls, les non-identiques affichent un dropdown de mapping à côté.
  5. Choisir le dataset de stockage des réponsessearch_results. Indiquez dans le champ JSON path quel chemin (par ex. data.items[*]) se déplie en une ligne.
  6. Sauvegarder. La règle est enregistrée — aucun appel n'a encore eu lieu.
ASTUCE Si après collage les en-têtes ne se séparent pas proprement, vérifiez si les guillemets externes sont simples ou doubles. Un cURL copié depuis cmd Windows utilise des doubles avec échappement backslash, et le parseur peut mal le découper. Recopiez avec Copy as cURL (bash) et le collage redevient propre.
7
Étape 7 · Exécuter + override — un test, puis la boucle complète

Deux modes d'exécution.

  • ① Override direct, un coup — sur la page de la règle, à côté du bouton ▶ Exécuter, le panneau saisie de variables permet de taper directement query="café paris", page=1 et de lancer un seul appel. Aperçu de la réponse et lignes extraites côte à côte. Restez dans ce mode tant que la forme de la réponse n'est pas pleinement comprise.
  • ② Boucle sur dataset — basculer le panneau de variables sur « Depuis dataset », choisir keyword_list de l'étape 5, cliquer Exécuter. La barre de progression monte de 0/N à N/N, les réponses s'ajoutent ligne par ligne à search_results.

Pendant l'exécution, surveillez — nombre d'erreurs (vide / 401 / 5xx), échantillon de réponse, lignes stockées. Une ou deux lignes en échec, c'est normal ; au-delà de 50 % d'échec, arrêtez immédiatement et revoyez le cURL.

Planification — l'onglet Schedule de la règle permet de lancer chaque jour, chaque heure, ou à n'importe quel horaire cron. Une liste de mots-clés en entrée → des résultats frais empilés tous les jours à la sortie.

ASTUCE Pour le tout premier vrai run, limitez le dataset d'entrée à 5 lignes ou moins. Cinq appels ne ressemblent pas à du trafic suspect côté site cible, le coût et le risque de blocage restent faibles. Quand 5 lignes passent à 100 %, montez à 50, puis 500.

Gestion distante · Base

Parcours complet : récupérer auprès du designer un lot d'assets (images, logos, polices, CSS), le téléverser sur le serveur déployé, puis le référencer depuis un projet single-file jusqu'à ce que les assets s'affichent réellement dans le navigateur. Aucun client FTP nécessaire — tout se fait dans le navigateur.

Durée estimée : 10 à 15 min
1
Zipper les assets
2
Choisir le serveur
3
Ouvrir le dossier
4
Téléverser l'archive
5
Référencer dans single-file
6
Aperçu & déploiement
1
Étape 1 · Regrouper les assets dans un seul zip

Avant de téléverser, emballez tout ce que le designer a fourni dans une seule archive zip. La façon de zipper détermine les chemins sur le serveur — respectez ces règles.

  • Emballez le tout dans un dossier racine unique — par ex. mettez images et css dans design_assets/, puis zippez ce dossier lui-même. Après extraction vous obtiendrez /chemin-cible/design_assets/logo.png, le nom du dossier restant sur un niveau.
  • Nommez uniquement avec lettres, chiffres, trait d'union (-) et soulignement (_) — les espaces ou caractères non ASCII cassent facilement les références d'URL. Exemple : bannière principale.png ❌ → main-banner.png
  • Formats pris en charge — .zip · .tar · .tar.gz · .tgz. En général .zip suffit. Sous Windows, clic droit sur le dossier → « Compresser au format ZIP » ; sur macOS, dans Finder, clic droit → « Compresser ».
  • Exemple d'arborescence
    design_assets/
     ├─ images/logo.png
     ├─ images/hero.jpg
     ├─ fonts/pretendard.woff2
     └─ css/theme.css
ASTUCE Pour référencer directement images/logo.png, construisez le zip sans l'enveloppe extérieure et placez les sous-dossiers (images, fonts, css) au niveau supérieur. Choisissez une convention et gardez-la dans tout le projet.
2
Étape 2 · Ouvrir la gestion distante et choisir le serveur cible

Depuis la barre de navigation supérieure ou le tableau de bord, allez dans Services → Gestion distante. La liste des serveurs est à gauche, l'explorateur de fichiers à 4 colonnes au centre, la barre d'actions en bas.

  1. Dans la liste à gauche, cliquez le domaine cible (par ex. myshop.apidealder.net). Le petit cercle indique l'état.
    • Point vert — prêt ; la liste de fichiers s'ouvre immédiatement.
    • Point gris — hors ligne. Le conteneur est arrêté ou non encore déployé.
    • Point blanc — vérification de l'état en cours.
  2. Si la liste est vide, le message « Déployez d'abord un serveur » apparaît. Déployez alors un single-file ou un projet avant de revenir.
  3. Une fois sélectionné, le centre affiche la racine (/) et l'arborescence réelle.
ASTUCE Si le point gris/blanc persiste, patientez 1 à 2 minutes puis réessayez. Un conteneur inactif depuis un moment met un instant à se réveiller.
3
Étape 3 · Aller vers le dossier cible (un dossier public)

Les assets seront chargés par le navigateur via URL, ils doivent donc vivre dans un dossier accessible publiquement. Sur les serveurs à base single-file, on utilise généralement public/assets.

  • Barre de chemin — l'icône maison en haut revient à la racine ; chaque segment entre les slashes est cliquable pour y sauter directement.
  • Saisie directe du chemin — dans le champ adjacent, tapez /public/assets puis Entrée pour y atterrir en un seul geste.
  • Si le dossier assets n'existe pas — utilisez [Nouveau dossier] dans la barre d'actions en bas pour créer assets, puis entrez dedans. Seuls lettres, chiffres, point (.), trait d'union (-) et soulignement (_) sont autorisés.
  • Après le déplacement, vérifiez que la barre de chemin affiche /public/assets. C'est là que l'archive sera décompressée — un mauvais emplacement impose suppression et nouvel envoi.
ASTUCE La racine (/) et les dossiers système (/etc, /var/log) ne sont pas servis en HTTP. Avant d'envoyer, visualisez toujours mentalement : « https://votre-domaine/assets/votre-fichier est-il atteignable depuis cet emplacement ? »
4
Étape 4 · Téléversement et extraction automatique via la modale

Avec le chemin sur /public/assets (ou tout autre dossier public), cliquez [Téléverser l'archive] (icône nuage + flèche haut) dans la barre d'actions du bas. La modale s'ouvre en trois phases.

  1. Zone de dépôt — glissez-déposez le zip dans le cadre pointillé ou cliquez pour ouvrir le sélecteur de fichiers. .zip · .tar · .tar.gz · .tgz sont pris en charge.
  2. Aperçu — la modale dessine l'arborescence des dossiers/fichiers dans l'archive et affiche en haut le nom, la taille et la cible d'extraction (/public/assets). Vérifiez que l'enveloppe extérieure est correcte et qu'aucun fichier caché intrus (.DS_Store de macOS, etc.) ne s'est glissé. Le [x] en haut à droite permet de changer de fichier.
  3. Envoi — cliquez [Envoyer]. Le fichier est envoyé par morceaux de 1 Mo avec une barre de progression en direct ; les réseaux capricieux reprennent proprement et les gros fichiers (centaines de Mo) passent de façon stable.
  4. Une fois le transfert terminé, le serveur décompresse automatiquement l'archive, le dossier courant se rafraîchit, le design_assets nouvellement envoyé (ou images/fonts/css) apparaît. Un toast de fin confirme l'opération.

Besoin d'envoyer quelques fichiers isolés plutôt qu'une archive ? Le bouton voisin [Téléverser des fichiers] permet la sélection multiple — ils sont copiés tels quels dans le dossier courant, sans extraction.

ASTUCE Fermer la modale ou changer d'onglet pendant l'upload interrompt le transfert. Pour les gros fichiers, laissez la fenêtre ouverte et travaillez dans un autre onglet jusqu'à l'apparition du toast de fin.
5
Étape 5 · Référencer les assets téléversés depuis un projet single-file

Les fichiers téléversés sont servis directement depuis le domaine déployé. Par exemple, si vous avez envoyé /public/assets/design_assets/images/logo.png sur myshop.apidealder.net, l'URL du navigateur est https://myshop.apidealder.net/assets/design_assets/images/logo.png. (public est la racine web et disparaît de l'URL.)

Ouvrez maintenant l'éditeur single-file (Services → Single File) et référencez les assets téléversés.

  • Insérer des images dans l'onglet HTML
    <img src="/assets/design_assets/images/logo.png" alt="logo">
    <img src="/assets/design_assets/images/hero.jpg">
  • Référencer arrière-plans et polices dans l'onglet SCSS
    .hero { background: url("/assets/design_assets/images/hero.jpg") center/cover; }
    @font-face { font-family: 'Pretendard'; src: url("/assets/design_assets/fonts/pretendard.woff2") format('woff2'); }
  • Règle clé — utilisez toujours un chemin absolu commençant par /. Les chemins relatifs (../assets/...) peuvent se comporter différemment entre l'aperçu et la production et sont à éviter.
  • Pour inclure un CSS externe en entier, ajoutez @import url("/assets/design_assets/css/theme.css"); en haut de l'onglet SCSS.
ASTUCE Une erreur d'un seul caractère et l'aperçu affiche l'icône d'image cassée (📷✗). Ouvrez les DevTools (F12) → onglet Network et vérifiez que la requête ne renvoie pas 404. Les noms de fichiers doivent correspondre exactement, casse comprise — Windows/macOS sont indulgents, les serveurs Linux stricts.
6
Étape 6 · Aperçu Run et vérification sur le domaine déployé

Une fois les références câblées, cliquez [Run ▶] en haut à droite de l'éditeur single-file pour voir l'aperçu. Si tout va bien, appuyez sur [Deploy 📦] pour pousser sur le domaine.

  1. Aperçu Run — le panneau de droite rend le résultat en temps réel. Vérifiez que les images apparaissent, que les polices se chargent, que le CSS n'est pas cassé.
  2. Deploy — le bouton lance un déploiement étape par étape, en 1 à 2 minutes en général. Un lien vers le domaine apparaît dans la zone de résultat à la fin.
  3. Vérification sur le domaine déployé — ouvrez le lien dans un nouvel onglet ou allez directement sur https://votre-domaine/. Faites un rechargement forcé (Ctrl+F5 ou Cmd+Shift+R) pour ignorer le cache.
  4. Si une image n'apparaît pas, revenez à la gestion distante et revérifiez le chemin. Si la structure extraite ne correspond pas à ce que vous attendiez, supprimer le dossier et réenvoyer depuis l'étape 4 est plus rapide que corriger les chemins à la main.
ASTUCE Pour changer un asset plus tard, il suffit d'écraser le fichier via la gestion distante — pas de redéploiement du projet single-file. Conservez le même nom pour que le navigateur capte le changement ; en cas de doute sur le cache, renommez (logo.pnglogo_v2.png) et mettez à jour la référence.

Gestion distante · Avancé

Marche à suivre pratique lorsqu'un programme sur le serveur déployé ne se comporte pas comme prévu. Vous allez utiliser le panneau terminal — directement dans le navigateur — pour lancer des outils CLI comme grep, cat et tail contre les fichiers de storage/logs, afin de trouver la cause. Pas de client SSH, pas d'outil de bureau — juste l'outil distant.

Durée estimée : 10 à 20 min
1
Identifier le cas
2
Ouvrir le terminal
3
Aller dans logs
4
Parcourir les fichiers
5
Cibler avec grep
6
Corriger & re-vérifier
1
Étape 1 · Reconnaître quand lire les logs

Les symptômes en surface se ressemblent, mais les causes varient. Dans l'un de ces cas, lire les logs côté serveur est la voie la plus rapide.

  • Erreurs serveur 500 / 502 / 504 — le navigateur affiche seulement « Une erreur est survenue » ; la vraie cause vit dans le log serveur.
  • Page blanche — généralement une erreur fatale PHP qui a coupé la sortie. Le log contient très probablement une ligne Fatal Error ou Parse Error.
  • API qui renvoie 400/422 avec une cause floue — la règle de validation exacte qui a bloqué est consignée dans le log du contrôleur.
  • Tâches d'arrière-plan (queue, planificateur, macro) « qui semblent tourner sans résultat » — les échecs silencieux laissent des traces uniquement dans le log.

Principaux fichiers de log à consulter :

  • storage/logs/laravel.log — le log principal PHP/Laravel. Le plus souvent consulté.
  • storage/logs/laravel-YYYY-MM-DD.log — si la rotation quotidienne est activée.
  • storage/logs/worker.log et les logs spécifiques à une fonctionnalité (macros, parseurs) quand ces sous-systèmes tiennent leurs propres fichiers.
ASTUCE Avant de plonger, notez une fenêtre temporelle approximative (par ex. « vers 15 h 40 en cliquant sur Commander »). Filtrer le log sur cette fenêtre fait gagner un temps considérable.
2
Étape 2 · Ouvrir la gestion distante, sélectionner le serveur, déplier le terminal

Dans le navigateur, direction Services → Gestion distante.

  1. Dans la liste des serveurs à gauche, cliquez le domaine concerné. Point vert = conteneur joignable. Point gris/blanc = conteneur endormi — attendez une minute et réessayez.
  2. Cliquez l'icône terminal (▷_) dans la barre d'outils centrale. Un panneau terminal monte depuis le bas. Re-cliquer la même icône le replie.
  3. L'entête affiche le répertoire de travail courant (par ex. /var/www/html) et le curseur clignote dans la zone de saisie. Ce curseur est branché directement sur le shell du serveur sélectionné ; les commandes tapées s'exécutent là.
  4. Situez-vous d'abord :
    pwd
    ls
    Vous atterrissez généralement à la racine du projet (/var/www/html).
ASTUCE Le conteneur tourne sur un léger Alpine Linux, donc le shell par défaut est /bin/sh, pas bash. La syntaxe propre à bash ([[ ... ]], tableaux) peut ne pas fonctionner. Les commandes de base — cd · ls · cat · grep · tail · head — passent sans souci.
3
Étape 3 · Aller dans storage/logs

Dans un projet Laravel, les logs vivent dans storage/logs. Depuis le terminal, on y saute.

  • cd storage/logs — relatif au dossier courant ; une ligne suffit si vous êtes déjà dans /var/www/html.
  • cd /var/www/html/storage/logs — chemin absolu ; fonctionne d'où que vous soyez.
  • pwd — confirmez être dans /var/www/html/storage/logs.

Le terminal se souvient du répertoire de travail, donc toutes les commandes suivantes s'exécutent par rapport à ce dossier — pas besoin de retaper le chemin.

Alternative : allez d'abord sur /storage/logs dans l'explorateur, puis ouvrez le terminal — le chemin suit automatiquement. Pratique si vous n'aimez pas saisir des chemins.

ASTUCE Si le dossier manque ou si « No such file or directory » apparaît, le serveur n'est peut-être pas basé sur Laravel. Remontez d'un cran (cd ..) et ls pour repérer l'emplacement réel (log/, logs/, /var/log/nginx/).
4
Étape 4 · Parcourir les fichiers de log (ls · cat · tail · head)

Une fois dans le dossier, regardez d'abord quels fichiers existent et lesquels ont été modifiés récemment, puis ouvrez leur contenu.

  • ls -lhrt — listing trié par date de modification croissante ; le plus récent est en bas. -h affiche des tailles lisibles (Ko/Mo).
  • cat laravel.log — affiche tout le fichier. Sûr seulement pour les petits fichiers ; plusieurs Mo saturent le terminal.
  • tail -n 100 laravel.logles 100 dernières lignes. Le moyen le plus rapide de voir l'erreur la plus récente. Ajustez le nombre.
  • tail -f laravel.logsuivi en direct. Les nouvelles lignes apparaissent dès qu'elles sont écrites ; reproduisez le bug dans le navigateur et regardez les entrées défiler. Arrêt par Ctrl+C.
  • head -n 50 laravel.log50 premières lignes ; utile pour les entrées de démarrage en tête de fichier.
  • wc -l laravel.log — nombre total de lignes. Au-delà de centaines de milliers, passez directement à grep.
ASTUCE Si un log dépasse plusieurs centaines de Mo, mettez-le de côté avec mv laravel.log laravel.log.old et laissez un fichier neuf se créer. Reproduire le bug contre un fichier vide donne un signal propre sans perdre l'ancien log.
5
Étape 5 · Cibler avec grep

Quand le fichier est long, tail seul ne suffit pas. grep imprime uniquement les lignes contenant un motif donné — l\'outil-clé du débogage par log.

  • grep -i error laravel.log — toutes les lignes contenant « error » ; -i rend la recherche insensible à la casse, donc « Error », « ERROR » et « error » matchent.
  • grep -in "fatal\|exception" laravel.log — lignes avec « fatal » ou « exception », avec numéros de ligne (-n). Plusieurs motifs se combinent en OR avec \|.
  • grep -A 5 -B 2 "SQLSTATE" laravel.log — trouve les lignes contenant SQLSTATE et imprime 2 lignes avant (-B 2) et 5 après (-A 5) comme contexte. Idéal pour voir la stack trace à côté de l\'exception.
  • grep "2026-04-25 15:4" laravel.log — restreint à une fenêtre horaire (plage 15 h 40). Combiné à la fenêtre de l\'étape 1, la recherche se resserre rapidement.
  • grep -c "production.ERROR" laravel.log — n\'imprime que le nombre de correspondances. Utile pour « à quelle fréquence cela arrive ».
  • tail -f laravel.log | grep -i errorsuivi en direct + filtre. Seules les lignes contenant « error » passent à l\'écran.

Flux typiquegrep -i error pour la vue d\'ensemble → choisir un message saillant et rejouer grep -A 10 "ce message" pour le contexte → noter les chemins de fichiers et numéros de lignes qui en sortent.

ASTUCE Si la sortie reste trop volumineuse, pipez dans less (grep ... | less) pour une navigation page à page, ou dans un fichier (grep ... > /tmp/out.txt) puis ouvrez-le dans l'éditeur de code de la gestion distante. less est disponible d'origine sur Alpine.
6
Étape 6 · Corriger le code et revérifier avec les logs

Les lignes d\'erreur relevées par grep portent en général un chemin de fichier et un numéro de ligne (par ex. /var/www/html/app/Services/Order.php:127). Utilisez-les pour aller droit au correctif.

  1. Repliez le terminal, collez /var/www/html/app/Services dans le champ de chemin de l\'explorateur et tapez Entrée.
  2. Double-cliquez sur le fichier cible pour l\'ouvrir dans l\'éditeur avec coloration syntaxique. Corrigez la ligne, appuyez sur [Enregistrer] — l\'effet est immédiat, sans redéploiement.
  3. Rouvrez le terminal, lancez un suivi en direct avec tail -f /var/www/html/storage/logs/laravel.log, puis reproduisez le bug dans le navigateur.
  4. Si la même erreur ne revient pas, Ctrl+C et c\'est fini. Si une autre apparaît, retour à l\'étape 5 pour affiner.

Quand il faut du log de debug temporaire — ajoutez une ligne \Log::info('[debug] ' . json_encode($variable)); dans le code suspect, enregistrez, reproduisez, puis relisez la valeur avec grep "[debug]" laravel.log. Une fois la cause comprise, retirez la ligne Log::info(). C\'est la manière la plus sûre.

ASTUCE Supprimez ou commentez toujours les appels de débogage Log::info, dd(), var_dump() une fois le travail fini. Sinon le log enfle à chaque requête réelle, et un dd() oublié transforme la fonctionnalité en page blanche.

Défi final · Travailler dans VS Code avec l'IA (Claude/Codex via MCP) puis déployer Local → Stage → Production

Le guide d'aboutissement où tout ce que vous avez appris se rencontre. Demandez à Claude ou Codex (connecté via MCP) des modifications en langage naturel directement dans VS Code, vérifiez d'abord sur votre serveur de test local. Une fois satisfait, un seul bouton synchronise code et BDD vers un serveur stage pour vérifier dans des conditions proches de la production, et enfin déploie en production. Le workflow standard de l'industrie, parcouru de bout en bout.

environ 30–45 min

Un cycle de travail — éditeur VS Code ⇄ Claude/Codex (MCP) ⇄ aperçu local

À l'époque où l'IA écrit le code, le rôle humain devient « formuler précisément + vérifier rigoureusement ». Vous tapez la demande en langage naturel dans le panneau de chat de VS Code, Claude/Codex lit et modifie les fichiers du projet directement via MCP, et le changement apparaît instantanément dans le navigateur grâce au vite dev / php artisan serve déjà lancé. Vous confirmez l'intention et envoyez la demande suivante.

VS Code (vous)
Editor Chat Panel

Demande en langage naturel (par ex. « ajoute une colonne phone à la table users et une ligne au formulaire d'inscription »). Vous voyez le résultat dans le navigateur, vous enchaînez la demande suivante.

demande
(langage naturel)
modif de code
appliquée
Claude / Codex (agent IA)
MCP Read · Edit · Run

Lit et modifie les fichiers du projet directement via MCP — migrations SQL, modifs blade/vue/scss, commandes de build, le tout en un seul passage. Vous regardez le résultat, pas le clavier.

Pipeline de déploiement 3 étages — Local → Stage → Production

Une modification locale ne va pas tout droit en production. Une stage intermédiaire — domaine/BDD/trafic proches de la prod — capture les régressions du genre « ça marchait chez moi ». Un seul clic sur [SRC → DST] dans QS DEPLOY = un changement d'étage, et il transporte code + assets + BDD ensemble.

Test local L
  • vite dev + php artisan serve sur votre PC
  • sauvegarder → rafraîchissement en une seconde
  • endroit le plus rapide pour valider ce que l'IA vient de changer
[SRC → DST] code + assets + BDD
Serveur Stage stage
  • même domaine/BDD que la prod (autre hôte)
  • tests de régression sur des données quasi réelles
  • partager le lien pour relecture
[SRC → DST] code + assets + BDD
Production main
  • le serveur main que les vrais utilisateurs voient
  • Save on Deploy protège contre les fichiers non sauvegardés
  • après déploiement, surveiller les logs → SWITCH permet un rollback rapide
1
Scénario
2
Préparer VS Code
3
Demander à l'IA
4
Test local
5
Sync vers Stage
6
Vérifier Stage
7
Déployer en prod
1
Étape 1 · Scénario — pourquoi diviser en Local / Stage / Prod

Presque toutes les équipes de dev sérieuses suivent ce flux. De petits changements, vérifiés à chaque étape. Lancer un changement directement en prod, c'est casser la prod d'un coup.

  • Local est rapide. Sauvegarder → rafraîchir, une seconde. Premier endroit où vous confirmez que la modif correspond à l'intention.
  • Stage reflète le domaine/BDD/trafic de la prod. Dernier filet pour les surprises « ça marchait chez moi ».
  • Prod est ce que voient les vrais utilisateurs. Un problème découvert ici devient une plainte client.

Aujourd'hui on parcourt les trois étages d'un bout à l'autre. Le travail effectif passe par des demandes à Claude ou Codex dans VS Code en langage naturel. Votre rôle n'est plus de taper ligne par ligne, mais de formuler clairement, vérifier le résultat et décider si on peut envoyer plus loin.

ASTUCE Ne ficelez pas trop de changements dans un même push vers stage/prod. Beaucoup de petits pushes sont toujours plus sûrs qu'un énorme. Dix modifs d'une ligne sont bien plus simples à debugger qu'une de cent lignes.
2
Étape 2 · Préparation VS Code — téléchargement du paquet → auth .env → Smart Setup

Cinq minutes une fois, et tout le reste de la journée va plus vite.

  1. Sur QuickStart Web, ouvrir Télécharger le paquet de votre projet, dézipper, dans VS Code File > Open Folder.
  2. Le panneau QUICKSTART en bas apparaît automatiquement. L'authentification est silencieuse — l'empreinte du .env connecte sans formulaire de login.
  3. Onglet UTIL → tout en bas [🚀 SMART SETUP]. Lance composer dump-autoload → npm install → vite build à la suite. À la fin, vite dev et le serveur PHP intégré sont tous deux en route.

Ouvrez http://localhost:<port> — votre projet tourne. Voilà la ligne de départ.

ASTUCE Smart Setup, c'est une fois par dossier. Quand vous rouvrez le même dossier plus tard, il suffit que vite dev tourne ; pressez à nouveau Smart Setup uniquement quand les dépendances changent.
3
Étape 3 · Demander à l'IA — Claude/Codex (MCP) en langage naturel

Deux voies, généralement utilisées ensemble.

  • ① Panneau de chat VS Code + MCP — branchez Claude (ou Cursor / Copilot Chat / Codex CLI) sur un serveur MCP du projet. Dans le chat : « ajoute une colonne phone à la table users et une ligne au formulaire d'inscription ». L'IA écrit le SQL, modifie blade/vue/scss et lance le build, en un seul passage.
  • ② Boutons IA de l'onglet UTIL — sélectionnez du code et cliquez UTIL → groupe IA → [CODE REVIEW] · [REFACTOR] · [EXPLAIN] · [i18n TS]. Chacun construit un prompt riche en contexte projet à coller dans Claude/Codex pour une réponse plus fine.

Bien rédiger une demande — soyez précis sur « quoi, où, sous quelle forme ». Exemple : « Sur /admin/users, montrer la colonne phone juste après email ; afficher \"-\" quand vide. » Avec ça l'IA ne se perd pas.

ASTUCE Ne demandez pas à l'IA d'énormes changements d'un coup. Découpez en unités de 3–5 minutes que vous pouvez vérifier ; finissez une, demandez la suivante. Surtout les changements de schéma BDD, un à la fois.
4
Étape 4 · Test local — boucle « sauvegarder → rafraîchir » de 1 seconde

Au moment où l'IA sauvegarde, vite dev fait du hot-reload du navigateur. Presque tous les .blade.php·.scss·.vue·.js se rafraîchissent à la sauvegarde ; les changements PHP sont pris par php artisan serve.

  1. Regardez le vrai écran — bonne place, bon comportement, bonne forme ?
  2. Coup d'œil rapide à la console F12 — pas d'erreur rouge avant de continuer.
  3. UTIL → SYSTEM → [CLEAN CACHE] vide le cache view/route de Laravel pour que les changements de template/config arrivent proprement.

Pas bon → courte demande IA suivante : « déplace cette colonne phone au-dessus du code postal » — puis rafraîchir. En rythme, un tour en moins d'une minute, c'est la cadence normale.

ASTUCE Si quoi que ce soit semble même un peu suspect en local, ne poussez pas vers stage. Un problème non capté en local se capte rarement en stage, et certainement pas en prod.
5
Étape 5 · Sync vers stage — un clic [SRC → DST]

Local validé → push vers stage.

  1. Onglet QS DEPLOY en bas.
  2. Barre latérale gauche : Source = L (Local), cocher Destination = stage.
  3. Sur chaque nœud, cliquer [CONNECT] et [TEST CONFIG] une fois — confirmer la connexion réelle. Point rouge → vérifier le .env du nœud (host/port/compte BDD).
  4. Cliquer le [SRC → DST] central. Côté droit, vérifier que [Save on Deploy] est ON — si ON, tous les éditeurs ouverts se sauvegardent avant le déploiement.
  5. La visionneuse de log montre en direct code + assets (images/build) + schéma & données BDD partir vers stage en un seul passage.

Une fois fini, ouvrir le domaine stage et vérifier non seulement le changement de code mais aussi que la nouvelle colonne phone est bien dans la BDD stage.

ASTUCE [TEST CONFIG] doit passer une fois au premier push stage. Ensuite, [SRC → DST] est un clic. Carte de nœud rouge → réparer le .env de ce nœud (host/port/compte BDD).
6
Étape 6 · Vérification stage — DIFF · BROWSER · régression

Stage est le miroir de la prod. Seul le domaine diffère ; le code et la BDD sont exactement ce qui va partir.

  • Aller sur le vrai domaine stage et utiliser le changement vous-même. Cache, CDN, sessions — les soucis qui se cachent en localhost ressortent ici.
  • Partager le lien à quelqu'un d'autre. Il voit ce que vous ne voyez plus parce que c'est vous qui l'avez écrit.
  • QS DEPLOY → [DIFF] compare stage ↔ local. Des différences signifient que quelqu'un a touché stage à la main — nettoyer avant le déploiement prod.
  • [BROWSER] ouvre l'arborescence réelle de stage pour inspecter un fichier suspect.

Régression trouvée → retour local, redemander à l'IA → étape 4 → si OK, retour étape 5. Un tour de plus ici coûte radicalement moins qu'un incident en prod.

ASTUCE Ne traitez pas stage comme un « passage obligé ». Ce que vous ne capturez pas ici, les utilisateurs réels le capturent pour vous. Le facteur de coût est 100×.
7
Étape 7 · Déploiement prod — Save on Deploy ON, cliquer [SRC → DST]

Stage validé → étape finale. Mêmes boutons qu'à l'étape 5, mais les vrais utilisateurs voient immédiatement.

  1. QS DEPLOY → Source = stage (ou L avec le même code), Destination = main (nœud de prod).
  2. Reconfirmer que [Save on Deploy] est ON. Le tenir toujours ON est le défaut sûr.
  3. Cliquer [SRC → DST]. Rester sur la visionneuse de log jusqu'à la fin — au moindre 5xx ou ligne rouge, on arrête.
  4. Ouvrir le domaine prod. Refaire la nouvelle fonctionnalité, plus les flux clés non touchés (login, paiement, etc.) — confirmer qu'ils marchent toujours.
  5. Si quelque chose cloche, [SWITCH] échange Source/Destination et l'état précédent de stage repart vers la prod — c'est votre rollback rapide.

Un tour complet bouclé — VS Code → Claude/Codex(MCP) → Local → Stage → Prod. Toutes les modifs futures empruntent le même rail, juste plus vite.

ASTUCE Après un déploiement prod, passez 10–30 min à surveiller : logs d'erreurs, courbe de trafic, temps de réponse des pages clés. C'est la fenêtre la plus risquée et la plus visible. Ne sautez pas tout de suite à la tâche suivante.