Projets Vus en Cours

Tableau de Bord - Pic du Midi

Développement d'un dashboard pour visualiser les indicateurs clés (météo, CA, visiteurs).

Projet Pic du Midi

Affichage des indicateurs de performance clés : météo, nombre de visiteurs, chiffre d'affaires total et moyen par visiteur via des graphiques dynamiques avec Chart.js.

PHPMySQLJavaScriptChart.js

Projet DAO (Data Access Object)

Développement d'un modèle d'accès aux données en Java (Pattern DAO).

Ce projet sépare la logique métier de la logique d'accès à la base de données (MySQL) en utilisant un design pattern pour gérer les opérations CRUD de manière propre et maintenable.

JavaJDBCMySQLDesign Pattern
Voir sur GitHub

Billetterie du Fâ - PHP/MVC

Application complète de réservation de billets avec architecture MVC, base de données et génération de PDF.

1. Contexte & Besoin

Le site archéologique du Fâ (Barzan) fait face à une forte affluence estivale. L'objectif était de développer une application web pour fluidifier la gestion des entrées en permettant la réservation en ligne.
Contraintes : Travail en méthode SCRUM, PHP 8 sans framework, Architecture MVC imposée.

2. Architecture & Choix Techniques

  • Langage : PHP 8 (Typage fort, Attributs).
  • Architecture : MVC (Modèle-Vue-Contrôleur) pour séparer la logique et l'affichage.
  • Accès Données : Pattern DAO avec PDO pour sécuriser les requêtes SQL.
  • Sécurité : Hashage des mots de passe, protection XSS/Injection SQL.
📁 Structure du projet (MVC)
  • site
    • controleurs
    • images
    • JS
    • modeles
    • polices
    • style
    • vues
    • configBdd.php
    • index.php
    • process-confirmation.php
    • README.md

3. Fonctionnalités Clés

A. Sélection des billets (Front-End)

Formulaire dynamique permettant de choisir le type de visite et la quantité de billets. Le total se met à jour en temps réel.

Formulaire de réservation
B. Validation et Enregistrement (Back-End)

Réception des données dans le contrôleur, validation des entrées, et insertion en base de données via le DAO. Utilisation de transactions SQL.

Code PHP création réservation
C. Confirmation et Facture PDF

Une fois la commande validée, l'utilisateur reçoit un récapitulatif et peut télécharger sa facture générée dynamiquement avec la librairie FPDF.

Confirmation de commande Facture PDF générée
PHP 8MySQLMVCDAOGitScrum

Projets Personnels

Développement Modulaire FiveM (Lua/NUI)

Création de scripts avancés (Autopilot, Lecteur Multimédia, Events) avec communication Client-Serveur et interfaces Web (NUI).

1. Contexte & Objectifs

Dans le cadre de l'amélioration de l'expérience utilisateur (UX) sur un serveur Roleplay, j'ai développé une suite de scripts modulaires indépendants.
Objectif : Automatiser des tâches répétitives (conduite) et intégrer du contenu web externe (YouTube) directement dans le moteur du jeu.

2. Architecture Technique

  • Langage : LUA (Logique métier) & JavaScript (Interfaces).
  • Architecture : Client-Serveur (OneSync) avec gestion d'événements (NetEvents).
  • Interface (NUI) : HTML/CSS injecté dans le moteur de rendu Chromium de FiveM.
  • Persistance : Utilisation des KVP (Key-Value Pairs) pour sauvegarder les données joueurs localement.
📁 Structure des ressources
  • resources
    • autopilot // Système de conduite autonome
      • client.lua
      • config.lua
      • fxmanifest.lua
    • minitv // Intégration API YouTube
      • html
        • index.html
        • script.js
      • server.lua

3. Fonctionnalités Clés

A. Algorithme de proximité (Autopilot)

Le script calcule dynamiquement le point d'intérêt le plus proche (ex: Station essence) en comparant les vecteurs de coordonnées du joueur avec une liste de configuration.

local function getClosestVec3(list)
    local playerCoords = GetEntityCoords(PlayerPedId())
    local minDist, closest = nil, nil
    
    for _, coords in ipairs(list) do
        local dist = # (playerCoords - coords) -- Calcul vectoriel
        if not minDist or dist < minDist then
            minDist = dist
            closest = coords
        end
    end
    return closest, minDist
end
B. Communication NUI & API YouTube (MiniTV)

Intégration de l'iframe API YouTube via une page web transparente superposée au jeu. Le serveur envoie l'URL, et le JS extrait l'ID vidéo via Regex.

  • Extraction d'ID vidéo via Regex JS.
  • Synchronization lecture/pause entre tous les joueurs via événements serveur.
  • Overlay CSS dynamique (Coin ou Plein écran).

4. Aperçu en Vidéo

LUAJS (NUI)API RESTAlgorithmiqueGit
Voir le code sur GitHub

Grand Strategy Game - Unity (C#) & LLM

Création d'un jeu de Grande Stratégie (type HOI4/Pax Historia) contemporain (~2020). Intégration d'une IA locale (LLM) générant des événements dynamiques.

1. Le Concept du Jeu

Passionné par les jeux de gestion "Grand Strategy", je conçois actuellement mon propre jeu centré sur la direction d'une nation dans le monde contemporain (années 2020).
Le gameplay repose sur la gestion d'un budget, le maintien de la stabilité politique, l'écoulement du temps, et la prise de décisions gouvernementales.

2. L'Innovation Clé : IA Locale (LLM)

  • L'Intelligence d'Événements : Contrairement aux événements scriptés classiques, le jeu intègre un Modèle de Langage (LLM).
  • Exécution Locale : L'IA tourne à 100% sur le PC du joueur pour l'autonomie et la rapidité. Lors de l'installation du jeu, le modèle est téléchargé et exécuté en local.
  • Génération Dynamique : L'IA analyse l'état du pays (argent, stabilité) et s'appuie sur un contexte prédéfini pour générer des événements géopolitiques uniques et cohérents.
A. État Actuel du Projet (WIP)

Le projet est en phase de développement actif au niveau de son architecture logicielle. La logique de gestion du temps (Time Management), des finances (Money Logic), et de l'état du pays (Stability) est écrite en C#. Mon travail actuel se concentre sur l'UI/UX Design et l'intégration C# <-> LLM local.

3. Structure de Données d'un Pays (C#)

Voici un exemple de ScriptableObject utilisé comme base de données légère pour stocker les informations et l'état de chaque pays jouable dans le jeu :

using UnityEngine;

[CreateAssetMenu(fileName = "NewCountry", menuName = "PaxModerna/CountryData")]
public class CountryData : ScriptableObject
{
    [Header("Informations Générales")]
    public string countryName;
    public Sprite flag; // Pour l'icône du drapeau

    [Header("Économie")]
    public double treasury; // Argent en banque
    public float gdpGrowth; // Croissance du PIB

    [Header("Politique & Social")]
    [Range(0, 100)] public float stability;
    public string leaderName;
}
UnityC#Moteur PhysiqueGame Design

Bot Discord - Veille Automatisée (Python & IA)

Création d'un bot Discord automatisant une veille géopolitique et cybersécurité via la lecture de flux RSS et de l'API Conflictly, résumée par l'API Gemini.

1. Le Concept du Bot

Ce projet vise à automatiser la collecte et l'analyse d'informations ciblées (géopolitique, cybersécurité, actualités).
Le script Python parcourt un ensemble de sources (Flux RSS du Monde, Figaro, France Info, Hacker News, Bleeping Computer, ZATAZ, France 24, ainsi que l'API Conflictly), extrait le contenu brut, le fait résumer par une intelligence artificielle (Gemini 2.5 Flash de Google), puis envoie le résultat sur un serveur Discord via un Webhook.

2. L'Architecture Technique

  • Collecte des Données (Scraping/RSS) : Utilisation de feedparser pour lire les flux RSS et de trafilatura pour extraire rapidement et proprement le texte des articles sans le superflu HTML. Requêtes requests vers l'API Conflictly.
  • Synthèse par IA (LLM) : Intégration du modèle gemini-2.5-flash via l'API google-genai. Un prompt stict force l'IA à résumer l'article en 3 points essentiels uniquement, peu importe la taille ou le format d'entrée (texte ou JSON).
  • Notification : Envoi des données formatées directement dans un salon Discord via un Webhook.

3. Extrait de Code (Python)

Voici la fonction chargée de générer le résumé via l'API Gemini :

def summarize_text(text, source_name="Un article"):
    print(f"Generating summary for {source_name} with Gemini API...")
    prompt = (
        f"Voici des données brutes (texte ou JSON) provenant de la source : {source_name}.\n"
        "Fais-moi un résumé très concis de l'événement en français, sous la forme "
        "d'exactement 3 bullet points. Va directement à l'essentiel, "
        "sans introduction ni conclusion supplémentaires.\n\n"
        f"Données:\n{text}"
    )
    try:
        response = client.models.generate_content(
            model='gemini-2.5-flash',
            contents=prompt
        )
        return response.text.strip()
    except Exception as e:
        print(f"Error generating summary: {e}")
        return None
PythonAPI Gemini (LLM)Flux RSSDiscord Webhook

Hevil Game - "Rage Game" Web (JS Vanilla)

Création d'un jeu de plateforme web 2D punitif où le joueur doit utiliser des commandes Terminal pour hacker les niveaux et contourner les obstacles.

► Jouer au Jeu dans le Navigateur

1. Le Concept du Jeu

Hevil Game est un prototype de jeu d'aventure développé intégralement côté client (Front-End) sans aucun moteur prêt à l'emploi. Le gameplay allie la dextérité de la plateforme classique avec une mécanique de puzzle unique : un terminal de commande intégré (Touche 'T') permet au joueur d'injecter des commandes fictives (ex: sudo rm -rf /wall ou sysctl -w player.speed=800) pour hacker la physique du jeu.

2. Architecture & Moteur 2D

  • Boucle de Jeu Native : Utilisation exclusive de l'API HTML5 Canvas et de requestAnimationFrame couplé à un deltaTime pour une physique indépendante du framerate.
  • Physique & Collisions : Conception d'un moteur de physique de base (Gravité, Vecteurs de vitesse, Sauts) et gestion des collisions rigides 2D avec des boîtes AABB (Axis-Aligned Bounding Box).
  • Niveaux Data-Driven : Génération procédurale des niveaux à partir de tableaux modélisés (LevelMap), couplés à un système d'évènements (Triggers) invisibles pour les pièges dynamiques.
JavaScript (ES6)HTML5 CanvasGame DesignAlgo Collisions