diff --git a/.env.dev.example b/.env.dev.example
new file mode 100644
index 0000000..0eec782
--- /dev/null
+++ b/.env.dev.example
@@ -0,0 +1,20 @@
+# Copier ce fichier en .env.dev et remplir les valeurs
+
+SECRET_KEY=change-this-to-a-long-random-string-50-chars-minimum
+
+# Base de données
+POSTGRES_DB=jool_db_dev
+POSTGRES_USER=jool_user
+POSTGRES_PASSWORD=change-this-password
+DATABASE_URL=postgresql://jool_user:change-this-password@db:5432/jool_db_dev
+
+# Django
+DJANGO_SETTINGS_MODULE=config.settings.prod
+ALLOWED_HOSTS=dev.jool-international.com
+SECURE_SSL_REDIRECT=true
+
+# Email (optionnel pour le dev)
+EMAIL_HOST=smtp.dreamhost.com
+EMAIL_PORT=465
+EMAIL_HOST_USER=
+EMAIL_HOST_PASSWORD=
diff --git a/deploy-dev.sh b/deploy-dev.sh
new file mode 100755
index 0000000..e2b6483
--- /dev/null
+++ b/deploy-dev.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# Déploiement dev.jool-international.com
+# Usage : bash deploy-dev.sh
+set -e
+
+DOMAIN="dev.jool-international.com"
+EMAIL="info@jool-int.com"
+COMPOSE="docker compose -f docker-compose.dev.yml"
+
+# ── 1. Vérifier .env.dev ─────────────────────────────────
+if [ ! -f .env.dev ]; then
+ echo "❌ .env.dev introuvable."
+ echo " Copie .env.dev.example en .env.dev et remplis les valeurs."
+ exit 1
+fi
+
+echo "✅ .env.dev trouvé"
+
+# ── 2. Démarrer avec nginx HTTP only ─────────────────────
+echo "🚀 Démarrage des conteneurs (HTTP only)..."
+$COMPOSE up -d --build
+
+# Attendre que nginx soit prêt
+sleep 5
+
+# ── 3. Obtenir le certificat SSL ─────────────────────────
+echo "🔒 Obtention du certificat SSL pour $DOMAIN..."
+$COMPOSE run --rm certbot certonly \
+ --webroot \
+ --webroot-path=/var/www/certbot \
+ -d "$DOMAIN" \
+ --email "$EMAIL" \
+ --agree-tos \
+ --no-eff-email
+
+# ── 4. Passer à la config HTTPS ──────────────────────────
+echo "🔄 Activation de la config HTTPS..."
+sed -i 's|nginx.dev-init.conf|nginx.dev.conf|g' docker-compose.dev.yml
+
+# Redémarrer nginx avec la config HTTPS
+$COMPOSE up -d nginx
+
+echo ""
+echo "✅ Déploiement terminé !"
+echo " Site disponible sur https://$DOMAIN"
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
new file mode 100644
index 0000000..e480aa4
--- /dev/null
+++ b/docker-compose.dev.yml
@@ -0,0 +1,61 @@
+services:
+
+ # ── Base de données PostgreSQL ──────────────────────────
+ db:
+ image: postgres:16-alpine
+ restart: always
+ volumes:
+ - postgres_data_dev:/var/lib/postgresql/data
+ env_file: .env.dev
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ # ── Application Django (Gunicorn) ───────────────────────
+ web:
+ build: .
+ restart: always
+ env_file: .env.dev
+ volumes:
+ - static_volume_dev:/app/staticfiles
+ - media_volume_dev:/app/media
+ depends_on:
+ db:
+ condition: service_healthy
+ command: >
+ sh -c "python manage.py migrate --noinput &&
+ gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 2
+ --timeout 60 --access-logfile - --error-logfile -"
+
+ # ── Nginx (reverse proxy + static files) ───────────────
+ nginx:
+ image: nginx:alpine
+ restart: always
+ ports:
+ - "80:80"
+ - "443:443"
+ volumes:
+ - ./nginx/nginx.dev-init.conf:/etc/nginx/conf.d/default.conf:ro
+ - static_volume_dev:/app/staticfiles:ro
+ - media_volume_dev:/app/media:ro
+ - certbot_www_dev:/var/www/certbot:ro
+ - certbot_certs_dev:/etc/letsencrypt:ro
+ depends_on:
+ - web
+
+ # ── Certbot (SSL Let's Encrypt) ─────────────────────────
+ certbot:
+ image: certbot/certbot
+ volumes:
+ - certbot_www_dev:/var/www/certbot
+ - certbot_certs_dev:/etc/letsencrypt
+ entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
+
+volumes:
+ postgres_data_dev:
+ static_volume_dev:
+ media_volume_dev:
+ certbot_www_dev:
+ certbot_certs_dev:
diff --git a/docker-compose.yml b/docker-compose.yml
index 510832c..b4dcd60 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,12 +7,8 @@ services:
volumes:
- postgres_data:/var/lib/postgresql/data
env_file: .env.prod
- environment:
- POSTGRES_DB: ${POSTGRES_DB}
- POSTGRES_USER: ${POSTGRES_USER}
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
- test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
+ test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
diff --git a/export_pages.py b/export_pages.py
deleted file mode 100644
index 7c8fc5f..0000000
--- a/export_pages.py
+++ /dev/null
@@ -1,142 +0,0 @@
-"""
-Exporte chaque page Django en HTML autonome (CSS + JS inline).
-Usage : python3 export_pages.py
-"""
-import os, re, base64, mimetypes
-from pathlib import Path
-import requests
-from bs4 import BeautifulSoup
-from urllib.parse import urljoin, urlparse
-
-BASE_URL = 'http://127.0.0.1:8000'
-OUT_DIR = Path(__file__).parent / 'figma_export'
-OUT_DIR.mkdir(exist_ok=True)
-
-PAGES = [
- ('home', '/'),
- ('a-propos', '/a-propos/'),
- ('kiriq', '/produits/kiriq/'),
- ('monitor', '/produits/monitor/'),
- ('joolid', '/produits/joolid/'),
- ('carrieres','/carrieres/'),
-]
-
-session = requests.Session()
-
-def fetch(url):
- r = session.get(urljoin(BASE_URL, url), timeout=10)
- r.raise_for_status()
- return r
-
-def to_data_uri(url_or_path):
- """Convertit une URL de ressource en data URI base64."""
- try:
- r = fetch(url_or_path)
- mime = r.headers.get('Content-Type', 'application/octet-stream').split(';')[0]
- b64 = base64.b64encode(r.content).decode()
- return f"data:{mime};base64,{b64}"
- except Exception as e:
- print(f" ⚠️ Impossible de charger {url_or_path}: {e}")
- return url_or_path
-
-def inline_css(soup, base_url):
- """Remplace les par des