Starter full-stack
Une fondation de production pour les projets Next.js et Django
- Année
- 2026
- Type
- Indépendant
- Rôle
- Auteur
- Statut
- Maintenu
La fondation réutilisable que j’ai extraite des bases de code d’Au Cœur du Népal et de LWNF : authentification renforcée, primitives d’API, outils de contenu bilingue, piles Docker de développement et de production, CI, sauvegardes et outillage de mise en production. Les nouveaux projets, dont ce site, en partent.
Contexte
Après deux projets en production sur la même pile, les mêmes problèmes revenaient : rotation des jetons, verrouillage, parcours e-mail, pagination sans doublons, en-têtes de cache, sauvegardes restaurables. Le starter réunit les versions de ces solutions qui ont résisté aux revues.
Approche
Les modules ont été repris des deux projets sources et leurs points d’intégration adaptés, en excluant données clients, identifiants, photographies et fonctionnalités métier (dons, exploitation de treks). Un manifeste de provenance indique l’origine de chaque fichier.
Un générateur copie le starter sans dépendances, secrets, données ni historique Git, le renomme et crée de nouveaux secrets. Aucun mot de passe administrateur n’est partagé par défaut.
Architecture du système
Frontend
Next.js 16 · App Router · BFF
Des routes de même origine gardent les jetons dans des cookies HttpOnly ; les mutations vérifient l’en-tête Origin.
Appelle Identité · Appelé par Compose · Nginx
Backend
Identité · JWT · sessions · MFA
Vérification d’e-mail, gestion des mots de passe, rotation des jetons avec détection de rejeu, révocation de session, verrouillage, TOTP.
Appelle core/, PostgreSQL · Redis · Appelé par Next.js 16
core/ · Primitives d’API
Enveloppes de réponse, pagination stable, modèles publiables, champs bilingues, assainissement, stockage et revalidation.
Appelé par Identité
PostgreSQL · Redis · Données · cache · file
PostgreSQL pour les données ; Redis pour le cache, le verrouillage et le broker Celery.
Appelle Celery · Beat (asynchrone) · Appelé par Identité, Sauvegardes
Celery · Beat · E-mails · planification
E-mails à gabarits et planifications en base.
Appelé par PostgreSQL · Redis
Exploitation
Compose · Nginx · Piles dev et prod
Piles de développement et de production, routage TLS, processus non-root, sondes de santé et tâche de migration.
Appelle Next.js 16 (asynchrone) · Appelé par CI · release
CI · release · Images au commit exact
Vérifications, audits de dépendances, intégration PostgreSQL et tests navigateur en HTTPS conditionnent la publication ; le déploiement utilise des références d’image immuables.
Appelle Compose · Nginx (asynchrone)
Sauvegardes · Locales · distantes
Sauvegardes quotidiennes vérifiées, avec procédure de restauration.
Appelle PostgreSQL · Redis (asynchrone)
Décisions techniques
Pourquoi extraire un starter plutôt qu’utiliser un modèle public ?
- Décision
Construire la fondation à partir de code déjà éprouvé en production et audité, plutôt que d’un modèle générique.
- Pourquoi
Chaque module arrive avec les tests de régression et les commentaires qui expliquent la défaillance qu’il évite : c’est ce qui rend sa réutilisation sûre.
- Compromis
Opiniâtre : il suppose Next.js, Django, PostgreSQL et Docker, et doit être tenu à jour à la main.
Infrastructure et déploiement
Piles Compose de développement et de production, routage TLS par Nginx, processus de production non-root, sondes de santé et tâche de migration. La publication sur GHCR dépend de la réussite des vérifications sur le commit exact ; le déploiement utilise des références d’image immuables et une sauvegarde quotidienne vérifiée.
Technologies
- TypeScript
- Next.js
- Django
- Django REST Framework
- Celery
- PostgreSQL
- Redis
- Docker
- Nginx
- GitHub Actions
- Playwright