CV

:

Hernani CASTRO DE ALMEIDA

Chapitre 1 - Acte III : L'Aube d'un Nouveau Cycle

Présentation

Villageoise curieuse

Avatar

Halte-là, voyageur ! Quel vent t'amène dans nos contrées ?

Hernani

Avatar

Je me présente, Hernani CASTRO DE ALMEIDA. Mon périple en BTS SIO touche à sa fin.

Je prépare aujourd'hui l'Aube d'un Nouveau Cycle.

Villageoise curieuse

Avatar

Un nouveau cycle ? Quelle est la prochaine étape de ton aventure ?

Hernani

Avatar

Je recherche une Guilde afin de débuter mon ascension vers le Bac+5.

Villageoise curieuse

Avatar

Une noble quête ! Je sens une grande détermination en toi...

Je te laisse à tes pensées, aventurier. Bonne route !

Vous qui tenez les rênes de cette histoire, sachez que chaque projet que vous voyez ici est né d'une curiosité sincère.

L'envie de partir à l'aventure avec une idée et de voir jusqu'où elle pourrait me mener.

Ce qui m'importe, c'est le chemin parcouru : les essais, les erreurs, les ajustements.

Chaque défi relevé est un gain d'XP qui forge mon profil de développeur.

Si cette approche vous parle, travaillons ensemble sur le prochain acte.

Compétences

Langages de programmation

Logo Java Java
Logo C# C#
Logo TypeScript TypeScript
Logo JavaScript JavaScript
Logo PHP PHP
Logo Python Python
Logo C C

Frameworks & Librairies

Logo Vue.js Vue.js
Logo Angular Angular
Logo Spring Boot Spring Boot
Logo NodeJS Node.js
Logo ExpressJS Express.js
Logo TailwindCSS TailwindCSS
Logo BullMQ BullMQ

Front-end

Logo HTML HTML
Logo CSS CSS

Bases de données

Logo PostgreSQL PostgreSQL
Logo MySQL MySQL
Logo MongoDB MongoDB
Logo Redis Redis

Outils & Environnements

Logo Git Git
Logo GitHub GitHub
Logo Linux Linux
Logo AWS AWS
Logo Swagger Swagger
Logo Docker Docker

Projets

BonjourStage?

• En cours
Logo Vue.js Logo Node.js Logo Express Logo TypeScript Logo PostgreSQL Logo Redis Logo Docker
Logo BonjourStage?

Outil personnel de gestion de candidatures automatisée

• Projet Personnel • Janvier 2026 - Aujourd'hui

BonjourStage?

Logo BonjourStage?

Chercher un stage ou une alternance, c'est un processus répétitif, chronophage et mentalement épuisant. Les outils courants permettent de noter ses candidatures, mais pas de les piloter.

BonjourStage? centralise la gestion des candidatures, génère des mails personnalisés via IA à partir du CV et du contexte du poste, et automatise les relances selon un workflow fixe, sans intervention manuelle.

L'objectif : réduire la charge mentale et rendre la recherche d'emploi plus stratégique, pas plus lourde.

# Captures d'écran

Capture BonjourStage? 1 Capture BonjourStage? 2 Capture BonjourStage? 3

# Pourquoi ce projet ?

Le problème réel :

La recherche de stage/alternance se résume souvent à :

1) Se mettre en "Open to work" sur LinkedIn et spammer les mêmes posts tous les 3 jours.

2) Candidater sur Indeed avec le même CV et la même lettre de motivation pour chaque poste.

3) Prendre son courage à deux mains et envoyer des mails.

→ Le souci c'est qu'en semaine on enverra tard le soir car on est occupé (mais le soir, on se retrouve en bas de la file du lendemain, les chances d'obtenir une réponse sont faibles).

→ Si on envoie le week-end, on se retrouve en bas de la file, les chances d'obtenir une réponse sont encore plus faibles qu'en semaine (des études le prouvent).

→ Donc, on ne reçoit pas de réponse. Quel est notre réflexe ? Augmenter le nombre d'envois. Mais ça devient chronophage, répétitif et rébarbatif, donc on va préférer des mails génériques pour augmenter l'input.

→ Espérer une réponse.

→ Oublier de relancer.

→ Rinse and repeat.

La plupart des candidats monitorent leurs candidatures avec des outils comme Notion ou Google Sheets, non parce que c'est adapté mais parce que c'est disponible. Or ces outils ne sont pas vraiment conçus pour ça, pour les utiliser, il faut bricoler.

Ce que BonjourStage? change :

Centralisation

Toutes les candidatures, contacts, CVs et brouillons de mails au même endroit. Fini les onglets dispersés.

Mails envoyés au bon moment

Un étudiant qui envoie ses mails à 21h risque d'être noyé dans la boîte du recruteur le lendemain matin. BonjourStage? programme l'envoi juste avant la pause déjeuner ou la fin de journée - le moment où les recruteurs sont les plus susceptibles de lire leurs mails.

Génération de mails assistée par IA

L'outil prend en entrée le poste visé, l'OCR du CV et un contexte personnel, puis génère un mail de candidature. L'utilisateur relit et ajuste - il ne part jamais de zéro, ce qui permet de supprimer le syndrome de la page blanche. La personnalisation est garantie sans être chronophage.

Je peux comprendre que ce soit fou d'utiliser l'IA pour ça. Mais l'IA est là pour rester, la plupart des candidats l'utilisent probablement déjà, mais mal.

Refuser l'IA ne donne pas forcément d'avantage compétitif réel : sans elle, on finit par envoyer des lettres préfaites sans personnalisation faute de temps. Avec BonjourStage?, on a le meilleur des deux.

Relances automatisées avec stratégie

Faire ses relances manuellement, c'est 1h à 2h de travail peu motivant, sans stratégie claire. BonjourStage? déclenche automatiquement des relances courtes à intervalles croissants (J+3, J+6, J+9..., 6 relances en 2 mois max) dans le même thread mail, et s'arrête dès qu'une réponse arrive.

Cette persévérance montre une réelle détermination, sans que l'utilisateur n'ait à porter la charge mentale de "quand relancer qui". L'objectif est simple : remonter dans la boîte du recruteur et l'inciter à consulter notre candidature (CV/Portfolio).

Vue d'ensemble et dashboard

Un tableau de bord avec le statut de chaque candidature, les dates d'envoi, les relances planifiées. On sait exactement où on en est, sans effort cognitif.

La valeur réelle :

En fin de compte, le caractère personnalisé dans un mail de motivation ou une lettre de motivation ne représente qu'une petite partie du contenu. Pourquoi s'embêter à repartir de zéro à chaque fois ?

BonjourStage? ne remplace pas le travail de fond (CV, portfolio, préparation entretien). Il libère du temps et de l'énergie mentale pour que l'étudiant puisse se concentrer sur ce qui fait vraiment la différence.

Ce projet est personnel et m’a surtout servi à apprendre. J’ai voulu concevoir une solution logicielle autour de la recherche d’alternance afin de progresser techniquement sur un cas concret.

# Workflow

Workflow BonjourStage?

# Architecture Technique

BonjourStage? est construit avec une architecture Fullstack moderne, organisée en Monorepo (pnpm workspaces) et pilotée par des Background Workers pour les tâches asynchrones.

Structure du Monorepo

BonjourStage/
├── apps/
│   ├── frontend/          # Vue.js 3 + Vite
│   │   └── src/
│   │       ├── features/      # Modules métier
│   │       ├── components/    # Composants UI
│   │       ├── composables/   # Logique réutilisable
│   │       ├── stores/        # État global (Pinia)
│   │       ├── services/      # Appels API (Axios)
│   │       └── router/        # Routes Vue Router
│   └── backend/           # API Express + Workers
│       ├── prisma/
│       │   └── schema.prisma  # Schéma BDD + migrations
│       └── src/
│           ├── controllers/   # Requêtes HTTP
│           ├── services/      # Logique métier + Prisma
│           ├── queues/        # Files BullMQ
│           ├── workers/       # Jobs asynchrones
│           ├── routes/        # Endpoints Express
│           ├── middlewares/   # Auth, validation
│           ├── lib/           # Clients partagés
│           └── config/        # Env + config Redis
└── packages/
    └── types/             # Types TypeScript partagés

Frontend

SPA réactive en Vue.js 3 (Composition API) + Vite, conçue pour rester fluide même lors d'opérations longues (génération LLM, envois Gmail).

Pinia pour l'état global, TanStack Vue Query pour la synchronisation serveur (cache, états de chargement, mises à jour optimistes).

Axios pour les requêtes REST, Socket.io-client pour le temps réel.

Clerk pour l'authentification (sessions, JWT, profils).

VeeValidate + Zod pour les formulaires, Tailwind CSS 4 + Reka UI pour le design system.

Backend (Event-Driven)

API Express.js avec un pattern Controller → Service. Les Controllers reçoivent et valident les requêtes, les Services contiennent la logique métier et interagissent avec Prisma Client (pas de couche Repository dédiée).

Les tâches lourdes sont déléguées à BullMQ via Redis :

Worker Rôle
llmGenerationWorker Appels aux APIs LLM pour générer les mails personnalisés
sendEmailWorker Envoi du mail initial via Gmail API
sendRelanceWorker Envoi des relances planifiées (J+3, J+9, J+18...)
gmailWatchWorker Souscrit aux notifications Pub/Sub par utilisateur
gmailWebhookWorker Analyse l'historique Gmail pour détecter les réponses
ghostingWorker Marque une candidature SANS_REPONSE après délai

Persistance

PostgreSQL : base de données relationnelle principale.

Prisma ORM : schéma déclaratif, migrations, client typé.

Redis : broker des files BullMQ.

Flux de communication

Frontend → Backend : requêtes REST (Axios). Le controller délègue au service, qui peut enqueue un job BullMQ.

Backend → Frontend : Socket.io pousse les événements en temps réel (ex: "mail généré", "réponse reçue").

Google → Backend : Google Cloud Pub/Sub. Une souscription gmail.users.watch() est créée à la connexion Gmail. Quand un mail arrive, Google notifie le webhook, un worker analyse l'historique et arrête les relances si une réponse est détectée.

Stack Technique

Couche Technologies
Frontend Vue.js 3, Vite, Pinia, TanStack Query, Tailwind CSS 4, Reka UI
Backend Node.js, Express.js, TypeScript, BullMQ, Socket.io
Base de données PostgreSQL, Prisma ORM, Redis
Authentification Clerk (OAuth2 / JWT)
Services Tiers Gmail API, Cloud Pub/Sub, API LLM, Cloudflare R2
Infrastructure Docker, pnpm Workspaces, Ngrok (dev)

GalaxySwissBourdin

• En cours
Logo Vue.js Logo Java Logo TypeScript Logo Spring Boot Logo PostgreSQL Logo Docker
Logo GalaxySwissBourdin

Application web de gestion des visites médicales

• Projet BTS SIO • Avril 2026 - Aujourd'hui

GalaxySwissBourdin

Logo GalaxySwissBourdin

Galaxy Swiss Bourdin (GSB) est une application qui permet aux visiteurs médicaux de gérer leurs visites chez les praticiens : suivi des médecins, création de rapports et gestion des échantillons.

Ce contexte est vu en BTS SIO. J'ai choisi ce projet pour l'épreuve E6, où l'objectif est de répondre à la demande du jury et d'apporter des modifications concrètes au projet.

La base actuelle repose sur un backend TypeScript, Node.js et Express.js. Le projet est réutilisé ici pour monter en compétences sur un langage back orienté objet.

# Roadmap

Dans le but d'apprendre Spring Boot, je compte faire une migration du back vers un back Java.

Objectif long terme : réaliser deux migrations backend du projet, une version Java et une version C#.

Projet en cours : pas de lien GitHub public pour le moment.

ForaVerse

• Terminé
Logo PHP Logo CSS Logo JavaScript Logo PostgreSQL
Logo ForaVerse

Forum pour discuter autour de sujets variés

• Projet Scolaire • Février/Avril 2025

ForaVerse

Logo ForaVerse

Au deuxième semestre de BTS SIO, nous devions réaliser un projet libre en respectant une contrainte : utiliser l’architecture MVC et la programmation orientée objet.

En cours, nous avions principalement étudié le PHP, qui supporte la POO et permet de construire facilement une architecture MVC, ce qui en faisait un choix naturel pour mon projet.

À l’origine, je pensais réaliser un site e-commerce pour la vente de mangas, mais j’ai voulu relever un défi plus ambitieux et sortir de ma zone de confort.

J’ai donc opté pour la création de ForaVerse, un forum / réseau social inspiré de Reddit

# Captures d'écran

# Ce que j'ai appris

Ce projet m’a permis de sortir de ma zone de confort et d’explorer de nombreux concepts de programmation et d’outils que je ne maîtrisais pas encore.

Sur le plan technique, j’ai appris à utiliser :

• les interfaces et l’héritage en PHP,

• les fonctions récursives, les triggers et les fonctions avancées en PostgreSQL,

• l’authentification avec JWT tokens,

• l’envoi d’emails avec phpMailer,

• et l’intégration d’une librairie pour recadrer (crop) des images.

J’ai aussi beaucoup progressé en organisation et méthodologie :

• planifier mon travail et définir un ordre de priorité,

• noter mes idées dans un logiciel de prise de notes pour ne rien oublier,

• concevoir des croquis du site avant de coder,

• tester un maximum de cas concrets (création de plusieurs comptes et communautés),

• et mettre en place le chiffrement des mots de passe.

Enfin, ce projet m’a permis de comprendre concrètement ce que signifiait réaliser un site dynamique, où les données changent en fonction des actions des utilisateurs.

# Fonctionnalités clés

• Gestion des rôles utilisateurs : invité, membre enregistré, modérateur, propriétaire et administrateur, chacun avec ses permissions spécifiques.

• Communautés : création, adhésion (publique ou privée), gestion des demandes d’adhésion, personnalisation (photo, description, nom).

• Publications et commentaires : création de fils de discussion, sous-commentaires, votes (upvote/downvote), favoris, tri et épinglage.

• Profils utilisateurs : photo et bio personnalisables, suivi d’autres membres, affichage des publications, commentaires, votes et favoris.

• Modération avancée : avertissements, bannissements temporaires ou permanents, gestion des modérateurs, suppression ou modification de contenu.

• Sécurité et authentification : inscription/connexion, mot de passe oublié avec lien par email (token), chiffrement des mots de passe.

• Recherche avancée : exploration de communautés, utilisateurs et publications par mots-clés.

Contactez-moi