Werk uitsluitend in het bestaande Grootpakket Portal / Grootpakket.nl-project (GitHub hlsgroupbv-rgb/grootpakket), React/Vite, Supabase. Maak geen nieuw CRM. Integreer de meegeleverde customtracking-crm-bestanden nadat je de actuele customer/tenant- en auth-schema's hebt ingelezen.

Voeg in het ingelogde klantportaal een pagina 'Mijn custom tracking' toe: eigen HTML uploaden, veilige preview met fictieve zending, versies vergelijken/kiezen en voor eigen klantaccount activeren. Toon duidelijk een verschil tussen 'template opgeslagen', 'gekozen versie', 'live CRM-rendering actief' en 'subdomein/HTTPS actief'. Gebruik geen groen vinkje als een koppeling alleen is opgeslagen.

Gebruik het echte server-side klantlidmaatschap om ct_crm_accounts.crm_customer_ref en ct_crm_memberships te vullen. Geen user_metadata of client ingestuurde klant-ID als autorisatiebron. Beperk write-toegang tot account owner/editor. Activeer alleen een template die bij hetzelfde klantaccount hoort; controleer klant A versus B.

Behoud de bestaande openbare trackingcode-/token-/postcodecontrole. Koppel de actieve HTML pas NADAT de zending server-side gevalideerd en aan de juiste CRM-klant gekoppeld is. Vul de toegestane placeholders met echte shipmentdata. Gegevens zijn escaped tekst, geen HTML. Geen template of fixture van klant A bij zending B. Behoud de huidige tracking als fallback.

Render klant-HTML met de meegeleverde parser en geïsoleerde iframe-sandbox zonder scriptrechten. Laat echte interactieve status, afspraken, POD en Envy bij de bestaande CRM-code. Alleen Chat met Envy voor bezorghulp; merkstijl aan dezelfde logo/kleuren/typografie koppelen. Geen telefoon, mail of WhatsApp in tracking.

Integreer nieuwe migrations/Edge Function, serversecrets en beperkte CORS in de bestaande configuratie; vervang niet het hele config.toml. Service-rolekey en TransIP/Sites-tokens nooit in de frontend of HTML.

ZOEM-demo staat op https://customtracking.nl/demo/zoem en krijgt zoem.customtracking.nl. Dit is ontwerp/fixture, nog geen live klantfeed. Nieuwe templates moeten automatisch via de geautoriseerde hostingregistratie + privébeheer /api/domains/register hun DNS krijgen. Wildcard-hostnames worden door huidige Sites niet geaccepteerd. Voor volledig unattended CRM-subdomeinen is een echte hostingregistratie-adapter vereist; geen fictieve Sites REST-endpoint verzinnen.

Voer stagingchecks uit voor twee tenants, viewer/editor, sessieverloop, HTML-XSS, CSS/attribute-placeholderinjectie, ontbreken van assets/planning, behouden van bestaande tracking en terugzetten naar vorige template. Lever code en uitvoerbare controles op. Meld precies welke onderdelen gepubliceerd en werkelijk aangesloten zijn.
