Survivre
et Coder

"Quand on est perdu dans les bugs, il faut chercher la lumière."

Journal de bord

Je m'appelle Thomas D'attanasio et je suis étudiant en BUT 3 Informatique à l'IUT Lyon 1 de Bourg-en-Bresse. Forgeant des solutions numériques robustes dans un environnement technologique en constante mutation, j'ai appris à m'adapter rapidement, tout comme un survivant doit ajuster son équipement face aux infectés.

Mon objectif est de concevoir des architectures résilientes et des interfaces utilisateurs optimisées. Je crois profondément que le code doit être propre, documenté et pensé pour durer, capable de résister à n'importe quel crash système ou effondrement des serveurs.

Toujours en quête de nouvelles zones à explorer pour perfectionner mon artisanat, je mets mon sac à dos et mes compétences au service de projets qui ont du sens et qui visent l'excellence technique.

Arsenal Technique

Lourd (Back-End)

  • PHP / Symfony 6
  • Node.js / Express
  • MariaDB / PostgreSQL

Tactique (Front-End)

  • Vue.js 3 / Composition API
  • TypeScript / JavaScript
  • PrimeVue / Tailwind

Survie (Outils)

  • Docker / Compose
  • Git / GitHub
  • Vitest / Webpack

Projets

Gestion d'Emploi du Temps

> Rapport de mission : Planification centralisée.

Développement d'une SPA (Single Page Application) permettant la création, l'attribution et la visualisation des cours par groupes d'étudiants. L'interface offre un calendrier interactif dynamique avec un système de profils publics/privés sécurisé par JWT.

Vue 3 / TypeScript PrimeVue Node.js / SQLite
Confidentiel

Analyse Technique : Rendu dynamique des événements

Pour afficher les cours précisément sur la grille horaire, j'ai développé une logique de calcul de position en pixels (`top` et `height`) directement injectée dans le DOM via l'attribut de style de Vue.js :


const getEventPosition = (course: Course) => {
    if (!course.startDatetime || !course.endDatetime) return {};
    
    const start = new Date(course.startDatetime);
    const end = new Date(course.endDatetime);
    const hourHeight = 60; // 60px par heure
    const startOffset = 8 * 60; // La grille commence à 8h00
    
    const startMinutes = start.getHours() * 60 + start.getMinutes();
    const endMinutes = end.getHours() * 60 + end.getMinutes();
    
    const top = ((startMinutes - startOffset) / 60) * hourHeight;
    const height = ((endMinutes - startMinutes) / 60) * hourHeight;
    
    return { top: `${top}px`, height: `${height}px`, position: 'absolute' };
};
                    

Radar Audio (Spotify API)

> Rapport de mission : Interception de signaux API.

Application web réalisée sous Symfony permettant de rechercher des artistes, des albums et des morceaux. Les utilisateurs peuvent écouter des extraits audios de 30 secondes et sauvegarder leurs titres préférés dans une base de données PostgreSQL via Doctrine.

Symfony 6 Twig API REST
Confidentiel

Analyse Technique : Moteur de rendu Twig Conditionnel

Le système de "Like" détermine de manière fluide si le titre affiché est déjà dans les favoris de l'utilisateur pour générer la route correspondante :


{% set isFavorite = track.id in listFavorite %}
{% if isFavorite %}
    
        
        Retirer des favoris
    
{% else %}
    
        
        Ajouter aux favoris
    
{% endif %}
                    

Réseau d'Approvisionnement (ERP)

> Rapport de mission : Gestion des rations et stocks.

Solution de gestion séparant un "Front-Office" d'un "Back-Office" de gestion intensif piloté via EasyAdmin. J'y gère la facturation avec TCPDF, l'envoi d'e-mails (testés via Maildev), le tout déployé sur une architecture de conteneurs Docker robuste.

Symfony 6 / EasyAdmin Docker / Nginx MariaDB
Confidentiel

Analyse Technique : Architecture Dockerisée

J'ai packagé l'ensemble de l'écosystème via Docker Compose pour isoler et protéger la base de données du réseau web public :


services:
  php:
    build:
      context: .
    container_name: 'bakery_app'
    volumes:
      - ./:/var/www/bakeryerp/:cached
  nginx:
    build:
      context: ./docker/nginx
    ports:
      - "8080:443"
    depends_on:
      - php
  db:
    image: 'mariadb:11'
    environment:
      MYSQL_DATABASE: bakeryerp
    volumes:
      - ${PWD}/mariadb/:/var/lib/mysql/