Trackily Docs

Admin UI — Vue d'ensemble

Tour rapide de l'interface admin Trackily : ce que tu trouves dans chaque section de la sidebar, à quoi ça sert, et où aller pour la doc détaillée. Pense à cette page comme à un GPS — pas une encyclopédie.

Dashboard

Structure générale

L'admin est une SPA servie depuis /admin (auth required). Layout :

  • Sidebar gauche (240px, collapsible) — la navigation principale. Trois accordéons (Affiliate, E-Commerce, Email Marketing) + Dashboard standalone + Settings standalone.
  • Topbar — page title, recherche globale (Ctrl+K), language switcher, theme switcher, avatar dropdown.
  • Main area — contenu de la page courante. Chaque page est routée par hash (/admin#campaigns, /admin#email-lists, etc.).
  • Mobile — sidebar slide-in, masquée par défaut sous 768px.

Dashboard

Dashboard

La home page. Cards en haut (Revenue today, Conversions, Clicks, Profit), graph de revenue 30 jours, top campaigns / offers, AI predictions (next 7 days revenue forecast), suggested actions.

C'est ton briefing visuel. Pour un brief textuel, utilise plutôt l'Autopilot (cf. ci-dessous) ou la prompt MCP /brief.

Accordéon Affiliate

Tout ce qui concerne le tracking affiliate classique : trafic payé, redirects, attribution conversions.

Campaigns

Campaigns

Le cœur de l'app. Chaque ligne = une campagne avec sa source, son URL trackable /c/<slug>, ses KPIs (clicks, conversions, revenue, cost, ROI). Bouton "+ New campaign" en haut à droite.

→ Campaigns

Offers

Offers

Les offres affiliate (Everflow, MaxBounty, custom). Payout, status, network parent, smart links. Sync stats network via le bouton dédié.

Landings

Landings

Tous tes prelanders / landings : URL externes, HTML local, redirect trackers, AI-generated. Filtre par type, par campagne, par status.

→ Landings

Flows

Flows

Les règles de routing entre une campagne et ses landings/offers. Forced flows (filtre géo strict) → regular flows (priorisés) → default flow (fallback).

Traffic Sources

Sources

Tes ad networks (Kadam, Meta, TikTok, Taboola, MGID, ExoClick, PropellerAds…) avec leur API key, leur status, leurs macros de tracking. Une source par compte ad.

Affiliate Networks

Networks

Les réseaux d'affiliation (Everflow, MaxBounty, AdCombo…) — distincts des traffic sources. Tu importes des offres depuis ces réseaux, tu syncs leurs stats.

Domains

Domains

Tes domaines (track.exemple.com, shop.exemple.com…) : ce que chacun sert (campagne, boutique, funnels, landings, smartlinks, produits) et s'il est prêt à servir — il pointe vers ce serveur et répond en HTTPS.

La page

  • En tête : une phrase, et « Comment un domaine devient-il prêt ? » replié (l'adresse à viser et d'où elle vient, Cloudflare, la revérification de 24 h, désactivé ≠ supprimé).
  • La barre (collante) : les compteurs, « Mis à jour à HH:MM », Rafraîchir, Tout revérifier (les domaines actifs, un par un ; le bilan dit combien ont échoué) et Ajouter un domaine. Au-delà de 8 domaines, une recherche (nom, groupe, campagne, boutique).
  • La bande Santé : Prêts à servir (et la répartition prêt / à corriger / à vérifier / au repos, cliquable pour filtrer), À corriger, À vérifier, et l'adresse à viser telle que le serveur la connaît — « inconnue » avec la marche à suivre pour régler SERVER_IP. Puis une seule alerte : un domaine actif, en panne et utilisé (« shop.x.com ne sert pas — il porte la boutique « Y »… ») avec « Voir comment corriger ».
  • La liste, rangée par groupe (« Sans groupe » en dernier) : le verdict, son motif, ce que le domaine sert, l'âge de la dernière vérification, et un geste — celui que propose le serveur (Vérifier, Corriger le DNS, Réactiver…). « Sélectionner » permet d'en supprimer plusieurs d'un coup ; « Importer un CSV » et « Exporter » sont à côté.
  • Le tiroir d'un domaine : Pointage (adresse à viser, enregistrements trouvés, hébergeur, et comment corriger), HTTPS (dernier état, fin du certificat), Ce qu'il sert (avec le lien vers la campagne ou la boutique — le rattachement d'une boutique se change sur la page de la boutique), Réglages ; « Vérifier maintenant » et « Supprimer » (la conséquence est dite avant).
  • La boîte « Domaine » : le nom, la campagne, le groupe, la page d'accueil (root_behavior), les produits servis, « Domaine actif », « Liens générés en https » (le schéma des adresses que Trackily fabrique ; rien n'est forcé chez le visiteur) et la marque. Un domaine qui suit le catalogue de sa boutique le suit encore après « Enregistrer » : ses produits ne sont réécrits que si tu les changes (la boîte dit la conséquence avant). L'ancien réglage « Index Page » a disparu : aucun routage ne le lisait.

Le verdict se lit aussi dans le panneau « Domain Rotation » d'une campagne et dans le menu des domaines de la fenêtre Campagne.

« Prêt à servir ? » — le verdict de chaque domaine

C'est le serveur qui juge chaque domaine, pas l'écran : la page Domaines, les autres écrans et l'agent MCP (list_domains) lisent le même verdict. Les cas sont testés dans cet ordre, et le premier qui s'applique l'emporte :

Verdict Famille Ce que ça veut dire Le geste
Archivé repos Supprimé : plus rien n'est servi sur ce domaine, liens compris. Ses liens /c/, /s/, ses pages /p/, /lp/, /l/, /r/ et sa racine répondent 410 (« Ce lien n'est plus servi sur ce domaine. »), boutique, catalogue et funnels aussi, et il n'obtient plus de certificat. Récupérable depuis Archive, ou en l'ajoutant à nouveau : il revient avec ce qu'il portait.
Désactivé repos Boutique, catalogue et rotation des pools de smartlinks ne le servent plus. Ses funnels (/f/…), ses liens /c/, /s/ et ses pages /p/, /lp/, /l/ y répondent encore, et son certificat se renouvelle. Réactiver
Jamais vérifié attention Le serveur ne sait pas où il pointe. Vérifier
Adresse du serveur inconnue attention Trackily ne connaît pas sa propre IP (SERVER_IP non réglé et non déductible, ou résolveur DNS en panne) : impossible de juger le DNS. Régler SERVER_IP
Aucun enregistrement A panne Le DNS ne pointe nulle part (« Aucun enregistrement AAAA » quand SERVER_IP ne liste que de l'IPv6). Corriger le DNS
Derrière un proxy attention Enregistrement proxifié par Cloudflare (nuage orange) : l'IP visible est celle de Cloudflare. Passer en « DNS only »
Pointe ailleurs panne Les A visent un autre serveur que celui-ci. Corriger le DNS
IPv6 pointe ailleurs panne Un AAAA vise un autre serveur (souvent l'adresse de parking du registrar) : les visiteurs IPv6 et Let's Encrypt arrivent ailleurs. Corriger le DNS
Vérification échouée panne Le résolveur DNS a échoué ; le message est conservé. Revérifier
HTTPS en échec panne Il pointe ici mais le certificat est refusé ou expiré, ou la connexion HTTPS échoue (le message dit laquelle). Revérifier
HTTPS non testé attention Il pointe ici, mais HTTPS n'a jamais été sondé (le domaine ne pointait pas ici, ou l'IP du serveur était inconnue). Revérifier
Certificat en attente attention Il pointe ici, le certificat n'a pas encore répondu (émission en cours). Revérifier
Certificat bientôt expiré attention Moins de 14 jours avant la fin : le renouvellement automatique a échoué. Revérifier
Prêt, inutilisé repos Tout va bien, mais rien ne l'utilise (ni campagne, ni boutique, ni funnel, ni landing, ni smartlink). —
Prêt ok Il pointe ici et HTTPS répond. —

Un domaine vérifié il y a plus de 7 jours est marqué « à revérifier ». Un domaine réglé en « liens générés en http » (ssl_enabled à faux) n'est pas jugé sur HTTPS.

La vérification

« Vérifier » lit les enregistrements A/AAAA, devine l'hébergeur DNS (en remontant le nom : shop.exemple.co.ma est cherché sur exemple.co.ma, pas sur co.ma), compare les A aux IPv4 et les AAAA aux IPv6 de l'IP attendue, et ne teste HTTPS que si le domaine pointe ici. La date de fin du certificat et le dernier message d'erreur sont conservés.

Une vérification qui ne peut rien juger n'efface pas ce qui était su : quand le résolveur DNS est en panne, le dernier résultat (de moins de 72 h) est gardé et seul le message d'erreur change ; quand l'IP du serveur est inconnue, les A lus sont enregistrés mais le certificat connu est gardé. Une fois SERVER_IP réglée, le pointage se rejuge sans revérifier ; un domaine dont HTTPS n'a jamais été testé affiche « HTTPS non testé ».

L'IP attendue vient de SERVER_IP (une ou plusieurs adresses séparées par des virgules). À défaut, Trackily la déduit des enregistrements A de son URL publique (réglage « URL publique », sinon BASE_URL, sinon SERVER_DOMAIN). S'il ne peut pas la déduire — développement, réseau privé, URL publique elle-même derrière Cloudflare —, il le dit (« Adresse du serveur inconnue ») au lieu de déclarer tous tes domaines en panne. Voir Installation → SERVER_IP.

La revérification automatique

Toutes les 24 h, Trackily revérifie un par un les domaines actifs et non archivés dont la dernière vérification a plus de 20 h (première passe environ 10 minutes après le démarrage). Une seule passe à la fois ; le résumé est écrit dans le journal du serveur ([domaines] revérification : …) et le job apparaît dans la santé des CRON (domaines-reverif). La passe est sautée quand l'adresse du serveur est inconnue (rien ne pourrait être jugé), et elle s'arrête après 5 erreurs DNS d'affilée (résolveur en panne) ; dans les deux cas, aucun verdict n'est réécrit. Au démarrage et à chaque passe, une ligne du journal nomme les domaines supprimés encore utilisés (campagne, lien de campagne, boutique, funnels, landings, smartlinks, produits) : plus rien n'y est servi, liens compris, donc ce qui les porte envoie son trafic sur une page « plus servi » (410).

Archiver, réveiller

Supprimer un domaine l'archive : il quitte la liste (l'API le rend encore avec GET /admin/api/domains?archives=1), et plus rien n'est servi sur ce domaine, liens compris, tout de suite :

  • ses liens /c/ et /s/, ses pages /p/, /lp/, /l/, /r/ et sa racine répondent 410 avec une page courte et neutre, sans ta marque : « Ce lien n'est plus servi sur ce domaine. » ;
  • sa boutique, son catalogue et ses funnels ne sont plus servis, et Caddy ne lui délivre plus de certificat ;
  • il ne peut plus être rattaché à une boutique ni à un funnel, et n'est plus annoncé nulle part (carte et détail de boutique, URL de funnel, agent MCP).

Les postbacks et webhooks ne sont pas concernés : une conversion d'un ancien clic remonte encore. La garde lit la liste des domaines supprimés en mémoire (aucune lecture de base par clic), relue toutes les 60 s et sur-le-champ à chaque suppression, réveil, restauration ou purge ; si cette lecture échoue, la dernière liste connue est gardée et tout le reste est servi. Un hôte que la table des domaines ne connaît pas (l'hôte principal de l'instance, localhost) n'est jamais bloqué.

Il est récupérable tant qu'il est dans l'Archive (60 jours, puis purgé) : Restaurer depuis Archive le remet tel qu'il était ; l'ajouter à nouveau (même nom) réveille la ligne archivée — même domaine, ses rattachements (boutique, funnels, landings, smartlinks, produits) reviennent avec lui, et ses réglages aussi : un champ laissé vide dans la boîte (campagne, groupe, marque, page d'accueil) ou laissé à sa valeur par défaut (HTTPS, actif) garde l'ancienne valeur ; un champ que tu saisis l'emporte. Seule sa vérification repart de zéro.

Reports

Reports

Stats groupées (par campagne, source, offer, country, device, day). C'est l'outil pour creuser ce que dashboard te résume.

Logs

Logs

Audit log technique : postbacks reçus, webhooks reçus, automizer firing, erreurs SMTP. Filtre par catégorie + range de dates.

Automizer

Automizer rules Automizer create

Le moteur de règles auto. Pause une campagne si bot rate >30%, scale une source qui ROI >1.5, dédup une campagne dupliquée, etc. Conditions + actions configurable depuis la modal "+ New rule".

→ Automizer

MCP Autopilot

Autopilot

La page de gestion des tokens MCP + audit du Autopilot. Ici tu crées tes bearer tokens, gères leurs scopes, suis qui a appelé quoi (avec params + status + duration).

→ MCP

Archive

Archive

Les entités soft-deleted : campaigns, offers, landings, email_lists, etc. Tu peux restore une row depuis ici, ou purge définitivement (admin-only).

Accordéon E-Commerce

Tout ce qui concerne le commerce natif Trackily (pas Shopify — voir ci-dessous pour le legacy).

Products

Native products list Native product add

Catalogue des produits natifs. Chaque produit a des options/variants, des prix par devise, des images, un slug /p/<slug>, des allowed_domains. Tu cliques "+ New product" pour la modal d'ajout (champ-par-champ ou clone-from-URL Shopify).

Orders

Orders list Order detail

Toutes les commandes natives (Stripe / PayPal / COD). Filtre par payment_status, fulfillment_status, date. Détail par order avec line items, customer, paiements, refunds, fulfillments.

Customers

Customers

CRM léger agrégé depuis les orders. Une row par email. Total spent, orders count, addresses, dernière commande.

Subscriptions

Subscriptions

Ledger des subscriptions Stripe / PayPal récurrentes (Phase 8). Active, paused, cancelled, past_due. MRR + churn tracking.

Reviews

Reviews

Modération des avis produit publics (Phase 17). Approve / reject / spam. Verified-purchase auto-approuvé.

Discount Codes

Discount codes

Codes promo natifs (BOGO, $X off, X% off). Settable par produit, par customer, par minimum spend.

Shipping Zones

Shipping zones

Zones de shipping par pays + rates par poids / total cart. Utilisé au checkout natif pour calculer les frais.

Payment Methods

Payment methods

Tes payment_accounts : Stripe (test + live), PayPal (test + live), COD. Chaque account peut être attaché à un produit / une landing pour router le checkout.

Legacy Shopify (caché par défaut)

Les pages Products (Shopify), Stores, Funnel, Attribution, Audiences, Integrations existent encore (accessible via URL /admin#stores, etc.) pour forensics et back-compat, mais cachées de la sidebar pour réduire le clutter.

Accordéon Email Marketing

Cf. la section dédiée → Email.

Lists

Email lists

Toutes tes listes : subscriber counts, opt-in mode, SMTP attaché, sequence par défaut, landings bound.

→ Lists

Sequences

Sequences

Visual builder de tes autoresponders. Steps ordonnés, delays depuis enrollment, subject/preheader/body_html/body_text, send-test.

→ Sequences

Serveurs SMTP

SMTP

Tes relais SMTP (Mailgun, SendGrid, Postmark, SES, Gmail), chacun avec son verdict « Peut envoyer ? » rendu par le serveur : peut envoyer, en attente (plafond atteint), à vérifier, bloqué ou désactivé. En haut, la bande Santé (serveurs qui peuvent envoyer, capacité restante, activité sur 24 h) et une seule alerte, avec son geste. Chaque ligne porte la jauge de son plafond le plus serré : ce qui reste (« 3 716/5 000 par jour »), comme les jauges des pages Comptes et Groupes de SIM ; le motif d'un plafond atteint dit en mots ce qui est parti (« 500 envois partis sur 500 »). Un clic sur un serveur ouvre son panneau : état, listes qui l'utilisent, connexion, zone sensible, « Vérifier la connexion » (aucun e-mail envoyé) et « Envoyer un essai ». Le mot de passe est chiffré et ne se relit jamais.

→ SMTP

Sends Log

Sends log

Audit log des emails : queued, sending, sent, failed, bounced. Filtres par list, status, email. Sert aussi de dedup memory pour le worker.

Suppression

Suppression

Blocklist globale (cross-list). Hard bounces et complaints auto-populated. Bouton "+ Add" pour suppression manuelle.

→ Suppression

Settings (sidebar bottom)

Lien standalone, regroupe 8 onglets :

General

General

Branding (nom, logo, favicon), default language, timezone, base URL public.

AI

AI

Provider AI (OpenAI / Anthropic / Google) avec API key, default model, max tokens, temperature. Driver pour les tools generate_*.

Payments

Payments

Stripe + PayPal credentials globales (legacy — préfère les payment_accounts par-compte côté Commerce).

Security

Security

Postback secret HMAC, IP whitelist admin, rate limit overrides, password policy.

Integrations

Integrations

Webhook secrets (Shopify HMAC, WooCommerce, Stripe legacy), Telegram bot pour les alertes, Cloudflare credentials pour les domains.

Cloaking

Cloaking

Réglages globaux du cloaking : bot detection database, fingerprint settings, par défaut ON/OFF par campagne.

Users

Users

Gestion des comptes admin (multi-user Phase 12+). Email, role, permissions par section.

Notifications

Notifications

Préférences email / Telegram pour les alertes (anomalies, conversions, paiements). Schedules des digests.

Profile (avatar → My profile)

Profile

Ton compte courant : email, password change, avatar, language préférée, theme préféré, plan badge (community / pro / agency).

  • Ctrl+K (Cmd+K macOS) — global search. Tape un nom de campagne, d'offre, de landing, de section settings — tu y vas direct.
  • Sidebar collapse — bouton 3-bars en haut de la sidebar pour la rétrécir à 64px (icônes seuls). Préférence persistée.
  • Hash routing — chaque page est un hash (#campaigns, #email-lists, #settings/general). Bookmark-able, sharable.
  • Mobile — toggle hamburger en topbar.

Théâmes et designs

L'UI supporte 5 design themes (Apple Glass, Neon Gradient, Corporate Bold, Midnight Aurora, etc.) + dark/light. Réglable depuis l'avatar dropdown → "Theme".

Les CSS variables sont définies par design ([data-design="..."] selector). Le theme dark passe par [data-theme="dark"] indépendamment.

Où aller ensuite

  • Campaigns — pour comprendre le modèle central
  • Email — pour le sous-système ESP
  • MCP — pour piloter tout ça depuis Claude / Cursor
  • API — pour les intégrations HTTP classiques
  • Automizer — pour l'auto-pilote règles métier
  • Commerce — pour la partie native commerce
  • Cloaking — pour les workflows visuels
  • Landings — pour comprendre les types (URL / Local / Tracker / AI)