diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c8d5080eda03670f8101d1b002035a926e11bd8c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+# WSR Website
+## Python & paquet à installer
+Il est nécessaire d'avoir python > 3.10, ainsi que les paquets suivants :
+
+- Django
+- Pillow
+- django-compressor
+- django-libsass
\ No newline at end of file
diff --git a/WSR/admin.py b/WSR/admin.py
index 2a282912958622d090e1a596d34b42c2f3ac6cea..f4d8e906f2bc753d40ea03a97eaa8a6ea7a92807 100644
--- a/WSR/admin.py
+++ b/WSR/admin.py
@@ -8,5 +8,4 @@ admin.site.register(Race)
 admin.site.register(Result)
 admin.site.register(Vehicle)
 admin.site.register(Driver)
-admin.site.register(Participation)
 admin.site.register(Season)
\ No newline at end of file
diff --git a/WSR/migrations/0015_alter_race_circuit_alter_race_location_and_more.py b/WSR/migrations/0015_alter_race_circuit_alter_race_location_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..bf08aa2af8107a16d06cf59c74420e1cc23dafb0
--- /dev/null
+++ b/WSR/migrations/0015_alter_race_circuit_alter_race_location_and_more.py
@@ -0,0 +1,26 @@
+# Generated by Django 4.2.2 on 2023-06-12 13:38
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('WSR', '0014_alter_race_circuit'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='race',
+            name='circuit',
+            field=models.CharField(choices=[('Pacfic Way', 'Pacific Way'), ('Marina City', 'Marina City'), ('Boucle Art Deco', 'Art Deco'), ('Ocean Drive', 'Ocean Drive'), ('Lake Shore Point', 'Lake Shore Point'), ('Le Trocadéro', 'Trocadero'), ('Boucle de la fontaine', 'Fontaine'), ('Route de la corniche', 'Corniche'), ('Baie de colombe', 'Colombe Bay'), ('Champs Elysées', 'Champs Elysees'), ('Villefranche-sur-mer', 'Villefranche'), ('Liveroutes', 'Liveroutes'), ('La turbie', 'Turbie'), ('Ap Lei Chau', 'Ap Lei Chau'), ('Route des Toriis', 'Torris'), ('Pok Fu Lam', 'Pok Fu Lam'), ('Col Sakura', 'Sakura'), ('Boucle du quai Orra', 'Orra Loop'), ('Voie Hattan', 'Hattan Way'), ('Belvédère de Nakheel', 'Nakheel'), ('Circuit GP', 'Circuit Gp')], max_length=100),
+        ),
+        migrations.AlterField(
+            model_name='race',
+            name='location',
+            field=models.CharField(choices=[('Californie', 'Califoria'), ('Chicago', 'Chicago'), ('Miami', 'Miami'), ('Paris', 'Paris'), ('Barcelone', 'Barcelona'), ("Côte d'Azur", 'Cot'), ('Hong Kong', 'Hong Kong'), ('Okutama', 'Okutama'), ('Dubaï', 'Dubai'), ('Yas Marina', 'Yas Marina')], max_length=100),
+        ),
+        migrations.DeleteModel(
+            name='Participation',
+        ),
+    ]
diff --git a/WSR/migrations/0016_vehicle_image_alter_driver_vehicle_and_more.py b/WSR/migrations/0016_vehicle_image_alter_driver_vehicle_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..94cf6c6362d4825a46c868f2f6dd7f8810b1e62d
--- /dev/null
+++ b/WSR/migrations/0016_vehicle_image_alter_driver_vehicle_and_more.py
@@ -0,0 +1,54 @@
+# Generated by Django 4.2.2 on 2023-06-12 17:04
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('WSR', '0015_alter_race_circuit_alter_race_location_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='vehicle',
+            name='image',
+            field=models.ImageField(blank=True, default='', upload_to='vehicles', verbose_name="Image d'illustration"),
+        ),
+        migrations.AlterField(
+            model_name='driver',
+            name='vehicle',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='WSR.vehicle', verbose_name='Véhicule'),
+        ),
+        migrations.AlterField(
+            model_name='race',
+            name='finishing_position',
+            field=models.PositiveIntegerField(verbose_name="Position d'arrivée"),
+        ),
+        migrations.AlterField(
+            model_name='race',
+            name='image',
+            field=models.ImageField(upload_to='race_images', verbose_name="Image d'illustration"),
+        ),
+        migrations.AlterField(
+            model_name='result',
+            name='finishing_position',
+            field=models.PositiveIntegerField(verbose_name="Position d'arrivée"),
+        ),
+        migrations.AlterField(
+            model_name='result',
+            name='starting_position',
+            field=models.PositiveIntegerField(verbose_name='Position de départ'),
+        ),
+        migrations.AlterField(
+            model_name='vehicle',
+            name='fabrication_year',
+            field=models.PositiveIntegerField(verbose_name='Année de fabrication'),
+        ),
+        migrations.AlterField(
+            model_name='vehicle',
+            name='model',
+            field=models.CharField(max_length=100, verbose_name='Modèle'),
+        ),
+    ]
diff --git a/WSR/models.py b/WSR/models.py
index e00f820a0096ed548b5fd3fc05bc9577cbb1b3d6..31b450a689ef1b2fc96503e121f6bea170ab9609 100644
--- a/WSR/models.py
+++ b/WSR/models.py
@@ -12,7 +12,7 @@ class Season(models.Model):
 
 class Driver(models.Model):
     name = models.CharField(max_length=100)
-    vehicle = models.ForeignKey('Vehicle', on_delete=models.CASCADE, verbose_name="Vehicle")
+    vehicle = models.ForeignKey('Vehicle', on_delete=models.CASCADE, verbose_name="Véhicule")
 
     def __str__(self):
         return self.name
@@ -20,8 +20,9 @@ class Driver(models.Model):
 
 class Vehicle(models.Model):
     brand = models.CharField(max_length=100)
-    model = models.CharField(max_length=100, verbose_name="Model")
-    fabrication_year = models.PositiveIntegerField(verbose_name="Fabrication Year")
+    model = models.CharField(max_length=100, verbose_name="Modèle")
+    fabrication_year = models.PositiveIntegerField(verbose_name="Année de fabrication")
+    image = models.ImageField(upload_to='vehicles', default="", blank=True, verbose_name="Image d'illustration")
 
     def __str__(self):
         return f"{self.brand} {self.model}"
@@ -54,6 +55,7 @@ class Race(models.Model):
         HONG_KONG= "Hong Kong"
         OKUTAMA = "Okutama"
         DUBAI = "Dubaï"
+        YAS_MARINA = "Yas Marina"
 
     class Circuits(models.TextChoices):
         PACIFIC_WAY = "Pacfic Way"
@@ -76,12 +78,13 @@ class Race(models.Model):
         ORRA_LOOP = "Boucle du quai Orra"
         HATTAN_WAY = "Voie Hattan"
         NAKHEEL = "Belvédère de Nakheel"
+        CIRCUIT_GP = "Circuit GP"
 
     location = models.CharField(max_length=100, choices=Locations.choices)
     circuit = models.CharField(max_length=100, choices=Circuits.choices)
-    finishing_position = models.PositiveIntegerField(verbose_name="Finishing Position")
+    finishing_position = models.PositiveIntegerField(verbose_name="Position d'arrivée")
     season = models.ForeignKey(Season, on_delete=models.CASCADE)
-    image = models.ImageField(upload_to='race_images', verbose_name="Illustration Image")
+    image = models.ImageField(upload_to='race_images', verbose_name="Image d'illustration")
     type = models.CharField(max_length=100, choices=RaceType.choices, default=RaceType.SINGLE_RACE)
     participation_type = models.CharField(
         max_length=100,
@@ -107,19 +110,10 @@ class Article(models.Model):
 class Result(models.Model):
     driver = models.ForeignKey(Driver, on_delete=models.CASCADE)
     race = models.ForeignKey(Race, on_delete=models.CASCADE)
-    finishing_position = models.PositiveIntegerField(verbose_name="Finishing Position")
-    starting_position = models.PositiveIntegerField(verbose_name="Starting Position")
+    finishing_position = models.PositiveIntegerField(verbose_name="Position d'arrivée")
+    starting_position = models.PositiveIntegerField(verbose_name="Position de départ")
     score = models.IntegerField()
 
     def __str__(self):
         return f"{self.driver} - {self.race}"
 
-
-class Participation(models.Model):
-    season = models.ForeignKey(Season, on_delete=models.CASCADE)
-    race = models.ForeignKey(Race, on_delete=models.CASCADE)
-    drivers = models.ManyToManyField(Driver)
-
-    def __str__(self):
-        return f"{self.season} - {self.race}"
-
diff --git a/WSR/static/images/codemastersracing.png b/WSR/static/images/codemastersracing.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc16d3549bd09af8afd0162f77c99873b25abd4a
Binary files /dev/null and b/WSR/static/images/codemastersracing.png differ
diff --git a/WSR/static/scss/components.scss b/WSR/static/scss/components.scss
index ec14160fa7b5c490e216c1f1ef540ed6d3ac71a2..436f638101e6bc667ec1e286f206b87ef0037317 100644
--- a/WSR/static/scss/components.scss
+++ b/WSR/static/scss/components.scss
@@ -166,6 +166,7 @@
     flex-direction: column;
     padding: 32px 24px;
     background-color: $white;
+    width: 1076px;
 
     .news-cards {
       display: grid;
diff --git a/WSR/templates/base.html b/WSR/templates/base.html
new file mode 100644
index 0000000000000000000000000000000000000000..5fd82788a4fe787b8ecd156f965f0b2b6ca9d2fb
--- /dev/null
+++ b/WSR/templates/base.html
@@ -0,0 +1,74 @@
+{% load static %}
+{% load compress %}
+{% load is_active %}
+
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+    <meta charset="UTF-8">
+    <title>World Series Racing</title>
+    {% compress css %}
+        <link type="text/x-scss" href="{% static 'scss/app.scss' %}" rel="stylesheet" media="screen">
+    {% endcompress %}
+</head>
+<body>
+<header class="container">
+    <a class="logo" href="/">
+        <img src="{% static 'images/WSR.png' %}" alt="Logo WSR">
+    </a>
+    <nav class="navbar">
+        <a class="link {% is_active request 'home' %}" href="{% url 'home' %}">Page d’accueil</a>
+        <a class="link {% is_active request 'races_types' %}" href="{% url 'races_types' %}">Épreuves</a>
+        <a class="link {% is_active request 'vehicles' %}" href="{% url 'vehicles' %}">Nos Véhicules</a>
+        <a class="link {% is_active request 'seasons' %}" href="{% url 'seasons' %}">Anciennes saisons</a>
+    </nav>
+</header>
+
+{% block content %}{% endblock %}
+
+<footer class="container">
+    <div class="row">
+        <div class="col">
+            <div class="logo">
+                <img src="{% static 'images/WSR.png' %}" alt="Logo WSR">
+            </div>
+        </div>
+        <div class="col">
+            <p>Copyright 2023 - World Series Racing ou “WSR” est une marque déposée par Codemasters. <br>Ceci est un
+                projet
+                à titre scolaire.</p>
+        </div>
+        <div class="col">
+            <a href="https://www.codemasters.com/" target="_blank">
+                <img src="{% static 'images/codemastersracing.png' %}" alt="Logo Codemasters" width="128">
+            </a>
+        </div>
+        <div class="col">
+            <p>Juin 2023 - Sofiane LASRI-TRIENPONT<br><a href="/admin">Connexion à l'administration</a></p>
+        </div>
+    </div>
+</footer>
+<script type="text/javascript">
+    // Si le footer n'est pas tout en bas de la page car il y a peu de contenu
+    // On le place tout en bas de la page
+    function footerPosition() {
+        const footer = document.querySelector("footer");
+        const windowHeight = window.innerHeight;
+        const bodyHeight = document.body.offsetHeight;
+
+        if (bodyHeight < windowHeight) {
+            footer.style.position = 'absolute';
+            footer.style.bottom = '0';
+        } else {
+            footer.style.position = 'relative';
+            footer.style.bottom = '0';
+        }
+    }
+
+    footerPosition();
+
+    window.addEventListener('resize', footerPosition);
+</script>
+{% block javascripts %}{% endblock %}
+</body>
+</html>
\ No newline at end of file
diff --git a/WSR/templates/home.html b/WSR/templates/home.html
index 606086ce1ceeb18d214c8cc2a2810c48b21f617f..3fab97a0e1d2975dac59163ff3ae39f60f48bc8d 100644
--- a/WSR/templates/home.html
+++ b/WSR/templates/home.html
@@ -1,40 +1,13 @@
+{% extends 'base.html' %}
 {% load static %}
-{% load compress %}
-
-<!DOCTYPE html>
-<html lang="fr">
-<head>
-    <meta charset="UTF-8">
-    <title>World Series Racing</title>
-    {% compress css %}
-        <link type="text/x-scss" href="{% static 'scss/app.scss' %}" rel="stylesheet" media="screen">
-    {% endcompress %}
-</head>
-<body>
-<header class="container">
-    <a class="logo" href="/">
-        <img src="{% static 'images/WSR.png' %}" alt="Logo WSR">
-    </a>
-    <nav class="navbar">
-        <a class="link active" href="/">Page d’accueil</a>
-        <a class="link" href="#">Épreuves</a>
-        <a class="link" href="#">nos Véhicules</a>
-        <a class="link" href="#">Anciennes saisons</a>
-    </nav>
-</header>
 
+{% block content %}
 <div class="container vitrine">
     <div class="main-frame eurostile">
         <div>
-            {% if race.participation_type == 'invitation' %}
-                <div class="mid">{{ last_race_details.season_name }}</div>
-                <div class="large">{{ last_race_details.race.type_string }} {{ last_race_details.race.name }}</div>
-                <div class="mid">{{ last_race_details.race.location }}, {{ last_race_details.race.circuit }}</div>
-            {% else %}
-                <div class="mid">{{ last_race_details.season_name }}</div>
-                <div class="large">{{ last_race_details.race.location }}</div>
-                <div class="mid">{{ last_race_details.race.circuit }}</div>
-            {% endif %}
+            <div class="mid">{{ last_race_details.season_name }}</div>
+            <div class="large">{{ last_race_details.race.location }}</div>
+            <div class="mid">{{ last_race_details.race.circuit }}</div>
         </div>
         <div class="detail">
             {% for stat in last_race_details.results %}
@@ -84,51 +57,132 @@
     <div class="d-flex">
         <div class="menu flex-grow-1">
             <h4 class="eurostile title">Menu</h4>
-            <a class="link active" href="#">Actualité WSR</a>
-            <a class="link" href="#">Résultats des courses</a>
-            <a class="link" href="#">Participations</a>
+            <a class="link active" href="#" id="news" data-type="changePageContent">Actualité WSR</a>
+            <a class="link" href="#" id="racesResults" data-type="changePageContent">Résultats des courses</a>
+            <a class="link" href="#" id="calendar" data-type="changePageContent">Calendrier</a>
         </div>
-        <div class="content">
-            <h4 class="eurostile title">Actualité WSR</h4>
+        <div class="content" id="pageContent">
+            <div id="newsContainer">
+                <h4 class="eurostile title">Actualité WSR</h4>
 
-            <div class="news-cards">
-                {% for article in six_last_articles %}
-                    <div class="news-card">
-                        <div class="header">
-                            <div class="logo">
-                                <img src="{% static 'images/WSR.png' %}" alt="Logo WSR">
+                <div class="news-cards">
+                    {% for article in six_last_articles %}
+                        <div class="news-card">
+                            <div class="header">
+                                <div class="logo">
+                                    <img src="{% static 'images/WSR.png' %}" alt="Logo WSR">
+                                </div>
+                            </div>
+                            <div class="mt-3">
+                                <div class="eurostile">{{ article.title }}</div>
+                                <div class="desc">{{ article.summary }}</div>
                             </div>
                         </div>
-                        <div class="mt-3">
-                            <div class="eurostile">{{ article.title }}</div>
-                            <div class="desc">{{ article.summary }}</div>
-                        </div>
-                    </div>
+                    {% endfor %}
+                </div>
+                <div class="d-flex justify-content-end">
+                    <a class="btn" href="#">Voir tout</a>
+                </div>
+            </div>
+            <div id="racesResultsContainer" style="display: none;">
+                <h4 class="eurostile title">Résultat des courses</h4>
+                {% for race in three_last_races_results %}
+                    <h5>Saison {{ race.race.season_id }} - {{ race.race.location }}, {{ race.race.circuit }}</h5>
+                    <table class="table">
+                        <thead>
+                        <tr>
+                            <th scope="col">Position de départ</th>
+                            <th scope="col">Position d'arrivée</th>
+                            <th scope="col">Score</th>
+                            <th scope="col">Pilote</th>
+                            <th scope="col">Véhicule</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        {% for result in race.results %}
+                            <tr>
+                                <th>{{ result.starting_position }}</th>
+                                <th scope="row">{{ result.finishing_position }}</th>
+                                <td>{{ result.score }}</td>
+                                <td>{{ result.driver_name }}</td>
+                                <td>{{ result.vehicle_brand }} {{ result.vehicle_model }}</td>
+                            </tr>
+                        {% endfor %}
+                        </tbody>
+                    </table>
                 {% endfor %}
+                <div class="d-flex justify-content-end">
+                    <a class="btn" href="#">Voir tout</a>
+                </div>
             </div>
-            <div class="d-flex justify-content-end">
-                <a class="btn" href="#">Voir tout</a>
+            <div id="calendarContainer" style="display: none;">
+                <h4 class="eurostile title">Calendrier des courses</h4>
+                <p>Nous sommes désolés, mais cet onglet n'est pas encore opérationnel.</p>
             </div>
         </div>
     </div>
 </div>
-<footer class="container">
-    <div class="row">
-        <div class="col">
-            <div class="logo">
-                <img src="{% static 'images/WSR.png' %}" alt="Logo WSR">
-            </div>
-        </div>
-        <div class="col">
-            <p>Copyright 2023 - World Series Racing ou “WSR” est une marque déposée par Codemasters. <br>Ceci est un
-                projet
-                à titre scolaire.</p>
-        </div>
-        <div class="col"></div>
-        <div class="col">
-            <p>Juin 2023 - Sofiane LASRI-TRIENPONT<br><a href="/admin">Connexion à l'administration</a></p>
-        </div>
-    </div>
-</footer>
-</body>
-</html>
\ No newline at end of file
+{% endblock %}
+{% block javascripts %}
+<script type="text/javascript">
+    const links = document.querySelectorAll("[data-type='changePageContent']");
+    const containers = {};
+
+    function hideAllContainers() {
+        for (var container in containers) {
+            containers[container].style.display = 'none';
+        }
+    }
+
+    function showContainer(container) {
+        hideAllContainers();
+        container.style.display = 'block';
+    }
+
+    function setActiveLink(link) {
+        for (var i = 0; i < links.length; i++) {
+            links[i].classList.remove('active');
+        }
+        link.classList.add('active');
+    }
+
+    function getUrlParameter(name) {
+        name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]');
+        const regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
+        const results = regex.exec(location.search);
+        return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
+    }
+
+    links.forEach(function (link) {
+        link.addEventListener('click', function (event) {
+            event.preventDefault();
+            setActiveLink(link);
+
+            var linkId = link.getAttribute('id');
+            var containerId = linkId + 'Container';
+            var container = document.getElementById(containerId);
+            if (container) {
+                showContainer(container);
+                history.replaceState(null, null, '?content=' + linkId);
+            }
+        });
+    });
+
+    links.forEach(function (link) {
+        const linkId = link.getAttribute('id');
+        const containerId = linkId + 'Container';
+        const container = document.getElementById(containerId);
+        if (container) {
+            containers[containerId] = container;
+        }
+    });
+
+    const contentParam = getUrlParameter('content');
+    if (contentParam !== '') {
+        const targetLink = document.getElementById(contentParam);
+        if (targetLink) {
+            targetLink.click();
+        }
+    }
+</script>
+{% endblock %}
\ No newline at end of file
diff --git a/WSR/templatetags/__init__.py b/WSR/templatetags/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/WSR/templatetags/is_active.py b/WSR/templatetags/is_active.py
new file mode 100644
index 0000000000000000000000000000000000000000..819ee40a500d2b389d4082cc2b385d092240d18a
--- /dev/null
+++ b/WSR/templatetags/is_active.py
@@ -0,0 +1,11 @@
+from django import template
+from django.urls import reverse
+
+register = template.Library()
+
+
+@register.simple_tag
+def is_active(request, url_name):
+    if request.path == reverse(url_name):
+        return 'active'
+    return ''
diff --git a/WSR/views.py b/WSR/views.py
index 2c6571455acf85d83d18fe06c1addd0ce0d69359..978f3443086237d5b0ba7687e787284292c19276 100644
--- a/WSR/views.py
+++ b/WSR/views.py
@@ -86,3 +86,18 @@ def home(request):
             "three_last_races_results": three_last_races_results
         }
     )
+
+
+def view_article(request, id):
+    article = Article.objects.get(id)
+    return None
+
+
+def races_types(request):
+    return None
+
+def vehicles(request):
+    return None
+
+def seasons(request):
+    return None
\ No newline at end of file
diff --git a/WSR_website/urls.py b/WSR_website/urls.py
index 78237f0022f573722c77aa7c354e97f77fdfdca1..4779a3221d32e63fcc592455178992e6f272d5ce 100644
--- a/WSR_website/urls.py
+++ b/WSR_website/urls.py
@@ -23,7 +23,11 @@ from WSR import views
 
 urlpatterns = [
     path('admin/', admin.site.urls),
-    path('', views.home)
+    path('', views.home, name="home"),
+    path('article/<int:id>', views.view_article, name="article"),
+    path('races-types', views.races_types, name="races_types"),
+    path('vehicles', views.vehicles, name="vehicles"),
+    path('seasons', views.seasons, name="seasons")
 ]
 
-urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
\ No newline at end of file
+urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)