OrientAction
📌 Le projet
OrientAction est une plateforme de mise en relation entre lycéens et étudiants pour faciliter l'orientation post-bac. Un algorithme de matching basé sur 11 critères pondérés (filière, ville, spécialités…) propose les profils les plus pertinents, couplé à une messagerie temps réel et un système de gamification pour encourager l'engagement.
✨ Fonctionnalités clés
- 🎯 Algorithme de matching — Score de compatibilité calculé sur 11 critères pondérés. Temps de réponse < 200ms grâce au cache Redis et aux indexes PostgreSQL.
- 🏆 Gamification — 14 badges attribués automatiquement via Django Signals, points de réputation, niveaux progressifs et classement public.
- 💬 Messagerie temps réel — Polling HTMX toutes les 3s, rate limiting à 30 messages/heure par utilisateur via Redis.
- 🔐 Sécurité — SSL/TLS (grade A+ SSL Labs), headers HTTP sécurisés (HSTS, CSP), protection CSRF/XSS, firewall OCI + UFW.
🏗️ Architecture
Application structurée en 4 apps Django : Accounts (auth), Core (matching), Messaging (chat), Student Helper (gamification).
Internet → DNS (orientaction.assad.ovh)
→ Oracle Cloud Firewall (80/443)
→ Nginx (Reverse Proxy + SSL)
→ Gunicorn (3 workers)
→ Django App · PostgreSQL · Redis
☁️ Déploiement
Hébergé sur une instance Oracle Cloud Always Free (VM.Standard.E2.1.Micro, Ubuntu 22.04). Choix motivé par le contrôle total du serveur (accès root, configuration Nginx/Gunicorn/Systemd) et la gratuité permanente de l'infrastructure.
⚠️ Défis techniques
Superuser — user_type invalide
Le modèle User custom n'acceptait que lyceen ou etudiant. Résolu en créant le superuser avec user_type='etudiant', les droits admin étant gérés par is_superuser.
Gunicorn crash au démarrage
Dossier /logs/ inexistant. Résolu en créant le dossier, ajustant les permissions (chown ubuntu:www-data) et testant Gunicorn manuellement avant d'activer le service Systemd.
Fichiers statiques 404
CSS/JS non chargés en production. Résolu via collectstatic, vérification des permissions (755) et correction de l'alias Nginx.