Première application web

App Programming - Jour 2

De la maquette au code

Construisez et déployez votre première application web

</>

Récap : ce que nous avons fait hier

✓

Spécifications

Nous avons défini ce que fait notre application, pour qui, et les fonctionnalités essentielles dont elle a besoin

✓

Maquette Figma

Nous avons créé des maquettes d'interface avec Stitch AI pour visualiser chaque écran

✓

Mise en place de GitHub

Nous avons créé un dépôt et découpé le travail en issues

✓

User stories

Nous avons rédigé des user stories claires qui décrivent chaque fonctionnalité du point de vue de l'utilisateur

Aujourd'hui : votre maquette prend vie ! À la fin de la journée, votre application sera en ligne sur Internet.

Comment fonctionne le Web

Chaque fois que vous ouvrez un site web, voici ce qui se passe en coulisses

💻 Votre navigateur Saisit une URL ex. google.com Envoie une REQUÊTE GET /page HTML + CSS + JS 🖥️ Serveur Reçoit la requête Trouve les bons fichiers Envoie une RÉPONSE ✨ La page affichée
Tout cela prend quelques millisecondes. Chaque site web, chaque application, chaque recherche Google suit ce schéma : requête → traitement → réponse.

HTTP en 60 secondes

HTTP = la langue que parlent navigateurs et serveurs

🔗 1. Saisir l'URL example.com/tasks 📖 2. Résolution DNS Trouve l'IP : 93.184.216.34 🖥️ 3. Serveur Traite la requête 📄 4. Réponse 200 OK + HTML/CSS/JS

GET (lire)

« Donne-moi cette page » : charger un site, consulter des données

POST (créer)

« Enregistre ces données » : envoyer un formulaire, créer un compte

Codes de statut : 200 OK (succès) • 404 Not Found (mauvaise URL) • 500 Server Error (quelque chose a planté)

Qu'est-ce que HTML ?

Le squelette de toute page web

HTML (HyperText Markup Language) utilise des balises pour définir la structure du contenu sur le Web.

</>

<h1>

Titre

</>

<p>

Paragraphe

</>

<img>

Image

</>

<a>

Lien

</>

<div>

Conteneur

<h1>Welcome to my site</h1>
<p>This is a paragraph of text.</p>
<img src="photo.jpg" alt="A nice photo">
<a href="https://example.com">Click here</a>

Une page HTML complète

C'est une vraie page web qui fonctionne : essayez vous-même !

<!DOCTYPE html>
<html>
<head>
  <title>My App</title>
</head>
<body>
  <h1>Welcome!</h1>
  <p>This is my first webpage.</p>
  <a href="/about">Learn more</a>
</body>
</html>

<head>

Métadonnées (titre, réglages) : non visibles sur la page

<body>

Tout ce que l'utilisateur voit réellement à l'écran

Qu'est-ce que CSS ?

CSS, c'est la mise en forme du HTML : couleurs, polices, espacements, mise en page et animations. Il transforme une structure brute en un beau design.

Cascading Style Sheets

Sans CSS

Mon titre

Un texte brut avec un lien

Avec CSS

Mon titre

Un texte mis en forme avec un lien

Exemple CSS

CSS utilise des sélecteurs pour cibler des éléments HTML et leur appliquer des styles

body {
  font-family: Arial, sans-serif;
  background: #f5f5f5;
}

h1 {
  color: #333;
  text-align: center;
}

.card {
  background: white;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
CSS fait la différence entre laid et beau. Tous les sites professionnels que vous utilisez sont mis en forme avec CSS.

Qu'est-ce que JavaScript ?

Il rend les pages interactives : clics, animations, données

Clics, validation de formulaires, chargement de données, mises à jour dynamiques : tout cela, c'est JavaScript.

// When the button is clicked, show a message
document.querySelector('button')
  .addEventListener('click', () => {
    alert('You clicked the button!');
  });
JavaScript est le seul langage de programmation que comprennent les navigateurs. HTML et CSS servent au balisage et à la mise en forme ; JS est le véritable langage de programmation du Web.

La pile web moderne

Des bases aux frameworks puissants

HTML : structure (squelette) CSS : style (peau et vêtements) JavaScript : comportement (cerveau) Next.js : framework (super-pouvoirs) s'appuie sur

Frameworks = des outils pour construire plus vite

Tout écrire à partir de zéro est lent et source d'erreurs. Des frameworks comme Next.js, React ou Vue vous donnent des briques toutes prêtes pour que vous vous concentriez sur vos fonctionnalités, pas sur la tuyauterie.

Qu'est-ce que Next.js ?

Le framework que nous allons utiliser pour construire notre application

Vos fichiers app/page.tsx app/tasks/page.tsx app/about/page.tsx Next.js URL dans le navigateur yourapp.com/ yourapp.com/tasks yourapp.com/about Créer un fichier = créer une page Aucune configuration ! Next.js fait le câblage.

Rendu côté serveur

Les pages se chargent plus vite, car le serveur prépare le HTML avant de l'envoyer au navigateur

Routes d'API intégrées

Construisez votre back-end dans le même projet, sans serveur séparé

Créé par Vercel, basé sur React : utilisé par Netflix, TikTok, Notion et des milliers d'entreprises dans le monde.

Qu'est-ce que Node.js ?

JavaScript en dehors du navigateur

JavaScript dans le navigateur Boutons, animations, formulaires Tourne dans Chrome/Firefox Limité au navigateur + Node.js JS sur votre ordinateur Serveurs, lecture de fichiers Moteur de Next.js = La force du full stack Un seul langage pour front-end ET back-end = moins à apprendre !
# Check if Node.js is installed
node --version    # Should show v20.x or higher

# Check npm (comes with Node.js)
npm --version     # Should show 10.x or higher

À vous de jouer

Qu'est-ce qu'un agent de code ?

Une IA qui écrit du code à partir de vos instructions en langage naturel

👤 Vous (manager) Décrivez ce que vous voulez Vérifiez le résultat Faites vos retours « Ajoute une liste de tâches » « Plus grand » 🤖 IA (développeur) Écrit le code Crée les fichiers Corrige les bugs ✨ Application qui marche Ajouter

Ce que c'EST

  • Un assistant très rapide qui tape le code pour vous
  • Excellent pour les tâches répétitives et le code passe-partout
  • Connaît de nombreux langages de programmation
  • Disponible 24 h/24, 7 j/7, jamais fatigué

Ce que ce n'est PAS

  • Pas de la magie : il fait des erreurs
  • Il a besoin de directives humaines claires
  • Il ne comprend pas seul votre contexte métier
  • Son travail doit être relu et testé

Découvrir Antigravity

Votre environnement de développement assisté par IA, dans le navigateur

Antigravity - study-planner Éditeur <h1>Welcome</h1> <p>My Study Planner</p> <button>Add Task</button> Ask AI : « Ajoute une liste de tâches avec cases à cocher » Aperçu en direct Welcome My Study Planner Add Task

Crée des fichiers

Génère des composants, des pages et des configurations complets

Écrit du code

Réalise des fonctionnalités à partir de simples descriptions en langage courant

Corrige les erreurs

Débogue et résout les problèmes que vous rencontrez

Explique

Vous aide à comprendre n'importe quel code ou concept

Configurer Antigravity

Vous l'avez découvert hier : aujourd'hui, on exploite toute sa puissance

Mise en place rapide (5 min)

Ce que sait faire Antigravity

  • Écrire et modifier du code avec l'aide de l'IA
  • Lancer votre projet avec un aperçu en direct
  • Se connecter à GitHub pour sauvegarder votre code
  • Déployer dans le cloud

Comment utiliser l'IA

  • Tapez votre demande dans la barre de discussion de l'IA
  • Soyez précis sur ce que vous voulez
  • L'IA génère le code dans votre projet
  • Vérifiez le résultat dans l'aperçu en direct

Démo : créer le squelette du projet avec Antigravity

DÉMO EN DIRECT : l'enseignant montre

Exemple de prompt

« Crée un projet Next.js nommé study-planner
avec une page d'accueil qui affiche un message de bienvenue
et une barre de navigation avec des liens vers Accueil et Tâches. »
Observez l'échange avec l'IA et le résultat. Remarquez comment elle pose des questions pour préciser la demande, crée plusieurs fichiers et explique le rôle de chacun.

Comprendre la structure du projet

Un projet Next.js a une organisation claire et prévisible

study-planner/
├── src/app/
│   ├── layout.tsx       # Shared layout (nav, footer)
│   ├── page.tsx         # Homepage (/)
│   └── globals.css      # Global styles
├── public/              # Static files (images, icons)
├── package.json         # Dependencies & scripts
└── next.config.js       # Configuration

Notion clé : fichier = page

src/app/page.tsx → /
src/app/tasks/page.tsx → /tasks
src/app/about/page.tsx → /about

Layout

layout.tsx enveloppe toutes les pages. Placez-y votre barre de navigation et votre pied de page : ils apparaissent automatiquement sur chaque page.

Lancer votre application

Du code au navigateur en deux commandes

Terminal $ npm install added 320 packages $ npm run dev - ready on localhost:3000 ● Server running... ouvrir localhost:3000 StudyPlanner Accueil | Tâches Bienvenue ! Commencer

Hot reload : chaque sauvegarde = mise à jour immédiate dans le navigateur !

Modifiez un fichier, enregistrez-le, et le navigateur se met à jour tout seul. Inutile de rafraîchir à la main. Le développement devient rapide et agréable.

Ouvrez http://localhost:3000 dans votre navigateur. Si vous voyez votre message de bienvenue, félicitations : votre application web tourne !

Localhost ou cloud ?

Pourquoi il faut déployer votre application

localhost:3000 (votre ordinateur) 💻 VOUS seul la voyez S'arrête si vous fermez le terminal Exige que npm run dev tourne 👤 Public : vous seul ou your-app.vercel.app (cloud) ☁️ TOUT LE MONDE y a accès Toujours en ligne, 24 h/24 Tourne seule sur les serveurs de Vercel 👩👨👩‍💻📱🌍 Public : le monde entier
Comme vous l'avez vu hier : « le cloud » = l'ordinateur de quelqu'un d'autre, toujours allumé. Au lieu de faire tourner votre application sur votre ordinateur, un serveur dans un centre de données la fait tourner pour vous, jour et nuit.

Qu'est-ce que Vercel ?

Le moyen le plus simple de déployer votre application dans le cloud

📤 Push sur GitHub Vos modifications sont envoyées auto ⚙ Vercel construit Détecte les changements et construit l'application 🌍 En ligne en ~60 secondes ! study-planner.vercel.app Mis à jour à chaque push

Par les créateurs de Next.js

La même entreprise que Next.js : l'hébergement idéal pour lui

Gratuit pour les étudiants

Pas de carte bancaire. Parfait pour les projets.

Redéploiement automatique au push

Push du code → Vercel redéploie automatiquement

Déployer sur Vercel

Du code sur votre ordinateur à un site en ligne en 4 étapes

🔑 1. Inscription vercel.com Via votre compte GitHub 📦 2. Importer le dépôt « Add New Project » Choisir study-planner 🚀 3. Déployer Cliquer sur « Deploy » Attendre ~60 secondes 🌍 4. EN LIGNE ! study-planner .vercel.app

Étapes du déploiement

Votre application est en ligne ! Vous obtenez une URL du type https://study-planner-abc123.vercel.app : partagez-la avec le monde entier !

Qu'est-ce qu'une base de données ?

Là où votre application conserve ses données de façon permanente

Sans base de données Ajout de la tâche « Examen de maths » ✓ On rafraîchit la page... Tâche DISPARUE ! Données en mémoire seulement. Comme écrire sur un tableau blanc effacé toutes les heures Avec base de données Ajout de la tâche « Examen de maths » ✓ Enregistrée Rafraîchir, redémarrer, revenir demain... Tâche TOUJOURS LÀ ! Données conservées. Comme écrire dans un carnet indélébile
▦

SQL

Des tables avec lignes et colonnes (comme Excel)

▦

NoSQL

Des documents souples (comme des fichiers JSON)

▦

Fichiers JSON

L'option la plus simple, idéale pour apprendre !

Cette semaine : nous utilisons des fichiers JSON comme base de données. C'est simple, lisible, et parfait pour comprendre le principe. Les vraies applications en production utilisent des bases SQL ou NoSQL.

JSON comme base de données simple

JSON = JavaScript Object Notation : un fichier texte qui stocke des données structurées

Le fichier JSON

{
  "tasks": [
    {
      "id": 1,
      "title": "Study for exam",
      "dueDate": "2026-03-20",
      "completed": false
    },
    {
      "id": 2,
      "title": "Submit project",
      "dueDate": "2026-03-22",
      "completed": true
    }
  ]
}

Ce que vous voyez dans l'application

Study for exam Échéance : 20 mars 2026 En attente ✓ Submit project Échéance : 22 mars 2026 Terminée
JSON est lisible par les humains ET par les machines. Vous pouvez l'ouvrir dans n'importe quel éditeur de texte et le comprendre immédiatement. L'application lit ce fichier et le transforme en cartes affichées à l'écran.

Lire du JSON dans Next.js

Routes d'API = code côté serveur dans Next.js

💻 Votre page fetch("/api/tasks") Route d'API app/api/tasks/route.ts GET() lit le fichier JSON Renvoie les données en JSON Fichier JSON (base de données) data/tasks.json [{title: "Study..."}, ...] Conservé sur le disque
// src/app/api/tasks/route.ts
import { readFileSync } from 'fs';

export async function GET() {
  const data = readFileSync('data/tasks.json', 'utf-8');
  return Response.json(JSON.parse(data));
}
Créer un fichier = créer une API. app/api/tasks/route.ts devient /api/tasks. La même magie du routage par fichiers que pour les pages !

Construire des fonctionnalités avec Antigravity

Une méthode simple en 4 étapes pour chaque fonctionnalité

📝 1. Décrire Soyez précis. Citez Figma + l'issue GitHub 🤖 2. L'IA réalise Antigravity crée fichiers et code 🧪 3. Vérifier et tester Ouvrez le navigateur, cliquez, vérifiez ✓ 4. Fermer l'issue Terminée sur GitHub Fonctionnalité suivante

Exemple de prompt pour une fonctionnalité

« Je travaille sur l'issue GitHub #3 : page de liste des tâches.
D'après ma maquette Figma, construis une page /tasks qui affiche
toutes les tâches de data/tasks.json sous forme de cartes avec titre,
échéance, badge de priorité et case à cocher de réalisation. »
Une issue à la fois. N'essayez pas de tout construire d'un coup. Terminez une fonctionnalité, testez-la, fermez l'issue, puis passez à la suivante.

Démo : ajouter la création de tâches

DÉMO EN DIRECT : l'enseignant montre

Nouvelle tâche Titre Réviser l'examen de maths Échéance 2026-03-25 Priorité Haute ▼ Créer la tâche

Prompt pour Antigravity

Crée un formulaire dans src/app/tasks/new/page.tsx avec les champs
titre, échéance et priorité (low/medium/high).
À la validation, fais un POST vers /api/tasks, qui ajoute la tâche à tasks.json.
Redirige vers /tasks une fois la création réussie.

Démo : ajouter la liste des tâches

DÉMO EN DIRECT : l'enseignant montre

  • Demander à Antigravity de créer une page de liste des tâches
  • Récupérer les données depuis /api/tasks
  • Afficher les tâches sous forme de cartes stylées
  • Itérer : améliorer le style, ajouter des filtres

Prompt : « Récupère /api/tasks et affiche le résultat sous forme de cartes »

Affiche, pour chaque tâche, le titre, l'échéance, le badge de priorité et la case à cocher de réalisation.

Développement itératif : construire, tester, améliorer. La première version n'est jamais parfaite. Chaque prompt affine le résultat : meilleur style, plus de fonctionnalités, moins de bugs. C'est ainsi que fonctionne le vrai développement.

Fermer les issues GitHub

Suivez votre avancement en fermant le travail terminé

! Issue ouverte « Page de liste des tâches » #3 • feature La réaliser Ajouter un commentaire « Page de liste des tâches réalisée : cartes, cases à cocher, badges de priorité. Déployée sur Vercel. » La fermer ✓ Fermée ! Avancement visible par l'enseignant Historique de votre travail

Quand une fonctionnalité est terminée

  • Allez sur votre dépôt GitHub
  • Ouvrez l'issue que vous avez terminée
  • Ajoutez un commentaire qui décrit ce qui a été fait
  • Cliquez sur « Close issue » (fermer l'issue)

Pourquoi c'est important

  • Votre projet reste organisé
  • Votre équipe et l'enseignant voient l'avancement
  • Cela crée un historique de ce qui a été construit, et quand
  • C'est une habitude professionnelle, pratiquée dans toutes les entreprises
Objectif du jour : fermer au moins 2 issues GitHub, avec des commentaires qui décrivent le travail réalisé.

Complément : qu'est-ce que l'authentification ?

Savoir qui utilise votre application

Authentification

Qui êtes-vous ?
Vérifier l'identité par e-mail et mot de passe, Google, etc.

Autorisation

Que pouvez-vous faire ?
Contrôler qui peut lire, écrire ou supprimer des données

Session

Rester connecté
Un jeton stocké dans le navigateur se souvient de vous

Multi-utilisateur

Partagé mais personnel
Chaque utilisateur voit ses propres données dans un espace partagé

Pourquoi est-ce important ? Sans authentification, chaque visiteur est anonyme. Impossible d'enregistrer des données personnelles ou de limiter qui modifie quoi.

Firebase : votre back-end en quelques minutes

La plateforme de Google pour créer des applications sans gérer de serveurs

Firebase Auth

Une authentification prête à l'emploi : e-mail et mot de passe, Google, GitHub, numéro de téléphone. Elle gère l'inscription, la connexion, la réinitialisation du mot de passe et les sessions.

Firestore

Base de données NoSQL en temps réel. Les données se synchronisent instantanément entre tous les clients connectés. Elle est organisée en collections et documents (comme des dossiers et des fichiers).

Offre gratuite

Une offre gratuite généreuse : 50 000 utilisateurs authentifiés par mois, 1 Go de stockage Firestore, 50 000 lectures par jour. Largement suffisant pour apprendre et pour de petits projets.

Pourquoi Firebase ? Construire son propre système d'authentification est complexe et source d'erreurs. Firebase gère le hachage des mots de passe, les jetons et la sécurité, pour que vous vous concentriez sur votre application.

Comment fonctionne Firebase Auth

Le parcours de connexion en 4 étapes

1. Connexion E-mail + mot de passe ou bouton Google 2. Firebase vérifie Contrôle les identifiants Renvoie un jeton JWT 3. Jeton stocké Gardé par le navigateur Renouvelé tout seul 4. Utilisateur identifié user.uid disponible dans chaque requête import { signInWithEmailAndPassword } from 'firebase/auth' const result = await signInWithEmailAndPassword (auth, email, password) // result.user.uid → unique identifier for this user

Firestore : des données en temps réel

Une base de données qui se synchronise instantanément entre tous les utilisateurs

schools (collection) my-school (document) other-school ... events (sous-collection) userId:"abc123" title:"Math Lecture" day:"mon", startHour: 9, endHour: 11 type:"class", color: "#a855f7" Temps réel avec onSnapshot() Quand Alice ajoute un événement, le navigateur de Bob se met à jour tout seul, sans rafraîchir la page. Firestore envoie les modifications à tous les clients connectés via WebSocket.

Multi-utilisateur : comment tout s'assemble

Auth + Firestore = partagé mais personnel

1. Connexion

Chaque étudiant se connecte avec son e-mail. Firebase lui attribue un user.uid unique.

2. Écrire des événements

Quand un utilisateur ajoute un événement, celui-ci est enregistré avec son userId. C'est l'étiquette de propriété.

3. Lire tous les événements

Chaque utilisateur voit tous les événements de l'école. Le calendrier affiche l'emploi du temps de tout le monde.

4. Modifier les siens uniquement

Un utilisateur ne peut modifier ou supprimer que les événements où userId === currentUser.uid. Les autres sont en lecture seule.

Principe clé : l'authentification répond à « qui est cet utilisateur ? » ; l'autorisation répond à « que peut faire cet utilisateur ? ». Une application multi-utilisateur a besoin des deux.

Les livrables du jour

À la fin de la journée, vous devez avoir terminé les 6

1

Application lancée en local
npm run dev fonctionne sur localhost:3000

2

Au moins 3 pages
Accueil + tâches + planning

3

Base de données JSON
Lecture et écriture via des routes d'API

4

Déployée sur Vercel
Une URL en ligne accessible à tous

5

Firebase Auth
Connexion, inscription + écran de planning multi-utilisateur

6

2 issues fermées ou plus
Avec des commentaires sur ce qui a été fait

Point d'étape : levez la main quand vous avez les 6 livrables. L'enseignant les vérifiera et vous fera ses retours.

À vous de pratiquer !

Construisez votre première application web

TP 2

Construire votre première application web

Ouvrir le TP →

8 exercices

Installer, construire, déployer, peaufiner

5 à 6 heures

Pratique guidée

Débutant

Suivez les instructions pas à pas

N'oubliez pas : le but n'est pas de mémoriser du code, mais de comprendre la démarche. Antigravity écrit le code ; vous pilotez le projet.

Bonus : planning multi-utilisateur

Pour ceux qui ont fini en avance ou qui veulent un défi supplémentaire

Exercice bonus

Écran de planning partagé de l'école avec Firebase

Ouvrir l'exercice bonus →

6 étapes

Configuration de Firebase, Auth, Firestore, synchronisation en temps réel

2 à 3 heures

En classe ou à la maison

Intermédiaire

Prolonge le TP 2

Cet exercice reprend les notions Firebase vues dans les diapositives de complément. Plusieurs utilisateurs se connectent, partagent un calendrier hebdomadaire et voient en temps réel les mises à jour de leurs camarades.

Jour 2 terminé !

Ce que vous avez appris aujourd'hui

✓ Comment fonctionne le Web (HTTP, client/serveur)
✓ Les bases de HTML, CSS et JavaScript
✓ Next.js : routage par fichiers et routes d'API
✓ Antigravity : le développement piloté par l'IA
✓ Vercel : le déploiement en un clic
✓ Des fichiers JSON comme base de données simple
✓ Firebase Auth et Firestore : applications multi-utilisateurs en temps réel
✓ Le cycle complet construire → tester → déployer

Jours 3 et 4 : VOTRE projet ! Avec votre binôme, vous allez concevoir, construire et déployer votre propre application à partir de zéro. Jour 5 : Journée de démo, vous présenterez votre création à la classe !

Vue d'ensemble des diapositives