← Retour à la page d'accueil

Fonctionnement technique

Comment l'app hors ligne, l'API du CRM et la capture de leads fonctionnent ensemble — plus ce que l'app contient déjà.

1. Formulaire de capture de leads Prêt

Le formulaire de demande publie directement vers l'API LeadIntake du CRM — sans serveur intermédiaire.

Formulaire (testwebsite/index.html)

<!-- POST via fetch → https://launcherp.be/api/v1/leads -->
{
  "name":      "...",        // nom
  "email":     "...",        // e-mail (obligatoire)
  "company":   "...",        // société
  "plan":      "hidden",     // plan choisi (depuis prijzen.html)
  "source":    "salesonipad" // source → le lead est tagué dans le CRM
}

✓ Le champ honeypot website filtre les bots. ✓ Erreur réseau → message clair, aucun lead perdu.

Côté CRM (Laravel)

// config/cors.php
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_origins' => [env('APP_URL'), 'https://salesonipad.com'],

// bootstrap/app.php — exception CSRF pour le endpoint de leads
->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(except: ['api/v1/leads']);
})

✓ Le LeadIntakeController existant traite les données ; aucun nouveau backend nécessaire.

2. Dataflow & sync Existant

L'app se synchronise déjà avec l'API du CRM via les mêmes schémas que les commandes. Ces modules tournent et doivent simplement être connectés.

Sync 2-way des leads — scripts/leads.js

Sync 2-way des opportunités — scripts/opportunities.js

Avoirs — pdf.js: creditNotaFromFactuur

Delta-sync — scripts/novasync.js

3. Sécurité & données

Ce qui se passe sur l'iPad et dans le CRM.

ComposantFonctionnement
Protection PINVerrouille l'app contre toute utilisation non autorisée
Sauvegarde DropboxOAuth 2.0 PKCE — sauvegarde en un geste, restauration ultérieure sur le même iPad ou un nouveau
File d'attente hors ligneLes commandes en attente survivent à un redémarrage ; file de sauvegarde séparée
Prêt pour PeppolLes champs d'e-facturation sont présents ; le module CRM génère l'e-facture UBL en téléchargement. L'envoi via un point d'accès Peppol n'est pas encore opérationnel.
PWA / hors ligneLe service worker met en cache l'application complète — fonctionne sans réseau
🌐 Installation PWA

L'app est une Progressive Web App : les représentants l'installent sur leur iPad sans App Store et elle fonctionne entièrement hors ligne.

4. Architecture du bundle Design

La combinaison utilise la sync existante — aucune nouvelle infrastructure.

Flux

1. Compte CRM créé (paiement Stripe)
2. Licence SalesOnIPad liée à l'entreprise CRM
3. L'app sait via la config quel endpoint de sync utiliser
4. La sync s'exécute automatiquement — les utilisateurs voient « synchronisé » dans l'app
5. Résilier le CRM = la sync s'arrête ; l'app continue de fonctionner localement
🔌 Aucun nouveau code nécessaire

Les commandes, leads, opportunités et avoirs utilisent déjà le même schéma de sync. Le module Vente sur le terrain les connecte au tableau de bord du CRM.

5. Roadmap

Ce qu'il reste à faire pour mettre l'intégration en ligne.

ÉtapeTravailStatut
1. Capture de leads en lignePoster le formulaire vers l'API + CORSPrêt (testwebsite)
2. Module Vente sur le terrainActiver les modules CRM + prixÉtape suivante
3. Connecter la syncConnecter les endpoints par clientPilote
4. Upsell au paiementStripe + page de bienvenueExtension

Curieux de voir à quoi cela ressemble sur l'iPad ?

Voir le flux de données Demander une démo