Plateforme et paramètres
Toute la configuration des produits se trouve sous Admin → Paramètres (stockée dans platform_settings).
Modifier les clés ici ne nécessite pas de recréer des conteneurs Docker. Chemin : /dashboard/admin/settings (requête de groupe, par ex. ?group=payments).
Espace réservé de capture d’écran : Admin → Paramètres shell avec des groupes à gauche/verticaux
Les éléments uniquement d’infrastructure (DB, Redis, APP_URL, agent hôte) restent dans .env — voir 01.
SMTP
Nécessaire pour une plateforme de type production : vérification, réinitialisation du mot de passe, facturation, résultats de déploiement, notifications de remboursement.
| Field | Purpose |
|---|---|
| Host / Port | e.g. smtp.mailgun.org / 587 |
| Username / Password | Provider credentials (password encrypted) |
| Encryption | tls, ssl, or empty |
| From address / name | Outbound identity |
| Admin alert emails | Comma-separated ops alert recipients |
Si le serveur SMTP est vide, l’application peut se rabattre sur le gestionnaire .env (souvent dans Docker — les messages vont aux journaux, pas aux boîtes de réception).
Comment tester : configurer SMTP → ouvrir un utilisateur non vérifié → renvoyer la vérification → confirmer la boîte de réception.
GitHub
Permettait de récupérer les versions principales de NexoPOS et les sources des modules depuis GitHub.
| Field | Purpose |
|---|---|
| Personal access token | Required for private repos (and higher rate limits) |
| NexoPOS repository | owner/name (default open-source NexoPOS) |
| Visibility | public or private |
| Install channel | latest or pinned |
| Pinned version / ref | Used when channel is pinned |
| Release cache hours | Scheduler refresh interval (min 1h); manual refresh still allowed |
NexoPOS public : le jeton est facultatif pour les limites de débit publiques, mais reste recommandé. Forks privés / modules privés : créez un PAT finement granulaire ou classique avec repo (ou lecture du contenu) et enregistrez-le ici.
Les versions des modules peuvent également être téléchargées sous forme de fichier ZIP sans GitHub.
Facturation (Paiements)
Un seul passerelle est active pour les frais de paiement et ceux de la phase intermédiaire.
| Provider | Status | Notes |
|---|---|---|
| Stripe | Implemented | Cards + Checkout; best default |
| Paddle | Implemented | Merchant of Record / Billing API |
| Mollie | Implemented | EU methods; first payment + recurring |
| Airwallex | Credentials only | Not selectable until a driver ships |
| Fake | Tests only | Never production; launch-check rejects |
Configurer Stripe (exemple)
- Passerelle de paiement active → Stripe.
- Clé publiable, clé secrète, secret de webhook.
- Point de terminaison du webhook de production : https://{APP_HOST}/webhooks/stripeEvents : checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.deleted (et tout autre événement supplémentaire que votre pilote attend).
- Test local : Stripe CLI → voir
Paddle et Mollie suivent le même schéma (clé API + secret de webhook ; Paddle dispose également d’un environnement sandbox/production).
Espace réservé de capture d’écran : Admin → Paramètres → Paiements — pilote actif + Stripe
Les installations héritées en mode uniquement environnement peuvent importer une fois :
php artisan platform:import-env-settings
Supprimez ensuite les secrets du produit de .env.
Image de marque
| Field | Purpose |
|---|---|
| App name | Sidebar, titles, marketing |
| Logo (light / dark) | Theme-aware logos |
| Favicon | Browser tab |
Date et heure
Contrôle la façon dont les dates apparaissent dans l’interface utilisateur du plan de contrôle et dans les e-mails (pas l’ISO brut dans Vue).
| Field | Examples |
|---|---|
| Timezone | IANA, e.g. UTC, Africa/Douala, Europe/Paris |
| Date format | Y-m-d, d/m/Y, m/d/Y, d M Y |
| Time format | 24h or 12h |
Stocké dans les préférences de la plateforme et partagé via les props de plateforme d’Inertia.
Page générale et suspension
Général
| Field | Purpose |
|---|---|
| Support email | Public contact; used on suspension page when enabled |
| Support phone / hours | Optional contact details |
| Two factor available | Allow customers to enable 2FA |
Déploiements (limites + page hors ligne)
| Field | Purpose |
|---|---|
| Default max installations | Applied to new personal orgs |
| Default max seats | Applied to new personal orgs |
| Show suspension reason | Offline/suspended tenant page |
| Show support email / phone / hours | Same offline page |
Lorsqu’une installation est suspendue (échec du paiement, CGU, parcours de remboursement, etc.), les visiteurs voient la page « plateforme suspendue ». Ces bascules contrôlent les informations de contact et le texte de la raison qui s’affichent.
Espace réservé de capture d’écran : Admin → Paramètres → Déploiements / bascules de suspension
S3 et sauvegardes
Les sauvegardes sont uniquement un stockage compatible S3 appartenant à l’entreprise (sans Drive/OneDrive client dans le MVP).
Groupe S3
| Field | Purpose |
|---|---|
| Key / Secret | Access credentials (encrypted) |
| Region / Bucket | Destination |
| Endpoint | Empty for AWS; set for MinIO, R2, etc. |
| Path-style | Provider-specific |
L’Admin S3 incomplet ne revient pas silencieusement au disque local pour les écritures de sauvegarde réelles. Utilisez l’action de stockage de test Admin lorsqu’elle est disponible.
Groupe de sauvegardes
| Field | Purpose / default |
|---|---|
| Platform automatic backups | Progressive wave for installs with the Backups add-on |
| Schedule cron (UTC) | e.g. 0 3 * * * |
| Concurrency | 1–5 installs at a time |
| Keep last N | Retention of succeeded backups per install (default 3) |
Les clients ne peuvent pas définir leur propre calendrier de sauvegarde ; ils bénéficient de sauvegardes manuelles + de sauvegardes automatiques de la plateforme lorsqu’ils y ont droit.
Catalogue : publiez une extension avec des sauvegardes de clé de fonctionnalité.
Domaine
| Field | Purpose |
|---|---|
| Platform base domain | Suffix for free install hostnames |
| Custom domain mode | free / addon / disabled |
| Public IPv4 / IPv6 | Shown on customer Domain tab for DNS |
| Max verified domain changes / day | Per install; LE rate protection |
Lorsque le mode est « addon », les clients doivent disposer d’une option « Domaine personnalisé » active (feature_key = custom_domain) avant de rattacher un nom d’hôte.
Rétention de facturation
| Field | Default | Meaning |
|---|---|---|
| Grace period (days) | 3 | After trial/period end: install stays online with renewal banner, then suspend |
| Soft-delete retention (days) | 30 | After soft-delete (cancel path, etc.) before hard purge |
| Refund hard-delete (days) | 7 | After approved refund soft-delete before hard purge |
Le cycle de vie est piloté par la facturation planifiée : billing:process-lifecycle (service de planification Compose).
Notifications
| Field | Purpose |
|---|---|
| Email footer | Appended to outbound mail |
| Support URL | Link in emails / help surfaces |
Ordre des paramètres pour une nouvelle plateforme
- Domaine — domaine de base + adresse IP publique
- SMTP — vrai courrier
- Paiements — Stripe (ou Paddle/Mollie) + webhooks
- GitHub — accès aux modules principaux
- S3 + sauvegardes — si vous vendez un module de sauvegarde
- Image de marque + date et heure — polonais
- Déploiements / général — limites + page de suspension
- Conservation de la facturation — fenêtres de grâce et de suppression
Ensuite, exécutez `php artisan platform:launch-check`.