Piattaforma e impostazioni
Tutte le configurazioni dei prodotti si trovano in Admin → Impostazioni (memorizzate in platform_settings).
La modifica delle chiavi qui non richiede la ricreazione dei container Docker. Percorso: /dashboard/admin/settings (query di gruppo, ad es. ?group=payments).
Segnaposto schermata: Admin → Impostazioni shell con gruppi a sinistra/verticali
Gli elementi solo infrastruttura (DB, Redis, APP_URL, host agent) restano in .env — vedi 01.
SMTP
Necessario per una piattaforma simile a un ambiente di produzione: verifica, reimpostazione della password, fatturazione, risultati del deploy, notifiche di rimborso.
| 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 |
Se l’host SMTP è vuoto, l’app potrebbe ricorrere al mailer del file .env (spesso in Docker — i messaggi finiscono nei log, non nelle caselle di posta).
Come testare: configura SMTP → apri un utente non verificato → invia nuovamente la verifica → conferma la casella di posta.
GitHub
Prima si prelevavano le release principali di NexoPOS e le sorgenti dei moduli da 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 |
Pubblico NexoPOS: token facoltativo per i limiti di velocità pubblici, comunque consigliato.Fork privati / moduli privati: crea un PAT fine-grained o classico con repo (o lettura dei contenuti) e salvalo qui.
Le versioni dei moduli possono anche essere caricate come file ZIP senza GitHub.
Fatturazione (Pagamenti)
È attivo un solo gateway per gli addebiti al momento del checkout e durante il ciclo di vita.
| 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 |
Configura Stripe (esempio)
- Gateway di pagamento attivo → Stripe.
- Chiave pubblicabile, chiave segreta, segreto webhook.
- Endpoint webhook di produzione: https://{APP_HOST}/webhooks/stripeEvents: checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.deleted (e qualsiasi altro evento aggiuntivo che si aspetta il tuo driver).
- Test locale : Stripe CLI → vedi
Paddle e Mollie seguono lo stesso schema (chiave API + segreto webhook; Paddle dispone anche dell’ambiente sandbox/produzione).
Segnaposto screenshot: Admin → Impostazioni → Pagamenti — driver attivo + Stripe
Le installazioni legacy solo per ambienti possono importare una volta:
php artisan platform:import-env-settings
Rimuovi i segreti del prodotto da .env.
Branding
| Field | Purpose |
|---|---|
| App name | Sidebar, titles, marketing |
| Logo (light / dark) | Theme-aware logos |
| Favicon | Browser tab |
Data e ora
Controlla come le date vengono visualizzate nell’interfaccia utente del piano di controllo e nelle email (non in formato ISO grezzo in 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 |
Memorizzato nelle preferenze della piattaforma e condiviso tramite le proprietà della piattaforma Inertia.
Pagina generale e sospensioni
Generale
| 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 |
Distribuzioni (limiti + pagina offline)
| 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 |
Quando un’installazione viene sospesa (mancato pagamento, condizioni d’uso, percorso di rimborso, ecc.), i visitatori vedono la pagina di piattaforma sospesa. Questi interruttori controllano quali informazioni di contatto e testo della motivazione vengono visualizzati.
Segnaposto screenshot: Admin → Impostazioni → Attivazioni / sospensioni delle distribuzioni
S3 e backup
I backup sono solo storage S3 compatibile di proprietà dell’azienda (nessun Drive/OneDrive del cliente nell’MVP).
Gruppo 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’archiviazione S3 Admin incompleta non esegue silenziosamente il ripiego su disco locale per le scritture di backup reali. Usa l’azione di test di archiviazione Admin quando disponibile.
Gruppo di backup
| 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) |
I clienti non possono impostare autonomamente la pianificazione dei backup; ricevono backup manuali e, quando previsto, quelli automatici della piattaforma.
Catalogo: pubblica un componente aggiuntivo con backup della chiave delle funzionalità.
Dominio
| 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 |
Quando la modalità è **addon**, i clienti devono avere un add-on **Dominio personalizzato** attivo (feature_key = custom_domain) prima di collegare un nome host.
Ritenzione dei pagamenti
| 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 |
Il ciclo di vita è guidato dalla fatturazione pianificata: process-lifecycle (servizio di pianificazione Compose).
Notifiche
| Field | Purpose |
|---|---|
| Email footer | Appended to outbound mail |
| Support URL | Link in emails / help surfaces |
Ordine delle impostazioni per una nuova piattaforma
- Dominio — dominio di base + IP pubblico
- SMTP — posta reale
- Pagamenti — Stripe (o Paddle/Mollie) + webhook
- GitHub — accesso ai moduli core
- S3 + backup — se vendi un add-on di backup
- Branding + data e ora — polacco
- Distribuzioni / generali — limiti + pagina di sospensione
- Conservazione della fatturazione — finestre di tolleranza ed eliminazione
Quindi esegui php artisan platform:launch-check.