Questions fréquentes

Réponses aux questions courantes sur l'utilisation de PWASK et le lancement d'un produit SaaS

Clonez le dépôt, exécutez 'pnpm install', copiez .env.example vers .env.local, ajoutez votre URL Supabase et la clé anon, puis lancez 'pnpm dev'. Visitez localhost:3000 pour voir l'application. Consultez le guide Démarrage dans /docs/getting-started pour des instructions détaillées avec la configuration Supabase.
Oui ! La licence à vie permet l'utilisation commerciale sur un nombre illimité de projets. Vous pouvez créer et vendre des produits SaaS avec PWASK. Vous ne pouvez pas revendre PWASK lui-même comme starter kit ni redistribuer le code source. Voir la page Licence pour les conditions complètes.
PWASK utilise IndexedDB pour mettre en cache les données localement et mettre en file d'attente les mutations hors ligne. Lors de la reconnexion, les opérations en file d'attente se rejouent automatiquement avec backoff exponentiel. Les mises à jour optimistes de l'UI affichent les changements immédiatement, puis se synchronisent avec le serveur. Voir /docs/architecture pour les patterns de synchronisation et résolution de conflits.
Stack complet Next.js + React + TypeScript, backend Supabase (auth, base de données, realtime, storage), PWA avec service workers, synchronisation hors ligne, i18n (EN/FR), UI Tailwind avec mode sombre, authentification utilisateur, gestion de profil, pages de tarification, blog, site de documentation et intégration email. Tout est prêt pour la production.
Vercel (recommandé pour Next.js), Netlify, Cloudflare Pages et conteneurs Docker auto-hébergés. La documentation inclut des guides de configuration spécifiques à chaque plateforme avec les variables d'environnement. Voir /docs/env pour des instructions de déploiement détaillées.
PWASK inclut un Web App Manifest et un service worker. Les utilisateurs peuvent installer via 'Ajouter à l'écran d'accueil' sur mobile ou 'Installer l'application' sur desktop. L'application fonctionne comme une app native avec sa propre icône et capacités hors ligne. Testez l'installabilité avec Chrome DevTools Lighthouse.
Navigateurs modernes : Chrome 90+, Safari 14+, Firefox 88+, Edge 90+. Mobile : iOS 14+ et Android 8+. Les service workers nécessitent HTTPS (localhost fonctionne pour le développement). Les navigateurs hérités comme IE11 ne sont pas supportés.
Supabase Auth gère email/mot de passe, magic links et OAuth (Google, GitHub, etc.). Les sessions JWT sont stockées de manière sécurisée. Utilisez SUPABASE_ANON_KEY pour les opérations client et SUPABASE_SERVICE_ROLE_KEY uniquement dans le code serveur. Les politiques RLS assurent l'isolation des utilisateurs au niveau de la base de données.
Oui ! Créez des fichiers de migration dans supabase/migrations/ avec votre schéma SQL. Exécutez 'supabase db push' pour les appliquer. Activez toujours Row-Level Security (RLS) sur les tables avec données utilisateur. Utilisez auth.uid() dans les politiques pour filtrer par utilisateur connecté. Voir /docs/architecture pour des exemples RLS.
PWASK utilise last-write-wins par défaut (le timestamp serveur gagne). Pour des scénarios complexes, implémentez des vector clocks ou une logique de résolution personnalisée. La file de synchronisation suit les timestamps et types d'opération. Vous pouvez ajouter la détection de conflits dans vos gestionnaires de mutation. Voir les patterns offline-first dans /docs/architecture.
En-têtes CSP, HSTS, COOP/COEP, XFO, Permissions-Policy, Referrer-Policy tous configurés. RLS applique les permissions au niveau de la base de données. Les clés service role sont côté serveur uniquement. HTTPS imposé en production. Validation des entrées côté client et serveur. Voir la checklist de renforcement de sécurité dans /docs.
Modifiez la config Tailwind et les variables CSS dans globals.css pour les couleurs. Remplacez les images du logo dans public/images/. Mettez à jour les métadonnées dans layout.tsx. Tous les composants utilisent des classes Tailwind donc la personnalisation est simple. Le mode sombre fonctionne automatiquement via les variables CSS.
Oui ! Créez de nouveaux fichiers de messages (ex. messages/es.json), ajoutez la locale à la config i18n/routing.ts et mettez à jour le sélecteur de langue. Le routage gère automatiquement les nouvelles locales. PWASK utilise next-intl pour l'internationalisation.
Créez des fichiers SQL dans supabase/migrations/ avec timestamps (AAAAMMJJHHMMSS_description.sql). Les migrations s'exécutent dans l'ordre et sont suivies par Supabase. Utilisez des instructions idempotentes (IF NOT EXISTS, ON CONFLICT). Exécutez 'supabase db push' pour appliquer. Testez sur staging avant production.
Utilisez des projets Supabase séparés pour dev/staging/production. N'utilisez jamais les secrets de production en développement. Créez des branches de fonctionnalités, testez les migrations localement, utilisez les déploiements preview Vercel pour les PRs, puis déployez en production après approbation. Voir les patterns de déploiement dans /docs/architecture.
Configurez SMTP (Gmail, serveur personnalisé) ou utilisez l'API SendGrid/Postmark. Définissez les variables SMTP_* ou SENDGRID_API_KEY dans l'environnement. Ajoutez l'adresse EMAIL_FROM. Les templates sont dans src/emails/. Testez avec de vrais comptes avant production. Voir /docs/env pour la configuration des fournisseurs.
Oui ! Ajoutez des colonnes tenant_id ou org_id aux tables, filtrez par métadonnées auth.jwt() dans les politiques RLS, appliquez des quotas par tenant et utilisez des claims personnalisées pour la vérification de propriété. L'architecture supporte le multi-tenancy. Voir la section sécurité dans /docs/architecture.
Cache-First pour les assets statiques (JS/CSS/images), Network-First pour les appels API, Stale-While-Revalidate pour les articles. Le service worker est auto-généré pendant le build. Les utilisateurs reçoivent des invites de mise à jour lors de nouveaux déploiements. Voir les stratégies de cache dans /docs/architecture.
Optimisation d'images Next.js avec WebP, lazy loading, code splitting, cache ISR, purge Tailwind CSS, bundles JavaScript minimaux, assets prêts CDN. Scores Lighthouse : 100/100 en Performance et Accessibilité. Voir l'article sur les améliorations PageSpeed dans /blog.
Intégrez Sentry pour le suivi d'erreurs (définir NEXT_PUBLIC_SENTRY_DSN). Utilisez Vercel Analytics pour les Core Web Vitals. Configurez la surveillance de disponibilité avec Pingdom ou UptimeRobot. Le tableau de bord Supabase montre les métriques de base de données. Voir la section observabilité dans /docs/architecture.
Oui, mais Supabase Cloud est recommandé pour la facilité. Pour l'auto-hébergement, utilisez le Dockerfile fourni ou déployez sur votre propre configuration PostgreSQL + PostgREST. Vous devrez configurer Auth, Storage et Realtime séparément. Voir les guides auto-hébergés dans /docs/env.
Utilisez Supabase Storage avec URLs signées pour des uploads sécurisés. Créez des buckets avec politiques RLS. Upload depuis le client avec supabase.storage.from('bucket').upload(). Les fichiers se mettent en file d'attente localement hors ligne et se synchronisent automatiquement. Voir les exemples de storage dans le code.
Mises à jour à vie incluses avec l'achat. Fonctionnalités majeures, correctifs de sécurité et mises à jour de dépendances poussés régulièrement. Changements cassants annoncés à l'avance. Consultez les releases GitHub pour le changelog. Tirez les derniers changements et testez en dev avant de mettre à jour la production.
Consultez /docs pour des guides complets, recherchez dans les issues GitHub, rejoignez notre communauté Discord ou envoyez un email au support. Les licences payantes incluent un support prioritaire. Les clients entreprise obtiennent un support avec SLA et accès direct aux développeurs.
Désinscrivez l'ancien service worker dans DevTools → Application → Service Workers. Incrémentez la version dans next.config.ts. Videz le cache du navigateur. Vérifiez la console pour les erreurs d'enregistrement. Assurez HTTPS en production (localhost ok pour dev).
Vérifiez : session expirée (refresh token), utilisation incorrecte de anon_key vs service_role_key, politiques RLS bloquant l'accès, configuration CORS, claims JWT manquantes. Vérifiez les politiques avec différents comptes utilisateur. Voir la doc sécurité.
Vérifiez : IndexedDB activé dans le navigateur, service worker enregistré, détection navigator.onLine fonctionnelle, événement de reconnexion réseau déclenché. La console devrait montrer les opérations de file de synchronisation. Vérifiez l'enregistrement de synchronisation en arrière-plan dans DevTools.
Vérifiez : domaines d'images dans NEXT_PUBLIC_IMAGE_DOMAINS, politiques Supabase Storage permettent lecture publique, chemins de fichiers corrects, composant next/image utilisé correctement. Consultez l'onglet Network pour les erreurs 403/404.