diff --git a/site-web/acces_base_de_donnees.py b/site-web/acces_base_de_donnees.py
new file mode 100644
index 0000000000000000000000000000000000000000..a68b2dbfacf2f534f92cd83c4ee94d4b179668bd
--- /dev/null
+++ b/site-web/acces_base_de_donnees.py
@@ -0,0 +1,73 @@
+from sqlalchemy.ext.declarative import declarative_base
+
+from sqlalchemy import create_engine
+from sqlalchemy.orm import scoped_session, sessionmaker
+from sqlalchemy import Column, Integer, String
+
+Base = declarative_base()
+
+template = f"""<!DOCTYPE html>
+<html lang="fr">
+  <head>
+    <meta charset="utf-8">
+    <title>Baskets Nike</title>
+  </head>
+  <body>
+    <h1>Liste des modèle Nike disponible</h1>
+    <h2>Le métier d'ingénieur</h2>
+    <p>Bonjour</p>
+    <ol>
+       <li>BAC L</li>
+       <li>BAC ES</li>
+       <li>BAC S</li>
+    <ol>
+    <p><img src="protocole-http.png"></p>
+  </body>
+</html>
+"""
+
+base = """<!DOCTYPE html>
+<html lang="fr">
+  <head>
+    <meta charset="utf-8">
+    <title>Baskets Nike</title>
+  </head>
+  <body>
+    <h1>Liste des modèle Nike disponibles</h1>"""
+
+fin = """</body>
+</html>
+"""
+
+class BasketNike(Base):
+    __tablename__ = 'nike'
+
+    id = Column(Integer, primary_key=True)
+    modele = Column(String)
+    couleur = Column(String)
+    image = Column(String)
+    stock = Column(Integer)
+
+    def __repr__(self):
+        return "{0} : modèle {1}, couleur {2}, stock {3}".format(
+            self.id,
+            self.modele,
+            self.couleur,
+            self.stock
+        )
+
+if __name__ == '__main__':
+    engine = create_engine("sqlite:///basket.db", echo=False)
+    DBSession = scoped_session(sessionmaker())
+    DBSession.configure(bind=engine, autoflush=False, expire_on_commit=False)
+
+    print(base)
+    for b in DBSession.query(BasketNike).all():
+        print(f"""<div>
+        <div id="modele">{b.modele}</div>
+        <div id="stock">couleur: {b.couleur}, stock: {b.stock}</div>
+        <div id="image_basket"><img src="./{b.image}"></div>
+        </div>
+        """)
+
+    print(fin)
diff --git a/site-web/basket.db b/site-web/basket.db
new file mode 100644
index 0000000000000000000000000000000000000000..75c3b0bc68599099ad7c60a28ba5adab625e0ab4
Binary files /dev/null and b/site-web/basket.db differ
diff --git a/site-web/mon_serveur_commerce.py b/site-web/mon_serveur_commerce.py
new file mode 100644
index 0000000000000000000000000000000000000000..0869b2c1fb0ebf9276fc0c2a41ddc52979827892
--- /dev/null
+++ b/site-web/mon_serveur_commerce.py
@@ -0,0 +1,98 @@
+from http.server import BaseHTTPRequestHandler
+import os
+from urllib import parse
+
+from sqlalchemy import create_engine
+from sqlalchemy.orm import scoped_session, sessionmaker
+
+from acces_base_de_donnees import Base, BasketNike
+
+
+engine = create_engine("sqlite:///basket.db", echo=False)
+DBSession = scoped_session(sessionmaker())
+DBSession.configure(bind=engine, autoflush=False, expire_on_commit=False)
+
+
+def pageBasket(marque):
+    base = """<!DOCTYPE html>
+    <html lang="fr">
+    <head>
+    <meta charset="utf-8">
+    <link rel="stylesheet" href="style_commerce.css">
+    <title>Baskets Nike</title>
+    </head>
+    <body>
+    <h1>Liste des modèle Nike disponibles</h1>"""
+    
+    fin = """</body>
+    </html>"""
+
+    message = base
+
+    for b in DBSession.query(BasketNike).all():
+        message += '<div class="fiche">'
+        message += f'<div class="modele">{b.modele}</div>'
+        message += f'<div class="stock">couleur: {b.couleur}, stock: {b.stock}</div>'
+        message += f'<div classs="image_basket"><img src="./{b.image}"></div>'
+        message += '</div>'
+
+    message += fin
+
+    return message
+
+
+class GestionGET(BaseHTTPRequestHandler):
+
+    def recupereFichier(self):
+        self.mime_types = {
+            '.jpeg': ('image/jpeg', 'rb'),
+            '.jpg': ('image/jpg', 'rb'),
+            '.png': ('image/png', 'rb'),
+            '.html': ('text/html', 'r'),
+            '.css': ('text/css', 'r'),
+            '.js': ('application/x-javascript', 'r')
+        }
+        parsed_path = parse.urlparse(self.path)
+
+        filebase, ext = os.path.splitext(os.path.basename(parsed_path.path))
+        # TODO gerer ext vide
+        filename = f'{filebase}{ext}'
+
+        if os.path.exists(filename):
+            mode = self.mime_types[ext][1]
+
+            with open(filename, mode) as f:
+                contenu = f.read()
+        else:
+            if 'basket' in filename:
+                ext = ext if len(ext) > 0 else '.html'
+                return pageBasket('Nike'), ext
+            else:
+                contenu = None
+
+        return contenu, ext
+
+    def do_GET(self):
+        message, ext = self.recupereFichier()
+
+        if message is None:
+            self.send_response(404)
+            self.end_headers()
+        else:
+            mimetype = self.mime_types[ext][0]
+
+            self.send_response(200)
+            self.send_header('Content-Type',
+                            f'{mimetype}; charset=utf-8')
+            self.end_headers()
+            if self.mime_types[ext][1] == 'r':
+                self.wfile.write(message.encode('utf-8'))
+            else:
+                self.wfile.write(message)
+
+
+if __name__ == '__main__':
+    from http.server import HTTPServer
+    server = HTTPServer(('localhost', 8080), GestionGET)
+    print('Starting server, use <Ctrl-C> to stop')
+    server.serve_forever()
diff --git a/site-web/nike_air_force_1.jpeg b/site-web/nike_air_force_1.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..75afb7a583567df9dc8936949aa0e66f3f9fd086
Binary files /dev/null and b/site-web/nike_air_force_1.jpeg differ
diff --git a/site-web/nike_air_max_metallic.jpeg b/site-web/nike_air_max_metallic.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..a748073f5fbbef7abfcfc612c8c61fcf7997aa6c
Binary files /dev/null and b/site-web/nike_air_max_metallic.jpeg differ
diff --git a/site-web/nike_mk2_tekno.jpeg b/site-web/nike_mk2_tekno.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..908858aa4d9a88968a3e677af35887b0dce87dbf
Binary files /dev/null and b/site-web/nike_mk2_tekno.jpeg differ
diff --git a/site-web/style_commerce.css b/site-web/style_commerce.css
new file mode 100644
index 0000000000000000000000000000000000000000..e8c6209152cd21c7f23e2ca8c1382f74723aede7
--- /dev/null
+++ b/site-web/style_commerce.css
@@ -0,0 +1,18 @@
+h1 {
+    color: maroon;
+    border-bottom: solid 4px maroon;
+}
+
+.fiche {
+    border: solid 2px blue;
+    margin: 10px;
+    float: left;
+}
+
+.modele {
+    font-weight: bold;
+}
+
+.stock {
+    font-style: italic;
+}
\ No newline at end of file