<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thimotée</title>
    <description>The latest articles on DEV Community by Thimotée (@pastek).</description>
    <link>https://dev.to/pastek</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4195037%2Fdb464d71-b159-4a74-84ce-ee9e2e3c7b0c.png</url>
      <title>DEV Community: Thimotée</title>
      <link>https://dev.to/pastek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pastek"/>
    <language>en</language>
    <item>
      <title>HACKAVPI</title>
      <dc:creator>Thimotée</dc:creator>
      <pubDate>Tue, 20 Oct 2026 00:47:37 +0000</pubDate>
      <link>https://dev.to/pastek/hackavpi-dp8</link>
      <guid>https://dev.to/pastek/hackavpi-dp8</guid>
      <description>&lt;p&gt;Dans le cadre de notre &lt;strong&gt;Master MIAGE à l'Université de la Nouvelle-Calédonie&lt;/strong&gt; 🎓, toute notre promotion participe au projet &lt;strong&gt;HackAVP 2026&lt;/strong&gt; !&lt;/p&gt;

&lt;p&gt;Avec Dan, nous avons pris en charge une pièce centrale du projet : &lt;strong&gt;HACKAVPI&lt;/strong&gt;, l'API qui permet aux différentes applications développées par la classe de communiquer entre elles et d'échanger des données.&lt;/p&gt;

&lt;p&gt;Dans cet article, on vous explique ce qu'est une API, pourquoi le projet en avait besoin, et comment nous avons construit la nôtre. Pas besoin d'être développeur pour suivre : on détaille les termes techniques au fur et à mesure. 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Une API, c'est quoi au juste ?
&lt;/h2&gt;

&lt;p&gt;Une &lt;strong&gt;API&lt;/strong&gt; (&lt;em&gt;Application Programming Interface&lt;/em&gt;, ou interface de programmation) est un &lt;strong&gt;intermédiaire qui permet à des logiciels de dialoguer entre eux&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;L'image la plus parlante est celle du &lt;strong&gt;serveur au restaurant&lt;/strong&gt; 🍽️ :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vous (l'application) consultez le menu et passez commande ;&lt;/li&gt;
&lt;li&gt;le serveur (l'API) transmet la demande à la cuisine (la base de données) ;&lt;/li&gt;
&lt;li&gt;puis il vous rapporte le plat (les données demandées).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vous n'avez jamais besoin d'entrer en cuisine : vous passez par le serveur, qui sait exactement quoi demander et à qui.&lt;/p&gt;

&lt;p&gt;Notre API est de type &lt;strong&gt;REST&lt;/strong&gt;, la manière la plus répandue de concevoir une API sur le web. Concrètement, chaque information est accessible à une adresse précise, qu'on appelle une &lt;strong&gt;route&lt;/strong&gt;. Par exemple, une application pourrait interroger une route comme &lt;code&gt;/avp&lt;/code&gt; pour obtenir la liste des offres d'emploi, ou &lt;code&gt;/candidats&lt;/code&gt; pour obtenir celle des candidats.&lt;/p&gt;

&lt;p&gt;Les réponses sont envoyées au format &lt;strong&gt;JSON&lt;/strong&gt;, un format texte simple, lisible aussi bien par les humains que par les machines :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prenom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Léa"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Développeuse web"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"competences"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"JavaScript"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SQL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"React"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Le projet HackAVP
&lt;/h2&gt;

&lt;p&gt;L'objectif de HackAVP est de &lt;strong&gt;faciliter la mise en relation entre candidats et recruteurs&lt;/strong&gt; 🤝. Le nom vient des &lt;strong&gt;AVP&lt;/strong&gt;, les &lt;em&gt;avis de vacance de poste&lt;/em&gt;, c'est-à-dire les offres d'emploi publiées par les recruteurs.&lt;/p&gt;

&lt;p&gt;Pour y parvenir, notre classe s'est répartie en plusieurs équipes, chacune développant sa propre application :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📄 l'&lt;strong&gt;analyse automatique des CV&lt;/strong&gt; ;&lt;/li&gt;
&lt;li&gt;💼 la &lt;strong&gt;consultation des offres d'emploi&lt;/strong&gt; ;&lt;/li&gt;
&lt;li&gt;⚖️ la &lt;strong&gt;comparaison des profils&lt;/strong&gt; des candidats avec les postes proposés ;&lt;/li&gt;
&lt;li&gt;📊 l'&lt;strong&gt;analyse statistique&lt;/strong&gt; des offres et des candidatures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Toutes ces applications ont un point commun : elles manipulent &lt;strong&gt;les mêmes données&lt;/strong&gt; (des candidats, des CV, des offres). Sans coordination, chaque équipe aurait dû créer sa propre base de données, avec le risque d'avoir des informations en double, incohérentes ou impossibles à partager.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;C'est là qu'intervient HACKAVPI&lt;/strong&gt; : elle centralise toutes les données du projet et met à disposition des routes communes à toutes les équipes. Chaque application vient y chercher ce dont elle a besoin, et l'ensemble fonctionne comme un tout cohérent.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎬 Un scénario concret : le parcours de Léa
&lt;/h2&gt;

&lt;p&gt;Pour mieux comprendre le rôle de HACKAVPI, suivons &lt;strong&gt;Léa&lt;/strong&gt;, développeuse à la recherche d'un nouveau poste 👩‍💻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;📝 &lt;strong&gt;Léa crée son compte&lt;/strong&gt; sur l'une des applications du projet. Grâce à notre système d'authentification commun, &lt;strong&gt;ce même compte lui servira sur toutes les autres applications&lt;/strong&gt; : pas besoin de s'inscrire cinq fois.&lt;/li&gt;
&lt;li&gt;📤 &lt;strong&gt;Elle dépose son CV&lt;/strong&gt; au format PDF. Avant de l'enregistrer, HACKAVPI vérifie que le fichier est valide (bon format, taille raisonnable) et le prépare pour la suite.&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;CVForge entre en jeu&lt;/strong&gt; : ce service lit automatiquement le CV de Léa et en extrait ses compétences, ses expériences et ses formations, qu'il nous renvoie sous forme de données structurées.&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Le matching&lt;/strong&gt; : une autre application interroge HACKAVPI pour comparer le profil de Léa aux &lt;strong&gt;offres d'emploi&lt;/strong&gt; disponibles, et lui propose les postes qui lui correspondent le mieux.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;En coulisses&lt;/strong&gt;, l'équipe Insight Squad récupère des &lt;strong&gt;statistiques&lt;/strong&gt; sur les candidatures et les offres. Léa y est comptabilisée… sans jamais pouvoir être identifiée.&lt;/li&gt;
&lt;li&gt;🔑 &lt;strong&gt;Quelques jours plus tard, Léa a oublié son mot de passe ?&lt;/strong&gt; Elle reçoit un e-mail de réinitialisation, et c'est reparti !
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;👩‍💻 Léa ──► 📝 Compte ──► 📤 CV ──► 🤖 CVForge ──► ⚖️ Matching avec les offres
                                                          │
                                         📊 Statistiques anonymisées (Insight Squad)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;🔗 Six étapes, plusieurs applications développées par des équipes différentes… et &lt;strong&gt;une seule API au centre de tout&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Voyons maintenant, fonctionnalité par fonctionnalité, ce qui se passe derrière ce parcours.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Les fonctionnalités développées
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. 🗂️ La gestion des données
&lt;/h3&gt;

&lt;p&gt;Le premier rôle de HACKAVPI est de &lt;strong&gt;stocker et distribuer les données&lt;/strong&gt; du projet, en particulier :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;les &lt;strong&gt;avis de vacance de poste (AVP)&lt;/strong&gt; : intitulé du poste, description, compétences recherchées… ;&lt;/li&gt;
&lt;li&gt;les &lt;strong&gt;informations des candidats&lt;/strong&gt; : profil, CV, données extraites par l'analyse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Toutes ces données sont échangées au format &lt;strong&gt;JSON&lt;/strong&gt;. Ce choix n'est pas anodin : c'est un standard que tous les langages de programmation savent lire. Qu'une équipe travaille en JavaScript, en Python ou avec un outil d'automatisation, elle peut exploiter nos données sans effort particulier.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 📤 Le dépôt des CV
&lt;/h3&gt;

&lt;p&gt;Les candidats peuvent déposer leur CV directement via l'API, dans les conditions suivantes :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Critère&lt;/th&gt;
&lt;th&gt;Valeur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Formats acceptés&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;PDF&lt;/code&gt;, &lt;code&gt;PNG&lt;/code&gt;, &lt;code&gt;JPEG&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Taille maximale&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10 Mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traitement&lt;/td&gt;
&lt;td&gt;Vérification + préparation avant stockage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Accepter des fichiers envoyés par des utilisateurs n'est jamais sans risque 🔒 : un fichier peut être corrompu, trop volumineux, ou volontairement piégé. C'est pourquoi chaque CV est &lt;strong&gt;contrôlé avant d'être enregistré&lt;/strong&gt; : on vérifie qu'il s'agit bien d'un PDF ou d'une image, et qu'il respecte la taille maximale. Il est ensuite &lt;strong&gt;préparé&lt;/strong&gt; pour que l'étape d'analyse puisse le traiter dans de bonnes conditions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 🤖 La connexion avec CVForge
&lt;/h3&gt;

&lt;p&gt;Nous avons connecté notre API à &lt;strong&gt;CVForge&lt;/strong&gt;, le service développé par Florian qui &lt;strong&gt;analyse automatiquement les CV&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CVForge repose sur &lt;strong&gt;n8n&lt;/strong&gt;, un outil d'automatisation qui permet d'enchaîner des tâches sous forme de &lt;em&gt;workflow&lt;/em&gt;, c'est-à-dire une suite d'étapes exécutées automatiquement, un peu comme une chaîne de montage. Ici, la chaîne consiste à recevoir un CV, à le lire, puis à en extraire les informations utiles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;👤 Candidat ──► 📤 Dépôt du CV
                   │
                   ▼
            ⚙️ HACKAVPI (vérification + préparation)
                   │
                   ▼
            🧠 CVForge (workflow n8n)
                   │
                   ▼
            📦 Données extraites, renvoyées en JSON
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le résultat : un CV, document pensé pour être lu par un humain, devient des &lt;strong&gt;données structurées&lt;/strong&gt; (une liste de compétences, des expériences datées, des diplômes…) que les autres applications peuvent exploiter, notamment pour &lt;strong&gt;comparer les candidats aux offres d'emploi&lt;/strong&gt; 🎯.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 📊 Des statistiques pour Insight Squad
&lt;/h3&gt;

&lt;p&gt;L'équipe &lt;strong&gt;Insight Squad&lt;/strong&gt; est chargée d'analyser l'activité de la plateforme : combien d'offres sont publiées, combien de candidatures sont reçues, quelles tendances se dégagent… Nous avons travaillé avec eux pour concevoir des routes adaptées à leurs besoins, avec deux approches complémentaires :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type de route&lt;/th&gt;
&lt;th&gt;Principe&lt;/th&gt;
&lt;th&gt;Exemple&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧾 &lt;strong&gt;Données brutes&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;L'API fournit les données détaillées, Insight Squad fait ses propres calculs&lt;/td&gt;
&lt;td&gt;La liste des candidatures avec leur date et le poste visé&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📈 &lt;strong&gt;Agrégats&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;L'API calcule directement les indicateurs&lt;/td&gt;
&lt;td&gt;Le nombre de candidatures par offre ou par mois&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Les données brutes leur laissent toute liberté d'analyse, tandis que les agrégats leur font gagner du temps sur les indicateurs les plus courants.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🛡️ &lt;strong&gt;Confidentialité avant tout&lt;/strong&gt; : toutes les données exposées par ces routes sont &lt;strong&gt;anonymisées&lt;/strong&gt;. Les statistiques indiquent par exemple qu'&lt;em&gt;une&lt;/em&gt; candidature a été envoyée pour un poste, mais jamais &lt;em&gt;qui&lt;/em&gt; l'a envoyée. Aucun nom, aucune adresse e-mail, aucune information permettant d'identifier une personne.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. 🔐 L'authentification et la gestion des accès
&lt;/h3&gt;

&lt;p&gt;HACKAVPI centralise &lt;strong&gt;l'authentification de tout le projet&lt;/strong&gt;, c'est-à-dire la vérification de l'identité des utilisateurs. Tous les services qui ont besoin de comptes s'appuient sur &lt;strong&gt;les mêmes identifiants&lt;/strong&gt; : un seul compte, valable sur toutes les applications ! 🙌&lt;/p&gt;

&lt;p&gt;Pour cela, l'API propose des routes permettant de :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📝 &lt;strong&gt;créer un compte&lt;/strong&gt; ;&lt;/li&gt;
&lt;li&gt;🔓 &lt;strong&gt;se connecter&lt;/strong&gt; : l'utilisateur reçoit alors un &lt;strong&gt;token&lt;/strong&gt; de connexion ;&lt;/li&gt;
&lt;li&gt;📧 &lt;strong&gt;réinitialiser son mot de passe&lt;/strong&gt; grâce à un lien envoyé par e-mail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le &lt;strong&gt;token&lt;/strong&gt; fonctionne comme un &lt;strong&gt;badge d'accès temporaire&lt;/strong&gt; 🎫 : une fois connecté, l'utilisateur le présente à chaque requête, ce qui évite de renvoyer son mot de passe à chaque fois.&lt;/p&gt;

&lt;p&gt;Tous les utilisateurs n'ont pas non plus les mêmes droits. Grâce à un système de &lt;strong&gt;rôles&lt;/strong&gt; 👥, chacun n'accède qu'aux fonctionnalités qui le concernent : un candidat peut gérer son propre profil, mais il ne peut évidemment pas modifier celui des autres.&lt;/p&gt;

&lt;p&gt;Enfin, certains services n'ont pas d'utilisateur humain derrière eux. C'est le cas du workflow &lt;strong&gt;n8n de CVForge&lt;/strong&gt;, qui échange automatiquement avec notre API. Nous lui avons attribué une &lt;strong&gt;clé API&lt;/strong&gt; 🔑 : une sorte de mot de passe réservé aux machines, qui lui permet de s'identifier et de communiquer avec nous &lt;strong&gt;de manière sécurisée&lt;/strong&gt;, sans passer par un compte utilisateur classique.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. 📚 La documentation avec Swagger
&lt;/h3&gt;

&lt;p&gt;Une API n'est utile que si les autres savent s'en servir ! Pour faciliter le travail des équipes, nous utilisons &lt;strong&gt;Swagger&lt;/strong&gt;, un outil qui génère automatiquement une documentation interactive.&lt;/p&gt;

&lt;p&gt;Concrètement, c'est une page web qui liste toutes les routes disponibles, explique ce que chacune attend et ce qu'elle renvoie, et permet même de &lt;strong&gt;les tester directement depuis le navigateur&lt;/strong&gt;, sans écrire une seule ligne de code. Un vrai « mode d'emploi » vivant de notre API.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📊 &lt;strong&gt;27 routes&lt;/strong&gt; sont disponibles au total !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://hackavp-api.duckdns.org/swagger-ui" rel="noopener noreferrer"&gt;Accéder à la documentation Swagger HACKAVPI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ☁️ Déploiement : disponible 24h/24
&lt;/h2&gt;

&lt;p&gt;HACKAVPI est un &lt;strong&gt;hub qui relie l'ensemble des services&lt;/strong&gt; du projet : si elle tombe, ce sont toutes les applications qui se retrouvent bloquées. La disponibilité était donc une &lt;strong&gt;contrainte majeure&lt;/strong&gt; dès le départ. ⚡&lt;/p&gt;

&lt;p&gt;Pour y répondre, nous avons fait trois choix :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🖥️ &lt;strong&gt;Un VPS externe&lt;/strong&gt; : un &lt;em&gt;VPS&lt;/em&gt; (serveur privé virtuel) est un serveur loué en ligne, qui tourne en permanence. Plutôt que de faire fonctionner l'API sur nos ordinateurs personnels, nous l'avons déployée très tôt sur ce serveur, pour qu'elle soit accessible &lt;strong&gt;24h/24&lt;/strong&gt; et que les autres équipes puissent commencer à l'utiliser rapidement.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Une pipeline de déploiement continu&lt;/strong&gt; : c'est un processus automatisé qui, dès que nous publions une modification du code, met à jour l'API en ligne en quelques minutes, sans intervention manuelle. Les autres équipes nous sollicitaient régulièrement pour de nouvelles routes ou des ajustements : ce système nous a permis de &lt;strong&gt;répondre vite et de rester réactifs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Un nom de domaine gratuit avec DuckDNS&lt;/strong&gt; : un nom de domaine est une adresse lisible (comme un nom de rue) qui pointe vers notre serveur, plutôt qu'une suite de chiffres difficile à retenir. DuckDNS nous permet d'utiliser gratuitement l'adresse &lt;code&gt;hackavp-api.duckdns.org&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;💻 Modification du code ──► 🔄 Déploiement automatique ──► 🖥️ VPS ──► 🌐 hackavp-api.duckdns.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🏁 Pour conclure
&lt;/h2&gt;

&lt;p&gt;HACKAVPI, c'est la &lt;strong&gt;colonne vertébrale&lt;/strong&gt; du HackAVP : un point d'entrée unique pour les données, l'authentification, le dépôt et l'analyse des CV, les statistiques… le tout &lt;strong&gt;sécurisé, documenté et disponible en continu&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Au-delà de la technique, ce projet nous a appris à &lt;strong&gt;travailler au service des autres équipes&lt;/strong&gt; : comprendre leurs besoins, leur fournir des outils fiables et nous adapter rapidement à leurs demandes.&lt;/p&gt;

&lt;p&gt;Merci de nous avoir lus ! N'hésitez pas à laisser vos questions ou vos retours en commentaire 💬🔥&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
