MCPcopy Index your code
hub / github.com/Varkoff/remix-nestjs-monorepo

github.com/Varkoff/remix-nestjs-monorepo @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
194 symbols 485 edges 64 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🚀 Tu as aimé cette formation ? Passe à React Router 7 !

Formation React Router 7

React Router 7, c'est Remix réinventé : plus simple, plus rapide, avec Vite 6. Toute la puissance du SSR, des loaders et actions, mais sans la complexité.

Formation complète : 76 leçons, 19h56 de contenu
💼 Projets réels : E-commerce avec Stripe, Better Auth, Prisma, AWS S3
🎯 Stack moderne : TypeScript, Tailwind v4, shadcn-ui, déploiement prod

🎁 -65% avec le code REMIXJAMAccéder à la formation


Stack Remix with NestJS, Turborepo

📋 Pré-requis

🏗️ Architecture

Monorepo Turborepo : NestJS sert le frontend Remix directement. Pas d'API REST séparée, juste le serveur NestJS qui monte Remix.

├── backend/        # NestJS + Prisma + Remix server
├── frontend/       # Remix app (UI/routes)
└── packages/       # Configs partagées (ESLint, TS)

🚀 Setup local

# 1. Redis (sessions)
docker compose -f docker-compose.redis.yml up -d

# 2. Dépendances
npm install

# 3. Créer .env à la racine (voir section Variables ci-dessous)

# 4. Copier .env dans backend/ à chaque modif
cp .env backend/.env

# 5. DB migrations
cd backend
npx prisma migrate dev
npx prisma generate

# 6. Lancer dev (depuis racine)
cd ..
npm run dev

App dispo sur http://localhost:3000

🔑 Variables d'environnement

Créer .env à la racine et dans backend/ :

# Base de données PostgreSQL
DATABASE_URL="postgresql://user:password@localhost:5432/dbname"

# Redis (sessions utilisateur)
REDIS_URL="redis://localhost:6379"

# Secret session (générer string aléatoire sécurisé)
SESSION_SECRET="your-super-secret-key-change-me"

# Environnement
NODE_ENV="development"
PORT="3000"

# Stripe (paiements)
STRIPE_SECRET_KEY="sk_test_..."           # Clé secrète Stripe
STRIPE_WEBHOOK_SECRET="whsec_..."         # Secret webhook Stripe

# AWS S3 (upload fichiers)
AWS_ACCESS_KEY="AKIA..."
AWS_SECRET="your-secret"
AWS_REGION="eu-west-3"
AWS_BUCKET_NAME="your-bucket"

# Optionnel : seed BD avec X offres fictives
SEED_OFFERS_COUNT="1000"

⚠️ Important : Copier .env dans backend/ après chaque modif : cp .env backend/.env

📹 Tutoriels vidéo

Retrouvez le guide vidéo pour configurer ce projet sur YouTube (en français)

Motivation

En 4 ans de développement, je n'ai pas encore trouvé une stack qui me plaît. Il y a toujours un élément qui manque (une fonctionnalité, ou une limitation technique).

En tant que développeur fullstack, je souhaite bénéficier du meilleur des deux mondes.

Je souhaite utiliser une technologie :

  • simple à utiliser
  • qui me permet d'implémenter une fonctionnalité rapidement
  • qui me permet d'avoir un contrôle total sur la logique, front comme back

Remix répond à mes attentes. C'est un framework frontend qui me permet d'utiliser Javascript et React pour créer des sites web performants et ergonomiques.

Ce framework est full-stack, signifiant que tu n'as pas besoin de configurer un serveur pour ajouter une logique backend. Tu peux appeler une base de donnée, intégrer l'authentification, et plein d'autres fonctionnalités.

Cependant, il n'a pas suffisamment de maturité. Il manque plein de features, comme les middleware (qui sont très utiles pour ne pas recopier la même logique de protection des routes)

J'utilisais donc NestJS comme serveur séparé jusqu'à présent. Ce framework Node.JS m'a permi d'utiliser Javascript pour configurer une base de donnée, des routes et toute ma logique métier.

Ensuite, j'appelle chaque route dans Remix. Mais c'est sujet à beaucoup d'erreurs d'inattention, ou de perte de synchronisation. J'informe Remix des réponses API de NestJS en déclarant un schéma Zod, qui peut être erroné, et générer des erreurs.

Je perd donc pas mal de temps à :

  • déclarer des schémas Zod
  • réparer des bugs, erreurs d'inattention
  • déclarer des méthodes pour appeler mes routes

MAIS c'est terminé ! J'ai découvert une stack qui me permet d'intégrer ce serveur NestJS avec Remix. Cela remplace le serveur de Remix (celui qui faisait les appels à NestJS) par le serveur NestJS, directement.

Voici les avantages :

  • aucune duplication de code
  • aucun schéma zod
  • aucun bug de ce style à régler

C'est un gain de temps énorme.

Et dans cette formation, je te montre comment j'ai configuré cette stack pour que tu puisses l'utiliser dans tes projets.


⚠️ Note importante

Cette stack n'est plus recommandée pour de nouveaux projets.

L'écosystème a évolué : Remix a fusionné avec React Router 7, qui simplifie énormément l'architecture. Plus besoin de NestJS, Redis, ni Docker pour du dev local. Ma nouvelle stack (enseignée dans la formation React Router 7) est plus simple, plus rapide, plus maintenable.

Ce repo reste utile pour apprendre, mais pour du prod, regarde React Router 7.

💬 Des questions ? Rejoins le Discord Algomax


🚀 Next Steps (améliorations possibles)

Si tu veux moderniser ce projet :

1. Retirer Redis (optionnel)

Remplacer express-session + Redis par auth en DB avec Prisma. Stocker sessions directement en PostgreSQL. Ça supprime la dépendance Docker/Redis en local.

2. Migrer vers React Router 7

  • Activer tous les Remix future flags
  • Updater vers dernière version Remix
  • Migrer vers React Router 7 (guide officiel : reactrouter.com)

3. Retirer NestJS (optionnel)

React Router 7 suffit pour la plupart des apps. Garde NestJS seulement si tu as besoin de microservices, websockets complexes, ou logique backend lourde.

Résultat : Stack ultra-simple avec juste React Router 7 + Prisma + PostgreSQL.

Extension points exported contracts — how you extend this code

AppLoadContext (Interface)
(no doc)
frontend/app/root.tsx
TextareaProps (Interface)
(no doc)
frontend/app/components/ui/textarea.tsx
InputProps (Interface)
(no doc)
frontend/app/components/ui/input.tsx
ButtonProps (Interface)
(no doc)
frontend/app/components/ui/button.tsx

Core symbols most depended-on inside this repo

cn
called by 21
frontend/app/lib/utils.ts
getFileUrl
called by 15
backend/src/aws/aws-s3.service.ts
requireUser
called by 13
frontend/app/server/auth.server.ts
formatDate
called by 6
frontend/app/lib/utils.ts
formatPrice
called by 6
frontend/app/lib/utils.ts
getOptionalUser
called by 6
frontend/app/server/auth.server.ts
useOptionalUser
called by 5
frontend/app/root.tsx
getTransaction
called by 5
frontend/app/server/transactions.server.ts

Shape

Function 129
Class 30
Method 30
Interface 4
Enum 1

Languages

TypeScript100%

Modules by API surface

frontend/app/components/Navbar.tsx12 symbols
backend/src/stripe/stripe.service.ts12 symbols
frontend/app/root.tsx10 symbols
frontend/app/components/Chatbox.tsx8 symbols
frontend/app/server/transactions.server.ts7 symbols
frontend/app/entry.server.tsx7 symbols
frontend/app/server/profile.server.ts6 symbols
backend/src/aws/aws-s3.service.ts6 symbols
frontend/app/server/stripe.server.ts5 symbols
frontend/app/routes/offers.$offerId.tsx5 symbols
frontend/app/routes/_public+/transactions.$transactionId.tsx5 symbols
frontend/app/routes/_public+/profile.tsx5 symbols

Datastores touched

dbnameDatabase · 1 repos

For agents

$ claude mcp add remix-nestjs-monorepo \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page