Questions fréquentes
Réponses aux questions courantes sur l'utilisation de PWASK et le lancement d'un produit SaaS
Comment installer et lancer PWASK en local ?
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.
Puis-je utiliser PWASK pour des projets commerciaux ?
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.
Comment fonctionne l'architecture offline-first ?
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.
Qu'est-ce qui est inclus dans PWASK ?
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.
Quelles plateformes de déploiement sont supportées ?
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.
Comment fonctionne l'installation PWA ?
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.
Quels navigateurs et appareils sont supportés ?
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.
Comment fonctionne l'authentification ?
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.
Puis-je ajouter des tables de base de données personnalisé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.
Comment gérer les conflits de données hors ligne ?
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.
Quelles mesures de sécurité sont intégrées ?
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.
Comment personnaliser l'UI et le branding ?
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.
Puis-je ajouter plus de langues que EN/FR ?
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.
Comment fonctionnent les migrations de base de données ?
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.
Quel est le workflow de développement recommandé ?
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.
Comment configurer les notifications email ?
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.
Puis-je construire un SaaS multi-tenant avec PWASK ?
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.
Comment les service workers mettent en cache le contenu ?
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.
Quelles optimisations de performance sont incluses ?
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.
Comment surveiller les erreurs et la disponibilité ?
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.
Puis-je auto-héberger la base de données ?
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.
Comment gérer les téléchargements de fichiers ?
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.
Quelle est la politique de mise à jour pour PWASK ?
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.
Comment obtenir du support si je suis bloqué ?
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épannage : Service worker ne se met pas à jour
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).
Dépannage : Erreurs 401/403
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é.
Dépannage : Synchronisation hors ligne ne fonctionne pas
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.
Dépannage : Images ne se chargent pas
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.