404 personnalisée avec jeux arcade
Une page 404 personnalisée qui mérite qu’on se perde
La plupart des pages d’erreur 404 affichent un message laconique et un lien de retour à l’accueil. C’est fonctionnel, mais c’est une occasion manquée. Plutôt que de laisser le visiteur repartir les mains vides, pourquoi ne pas lui proposer de patienter avec un jeu ?
C’est l’idée derrière cette page d’erreur disponible à l’adresse 404.md.lu — un fichier HTML unique, autonome, sans dépendance externe, qui transforme l’erreur en expérience.

Ce que contient cette page 404 personnalisée
Deux jeux intégrés
Snake — le classique des classiques. Le serpent grandit à chaque pomme avalée, le score s’affiche en temps réel. Contrôlable au clavier (touches directionnelles + espace pour démarrer) ou au toucher sur mobile.
2048 — le jeu de fusion de tuiles. Les flèches directionnelles ou un simple swipe suffisent à déplacer les tuiles. L’objectif : atteindre la tuile 2048 en combinant les valeurs identiques.
Les deux jeux s’ouvrent dans un modal plein écran, sans quitter la page.
Détection automatique de la langue
La page détecte la langue du navigateur du visiteur et adapte tous les textes en conséquence. Quatre langues sont supportées : français, anglais, allemand et portugais. En l’absence de correspondance, l’anglais est utilisé par défaut.
Cinq thèmes visuels
Un menu de thèmes est accessible via un appui long sur le « 404 » central ou en cliquant sur l’icône ⚙ en bas à droite. Cinq ambiances sont disponibles :
- Midnight — bleu électrique sur fond quasi-noir
- Carbon — monochrome, contraste blanc sur noir
- Forest — vert émeraude sur fond sombre
- Crimson — rouge bordeaux, ambiance chaleureuse
- Aurora — dégradé violet-cyan, inspiré des aurores boréales
Le thème choisi est mémorisé via localStorage et appliqué automatiquement à la prochaine visite.
IP du visiteur en footer
Le footer affiche discrètement l’adresse IP publique du visiteur, récupérée via l’API ipify.org. Un détail technique qui rappelle subtilement que la page sait d’où vient la requête.
Détails techniques
La page repose sur un unique fichier 404.html d’environ 20 ko. Aucune dépendance npm, aucun framework, aucun build nécessaire. Les polices sont chargées depuis Google Fonts (Space Mono et Syne).
Le déploiement utilisé ici repose sur :
- Un container Docker avec une image
nginx:alpinequi sert le fichier statique - Nginx Proxy Manager comme reverse proxy, avec certificat Let’s Encrypt automatique
- Le container est défini comme Default Site dans NPM — il intercepte toutes les requêtes vers des hôtes inconnus
services:
404-page:
image: nginx:alpine
container_name: 404-page
restart: unless-stopped
volumes:
- ./404.html:/usr/share/nginx/html/index.html:ro
expose:
- "80"
Code source
Le code complet est disponible dans l’accordéons ci-dessous. Il suffit de le placer dans un dossier servi par n’importe quel serveur web, Apache, Nginx, ou même directement ouvert dans un navigateur pour tester en local.
Personnalisation rapide
Quelques lignes à modifier pour adapter la page à un autre contexte :
- Lien footer : remplacer
https://iav.lupar l’URL souhaitée - Couleurs des thèmes : modifier les variables CSS dans les blocs
[data-theme="..."] - Langues : ajouter une entrée dans l’objet
i18navec le code ISO de la langue cible - Vitesse du Snake : modifier la valeur
120(en millisecondes) danssetInterval(stepSnake, 120)



