[ 0.000 ] Initializing portfolio...

[ 0.212 ] Loading modules... OK

[ 0.445 ] Mounting filesystem... OK

[ 0.673 ] Starting services... OK

[ 0.891 ] Welcome, user.

0%
root@projects:~$ cat ./atelier/README.md
[ 03 ] DEPLOYED 2026

> L'Atelier du Détail

Boutique e-commerce fictive développée de A à Z sans backend réel. Les produits, le panier et le thème du site sont entièrement gérés en localStorage. L'espace admin est protégé par un hash SHA-256 calculé côté client. Projet école en BUT MMI.

HTMLCSSJavaScriptJavaSpring Boot
root@projects:~$ cat ./atelier/pourquoi.txt

L'idée de ce projet, c'était de construire un e-commerce complet sans passer par un backend. Tout ce qu'on attend d'un shop en ligne — catalogue, panier, gestion des stocks, interface admin — devait fonctionner uniquement avec le navigateur. Une contrainte volontaire pour explorer les limites du JavaScript côté client.

La partie la plus intéressante était la sécurisation de l'espace admin : plutôt qu'un vrai système d'authentification serveur, j'ai implémenté une vérification par hash SHA-256. Le mot de passe n'est jamais stocké en clair — seul son hash est comparé, calculé directement dans le navigateur via l'API Web Crypto.

root@projects:~$ cat ./atelier/features.txt

$ Fonctionnalités

  • Catalogue produits dynamique (localStorage)
  • Panier persistant entre les sessions
  • Thème du site configurable depuis l'admin
  • Authentification admin par hash SHA-256

$ Contexte

  • Projet école BUT MMI — Troyes
  • Aucun backend, zero base de données
  • Déployé sur GitHub Pages
  • Java / Spring Boot pour la partie cours associée
root@projects:~$ cat ./atelier/js/admin.js
admin.js
// Vérification du mot de passe admin par SHA-256 (Web Crypto API)
async function checkAdminPassword(input) {
  const encoder = new TextEncoder();
  const data    = encoder.encode(input);
  const hashBuf = await crypto.subtle.digest('SHA-256', data);
  const hashArr = Array.from(new Uint8Array(hashBuf));
  const hashHex = hashArr
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
  return hashHex === ADMIN_HASH;
}
root@projects:~$ ls ./atelier/screenshots/
atelier-du-detail.github.io
[ aucune capture locale — voir le site en direct ] > Ouvrir le site