Découvre la structure des fichiers, les scripts de développement et la page d’accueil.
Renseigne ton email pour débloquer immédiatement cette formation gratuite.
Dans cette première étape, on va plonger dans la structure de ton projet movies-speaker généré par create-next-app
en Next.js 15. L’objectif est de comprendre où se situent les principales briques (routes, styles, configurations, scripts) pour pouvoir rapidement naviguer et démarrer efficacement ton dev.
Voici le squelette minimal que tu retrouves juste après avoir lancé :
1npx create-next-app@latest movies-speaker
1movies-speaker/2├── next.config.js3├── package.json4└── app/5├── globals.css6├── layout.tsx7└── page.tsx
La
app/
est le point d’entrée de l’App Router (nouveau système de routing),
contrairement à l’ancien dossierpages/
de Next.js 13-.
app/
1app/2├── components/ # tes UI React3├── history/ # route /history4├── login/ # route /login5├── register/ # route /register6├── server/ # logique serveur (RSC, Actions, DB, auth…)7├── globals.css # styles globaux via Tailwind8├── layout.tsx # wrapper HTML commun à toutes les pages9├── page.tsx # route racine `/`10├── LoginForm.tsx # Client Component du formulaire de login11└── RegisterForm.tsx # Client Component du formulaire d’inscription
Chaque dossier */page.tsx
devient une route de ton appli.
Par exemple, app/login/page.tsx
correspond à https://localhost:3000/login
.
package.json
Avant tout dev, on jette un œil aux scripts prédéfinis :
1{2"name": "movies-speaker",3"scripts": {4"dev": "next dev", // lance le serveur de dev5"build": "next build", // compile pour la prod6"start": "next start" // démarre le build en production7},8"dependencies": {9"next": "^15.0.0",10"react": "^18.0.0",11"tailwindcss": "^3.0.0",12"prisma": "^6.0.0"13}14}
npm run dev
ouvre ton appli en hot-reload sur http://localhost:3000
.build
+ start
servent à tester la version compilée (SSR + RSC).Pendant le dev, privilégie npm run dev
: tu profites du TurboPack
(compilation ultra-rapide) et de l’auto-refresh.
Le fichier next.config.js
est généré vide par défaut.
Tu y ajouteras, par exemple, les domaines d’images autorisés ou des réécritures de route :
1/** @type {import('next').NextConfig} */2const nextConfig = {3images: {4remotePatterns: [5{6protocol: 'https',7hostname: 'image.tmdb.org',8},9],10},11};1213export default nextConfig;
Ici, on autorise image.tmdb.org
pour l’optimisation des posters via <Image />
.
layout.tsx
et page.tsx
layout.tsx
C’est le wrapper partagé sur toutes les routes :
1export default async function RootLayout({ children }) {2const user = await getOptionalUser(); // RSC côté serveur3return (4<html lang="en">5<body>6<header>…navbar…</header>7{children}8</body>9</html>10);11}
getOptionalUser
).page.tsx
(home)La route /
qui affiche la liste de films et séries :
1export default async function Home() {2const [movies, series, user] = await Promise.all([3getMovies(),4getSeries(),5getOptionalUser(),6]);78return (9<main>10<h1>Movies</h1>11<div>…boucle produits…</div>12<h1>Series</h1>13<div>…boucle séries…</div>14</main>15);16}
async
+ await
getMovies()
, getSeries()
et getOptionalUser()
s’effectuentserver/
On isole toute la logique back-end (Prisma, auth, appels API externes) :
1app/server/2├── db.ts # instanciation de PrismaClient3├── session.ts # gestion du cookie de session4├── auth.ts # Server Actions pour login/register5├── movies.ts # wrappers TMDB + RSC pour fetch et cache6└── history.ts # ajout / suppression / lecture historique
Chaque fonction exportée est précédée de use server
ou use cache
pour indiquer à Next.js de ne pas la compiler pour le client.
Cela te garantit que tout ce qui est sensible (connexion Prisma, clé API TMDB) reste dans le Node.js et ne fuit jamais dans le bundle front.
1npm install
1npm run dev
http://localhost:3000
et vérifie que ton titre et tes routesapp/
pour créer de nouvelles routes.dev
, build
, start
).npm run dev
puis stoppe-le.next.config.js
et ajoute un domaine imaginaire (ex. example.com
)images.remotePatterns
. Redémarre le serveur et vérifie qu’aucuneapp/
une nouvelle route about/page.tsx
qui affiche<h1>À propos</h1>
. Ouvre http://localhost:3000/about
.
await new Promise(r => setTimeout(r, 500))
.Tu maîtrises maintenant l’ossature de ton projet Next.js 15, son routing,
la séparation front / back, et la configuration initiale. On passe
au chargement des données avec Prisma et TMDB dans la prochaine leçon !