Mon CV
← Retour aux projets
🎓 Projet Personnel · Full-Stack

OrientAction

🐍 Django 5.0 🗄️ PostgreSQL · Redis ☁️ Oracle Cloud (OCI) 🌐 orientaction.assad.ovh

📌 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.

Django 5.0 PostgreSQL 15 Redis 7.0 HTMX 2.0 Bootstrap 5 Oracle Cloud Nginx + Gunicorn SSL Let's Encrypt

✨ 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.

📊 Métriques

Statut
✅ En ligne
Temps de réponse
< 200ms
SSL Labs
Grade A+
Uptime
99.9%
Code Python
~5 000 lignes
Modèles Django
15+

🎓 Compétences démontrées

Backend
Django 5.0 ORM avancé Django Signals Algorithme métier
DevOps & Cloud
Oracle Cloud Nginx Gunicorn Systemd Linux Ubuntu
Données & Sécurité
PostgreSQL Redis SSL/TLS CSRF / XSS Rate Limiting