Hoe de offline app, de CRM-API en de lead-capture samenwerken — plus wat er al in de app zit.
Het aanvraagformulier post direct naar de CRM LeadIntake API — zonder tussenliggende server.
<!-- POST via fetch → https://launcherp.be/api/v1/leads --> { "name": "...", // naam "email": "...", // e-mail (verplicht) "company": "...", // bedrijf "plan": "hidden", // gekozen plan (uit prijzen.html) "source": "salesonipad" // bron → lead wordt getagd in CRM }
✓ Honeypot-veld website filtert bots. ✓ Netwerkfout → nette melding, geen verloren lead.
// config/cors.php 'paths' => ['api/*', 'sanctum/csrf-cookie'], 'allowed_origins' => [env('APP_URL'), 'https://salesonipad.com'], // bootstrap/app.php — uitzondering CSRF voor het lead-endpoint ->withMiddleware(function (Middleware $middleware) { $middleware->validateCsrfTokens(except: ['api/v1/leads']); })
✓ Bestaande LeadIntakeController verwerkt de data; geen nieuwe backend nodig.
De app synchroniseert al met de CRM-API via dezelfde patronen als orders. Deze modules draaien en hoeven enkel te worden gekoppeld.
scripts/leads.jsnovasync.syncLeads) en App → CRM (erp="send" wachtrij)crm:<uuid> of lead:<ts>) — nooit duplicatenscripts/opportunities.jspdf.js: creditNotaFromFactuurscripts/novasync.jsWat er op de iPad en in het CRM gebeurt.
| Onderdeel | Werking |
|---|---|
| PIN-beveiliging | App afsluiten tegen ongeautoriseerd gebruik |
| Dropbox backup | OAuth 2.0 PKCE — één tik backup, later terugzetten op zelfde/nieuwe iPad |
| Offline-wachtrij | Openstaande orders overleven een herstart; aparte backup-wachtrij |
| Peppol-ready | Velden voor e-facturatie aanwezig; de CRM-module genereert de UBL e-factuur als download. Verzending via een Peppol Access Point is nog niet operationeel. |
| PWA / offline | Service worker cached de volledige app — werkt zonder netwerk |
De app is een Progressive Web App: vertegenwoordigers installeren hem op hun iPad zonder App Store en hij werkt volledig offline.
De combinatie gebruikt de bestaande sync — geen nieuwe infrastructuur.
1. CRM-account aangemaakt (Stripe checkout) 2. SalesOnIPad-licentie gekoppeld aan het CRM-bedrijf 3. App weet via config welk sync-endpoint te gebruiken 4. Sync loopt automatisch — gebruikers zien "gesynchroniseerd" in de app 5. CRM opzeggen = sync stopt; de app blijft lokaal werken
De orders, leads, opportunities en creditnota's gebruiken al hetzelfde sync-patroon. De veldverkoop-module sluit deze aan op het CRM-dashboard.
Wat er nog moet gebeuren om de koppeling live te zetten.
| Stap | Werk | Status |
|---|---|---|
| 1. Lead-capture online | Formulier posten naar API + CORS | Klaar (testwebsite) |
| 2. Veldverkoop-module | CRMModules activeren + prijzen | Volgende stap |
| 3. Sync verbinden | Endpoints koppelen per klant | Pilot |
| 4. Upsell in checkout | Stripe + welkomstpagina | Uitbreiding |