diff --git a/accounts/views.py b/accounts/views.py
index 14047c091a8febd68a3b4deae8345b96b21ae5c9..aba8c83d29d66b58399757dc43d5b02bd7026a17 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -69,6 +69,10 @@ class ProfileView(LoginRequiredMixin, TemplateView):
 		return context
 
 
+# ==============================
+# Create Account
+# ==============================
+
 
 class CreateAccountView(View):
 	"""Vue pour la creation de compte"""
diff --git a/home/static/css/style.css b/home/static/css/style.css
index 2e0764f10da59bb040eafb1b734160a301c2dfd7..b13a1b9c9f0d74a37dcc87174590e158c50cbc8a 100644
--- a/home/static/css/style.css
+++ b/home/static/css/style.css
@@ -146,6 +146,25 @@ main a:link {
 	text-decoration: underline;
 	color: rgb(62, 62, 255);
 }
+.lines {
+	border-top: 2px solid #333;
+	border-bottom: 2px solid #333;
+	justify-content: left
+}
+.stat {
+	min-width: 120px;
+	text-align: center;
+	padding: 5px;
+}
+.stat .qty {
+	font-size: 1.2em;
+}
+.stat .nb_big {
+	font-size: 3em;
+}
+.stat .nb_small {
+	font-size: 2em;
+}
 
 dl {
 	list-style: none;
@@ -173,6 +192,10 @@ span.helptext {
 .flex {
 	display: flex;
 }
+.wrap {
+	flex-flow: row wrap;
+	flex-wrap: wrap;
+}
 
 .antispam {
 	unicode-bidi: bidi-override;
diff --git a/home/urls.py b/home/urls.py
index 70f8389e161f583ca0e5eb152878fe4bbcd42959..ae41ff2ff60e9c3ed2c633040cc8a78262169578 100644
--- a/home/urls.py
+++ b/home/urls.py
@@ -13,6 +13,7 @@ urlpatterns = [
 	path('activites/', views.ActivityView.as_view(), {"template":"activites.html"}, name = 'activites'),
 	path('faq/', views.FAQView.as_view(), {"template":"faq.html"}, name = 'FAQ'),
 	path('favicon.ico', RedirectView.as_view(url='/static/imgs/favicon.ico')),
+	path('metrics/', views.MetricsView.as_view(), name="metrics"),
 	path(
 		'sitemap.xml', sitemap, {'sitemaps': sitemaps},
 		name='django.contrib.sitemaps.views.sitemap'
diff --git a/home/views.py b/home/views.py
index aece1365215def25df669601a96ada095663700b..caf6529a37674e5d8b60228e03a1de88bb602b14 100644
--- a/home/views.py
+++ b/home/views.py
@@ -6,9 +6,16 @@ from django.shortcuts import redirect, render
 from django.urls import reverse
 from django.views.generic import RedirectView, UpdateView, TemplateView, View
 
-from home.models import ActivityList, InterludesActivity
+from accounts.models import EmailUser
+from home.models import ActivityList, InterludesActivity, InterludesParticipant
 from home.forms import ActivityForm, BaseActivityFormSet, InscriptionForm
 from site_settings.models import SiteSettings
+from shared.views import SuperuserRequiredMixin
+
+
+# ==============================
+# Site static pages
+# ==============================
 
 
 class HomeView(TemplateView):
@@ -32,6 +39,11 @@ class FAQView(TemplateView):
 	template_name = "faq.html"
 
 
+# ==============================
+# Registration
+# ==============================
+
+
 class RegisterClosed(TemplateView):
 	"""Vue pour quand les inscriptions ne sont pas ouvertes"""
 	template_name = "inscription/closed.html"
@@ -109,6 +121,46 @@ class UnregisterView(LoginRequiredMixin, RedirectView):
 		return reverse(self.pattern_name)
 
 
+# ==============================
+# Admin views
+# ==============================
+
+
+class MetricsView(SuperuserRequiredMixin, TemplateView):
+	template_name = "metrics.html"
+
+	def get_metrics(self):
+		registered = InterludesParticipant.objects.filter(is_registered = True)
+		class metrics:
+			participants = registered.count()
+			ulm = registered.filter(school="U").count()
+			lyon = registered.filter(school="L").count()
+			rennes = registered.filter(school="R").count()
+			saclay = registered.filter(school="P").count()
+			non_registered = EmailUser.objects.filter(is_active=True).count() - participants
+
+			meal1 = registered.filter(meal_friday_evening=True).count()
+			meal2 = registered.filter(meal_saturday_morning=True).count()
+			meal3 = registered.filter(meal_saturday_midday=True).count()
+			meal4 = registered.filter(meal_saturday_evening=True).count()
+			meal5 = registered.filter(meal_sunday_morning=True).count()
+			meal6 = registered.filter(meal_sunday_midday=True).count()
+			meals = meal1 + meal2 + meal3 + meal4 + meal5 + meal6
+
+			mugs = registered.filter(mug=True).count()
+			sleeps = registered.filter(sleeps=True).count()
+		return metrics
+
+	def get_context_data(self, *args, **kwargs):
+		context = super().get_context_data(*args, **kwargs)
+		context["metrics"] = self.get_metrics()
+		return context
+
+# ==============================
+# Sitemap
+# ==============================
+
+
 class StaticViewSitemap(Sitemap):
 	"""Vue générant la sitemap.xml du site"""
 	changefreq = 'monthly'
diff --git a/shared/views.py b/shared/views.py
index 91ea44a218fbd2f408430959283f0419c921093e..ae7460b915f7dd9883b846fc1ed2aabbabd538b6 100644
--- a/shared/views.py
+++ b/shared/views.py
@@ -1,3 +1,10 @@
-from django.shortcuts import render
+from django.contrib.auth.mixins import UserPassesTestMixin
 
-# Create your views here.
+class SuperuserRequiredMixin(UserPassesTestMixin):
+	"""Classe restreignant l'accès d'une vue aux superusers"""
+	raise_exception = True
+	permission_denied_message = "Seul les superutilisateurs ont accès à cette page"
+
+	def test_func(self):
+		user = self.request.user
+		return user.is_authenticated and user.is_superuser