<?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: Quoc-Kim BUI</title>
    <description>The latest articles on DEV Community by Quoc-Kim BUI (@spewq).</description>
    <link>https://dev.to/spewq</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%2F3270270%2Fd26301cf-dc35-4817-a67d-5c55e9b14d79.png</url>
      <title>DEV Community: Quoc-Kim BUI</title>
      <link>https://dev.to/spewq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spewq"/>
    <language>en</language>
    <item>
      <title>📑 #HackAVP CV Generator, la solution de préparation de candidature</title>
      <dc:creator>Quoc-Kim BUI</dc:creator>
      <pubDate>Sat, 17 Oct 2026 03:31:46 +0000</pubDate>
      <link>https://dev.to/spewq/hackavp-cv-generator-la-solution-de-preparation-de-candidature-1p30</link>
      <guid>https://dev.to/spewq/hackavp-cv-generator-la-solution-de-preparation-de-candidature-1p30</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;👉 Lancement du hackathon : &lt;a href="https://dev.to/adriens/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0"&gt;#HackAVP, premier hackathon dédié à l'emploi dans la fonction publique en NCL&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/adriens/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0" class="crayons-story__hidden-navigation-link"&gt;🏆 #HackAVP, premier hackathon dédié à l'emploi dans la fonction publique en NCL&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
                
              
              &lt;div id="story-author-preview-content-4400434" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/adriens/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 26&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/adriens/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0" id="article-link-4400434"&gt;
          🏆 #HackAVP, premier hackathon dédié à l'emploi dans la fonction publique en NCL
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hackathon"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hackathon&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hackavp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hackavp&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/adriens/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/adriens/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              20&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            14 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  ▶️ TL;DR
&lt;/h2&gt;

&lt;p&gt;Si vous avez 5 minutes devant vous :&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/sNb1rM0gVDE" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  💼 Un &lt;strong&gt;lagon&lt;/strong&gt; d'offres d'AVPs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opt-nc.github.io/odata-avps/stats/index.html" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wfazt8ytj7oventiysy.png" alt="Offres ouvertes par famille métier, mois par mois"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opt-nc.github.io/odata-avps/stats/index.html" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Focfphd5kkmawpnzh68xr.png" alt="Offres ouvertes par métier mois par mois"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vous êtes &lt;strong&gt;calédonien(ne)&lt;/strong&gt; et vous voulez &lt;strong&gt;travailler dans la fonction publique&lt;/strong&gt; pour contribuer au développement du Caillou ? Ça tombe bien, nous avons une &lt;strong&gt;bonne nouvelle&lt;/strong&gt; à vous partager : le lagon est &lt;a href="https://opt-nc.github.io/odata-avps/stats/index.html" rel="noopener noreferrer"&gt;&lt;strong&gt;riche en avis de vacance de poste&lt;/strong&gt;&lt;/a&gt; (AVPs). Mais qui dit bonne nouvelle d'un côté dit mauvaise nouvelle de l'autre. &lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Trouver l'AVP qui vous correspond, une analogie à l'aventure ?
&lt;/h2&gt;

&lt;p&gt;Chaque AVP, c’est une &lt;strong&gt;quête complexe en trois niveaux&lt;/strong&gt; qui peut vite décourager si elle est mal préparée : il faut réaliser un &lt;strong&gt;CV&lt;/strong&gt; qui vous décrit au mieux pour ce poste, rédiger une &lt;strong&gt;lettre de motivation&lt;/strong&gt; qui répond aux attentes de l’AVP, puis affronter le boss final tant redouté : &lt;strong&gt;l’entretien.&lt;/strong&gt; Et tout ça, pour chaque offre.&lt;/p&gt;

&lt;p&gt;Le &lt;strong&gt;HackAVP&lt;/strong&gt;, premier hackathon dédié à &lt;strong&gt;l'emploi dans la fonction publique&lt;/strong&gt;, propose comme défi de &lt;strong&gt;développer une solution&lt;/strong&gt; utilisant les &lt;strong&gt;données d'AVPs&lt;/strong&gt; mises à disposition par &lt;strong&gt;l'OPT-NC&lt;/strong&gt; pour que le candidat puisse postuler à &lt;strong&gt;THE AVP&lt;/strong&gt; qui lui correspond !&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Comment accomplir cette quête de l'AVP idéal ?
&lt;/h2&gt;

&lt;p&gt;C'est là que &lt;strong&gt;CV Generator&lt;/strong&gt; entre en scène, notre solution pour la préparation de candidature qui s'inscrit dans le projet global de notre Master MIAGE :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4rbarytba1gnqv0cxeg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4rbarytba1gnqv0cxeg.png" alt="Logo de Jobmatch NC"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9cr3lc96zstz5t0zel4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9cr3lc96zstz5t0zel4y.png" alt="Schéma global de Jobmatch NC"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📑 La promesse de CV Generator
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsln1w5uywqdowxky7nzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsln1w5uywqdowxky7nzy.png" alt="Schéma du fonctionnement de CV Generator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🛤️ Souveraineté et track choisie
&lt;/h2&gt;

&lt;p&gt;CV Generator est une solution &lt;strong&gt;&lt;code&gt;onPrem&lt;/code&gt; souveraine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pas de cloud lointain ici : il tourne sur un PC fixe, posé en Nouvelle-Calédonie, dans notre cas équipé d’une &lt;strong&gt;RTX 5080&lt;/strong&gt;. Il peut être sur le matériel de votre choix dont vous disposez et que vous pouvez upgrader en fonction de vos moyens et ambitions. Votre profil ne quitte pas le Caillou.&lt;/p&gt;

&lt;h2&gt;
  
  
  👩🏻‍💻 L'épopée de Camille Molette, candidate fictive en quête de la candidature pour l'AVP idéal (parcours utilisateur)
&lt;/h2&gt;

&lt;p&gt;Pour que vous ayez un aperçu concret de comment se déroule &lt;strong&gt;CV Generator&lt;/strong&gt;, nous allons vous raconter l'histoire de &lt;strong&gt;Camille Molette&lt;/strong&gt; : &lt;/p&gt;

&lt;p&gt;Camille est assistante qualité chez Entreprise Ethernet (fictive). Elle participe à l'amélioration des processus internes de son entreprise, et c'est quelqu'un qui aime quand c'est organisé. Elle possède une page JSON Resume.&lt;/p&gt;

&lt;p&gt;Cependant, elle souhaite &lt;strong&gt;élargir ses horizons métiers&lt;/strong&gt; en décidant de postuler à un emploi dans la fonction publique, via un AVP de l'OPT-NC. Elle a alors utilisé &lt;a href="https://faucontower.tailc3c864.ts.net:8443" rel="noopener noreferrer"&gt;l'interface web CV Generator&lt;/a&gt; : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;D'abord, Camille donne son CV &lt;a href="https://jsonresume.org/" rel="noopener noreferrer"&gt;au format &lt;strong&gt;JSON Resume&lt;/strong&gt;.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ensuite, elle renseigne un &lt;strong&gt;numéro&lt;/strong&gt; d'AVP.&lt;/li&gt;
&lt;li&gt;Puis, elle &lt;strong&gt;choisit le document&lt;/strong&gt; à générer (CV, lettre ou guide d'entretien) et suit son statut en temps réel.&lt;/li&gt;
&lt;li&gt;Après, Camille retrouve ses documents dans &lt;strong&gt;l'historique&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enfin, elle télécharge le résultat en &lt;strong&gt;DOCX, adoc, md&lt;/strong&gt; ou le prévisualise en &lt;strong&gt;PDF&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://drive.google.com/drive/folders/1X-YqC9b_xPNxvZQBHAPo7j6FlnyzJaEn?usp=sharing" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmi1oumhvzhjvtnlhg9wq.png" alt="Extrait du CV de Camille Molette"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🗂️ &lt;a href="https://drive.google.com/drive/folders/1X-YqC9b_xPNxvZQBHAPo7j6FlnyzJaEn?usp=sharing" rel="noopener noreferrer"&gt;Google Drive du JSON Resume de Camille, et des documents générés pour les curieux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Armée&lt;/strong&gt; de ses trois atouts (CV, Lettre de motivation et guide d'entretien), elle est prête à faire face à l'ultime obstacle : l'entretien ! 👔&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Les données ouvertes de l'OPT-NC au cœur de CV Generator
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4613to8xhpcyuknj6ais.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4613to8xhpcyuknj6ais.png" alt="Portail APIGEE public de l'OPT-NC"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://apigee-optnc-prd-api.apigee.io/apis" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;apigee-optnc-prd-api.apigee.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Le numéro d'AVP vient du portail &lt;strong&gt;APIGEE&lt;/strong&gt; public de l'OPT-NC.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://dev.to/adriens/series/21192"&gt;(Série d'articles APIGEE dédiée)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sa récupération se fait grâce au flux suivant : &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fms6bl1kneburwdh8g6ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fms6bl1kneburwdh8g6ox.png" alt="Workflow Master MIAGE"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Les &lt;strong&gt;numéros d'AVPs&lt;/strong&gt; adaptés au profil candidat sont issus de &lt;strong&gt;CV-Matching&lt;/strong&gt;, une autre solution développée par un de nos camarades du Master MIAGE qui permet de trouver ces AVPs via un &lt;strong&gt;scoring.&lt;/strong&gt; L'explication du score et les forces et écarts du candidat sont détaillés dans &lt;strong&gt;CV-Matching.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🏢 Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhpvu9nirjuy63k982zuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhpvu9nirjuy63k982zuf.png" alt="Architecture technique de CV Generator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Le LLM et le prompt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On utilise un serveur &lt;a href="https://github.com/ggml-org/llama.cpp" rel="noopener noreferrer"&gt;&lt;strong&gt;llama.cpp&lt;/strong&gt;&lt;/a&gt; qui expose une API compatible OpenAI avec le modèle &lt;strong&gt;Qwen3&lt;/strong&gt;, un modèle &lt;strong&gt;Open Source&lt;/strong&gt; sur Hugging Face.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://huggingface.co/ggml-org/Qwen3-14B-GGUF" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-thumbnails.huggingface.co%2Fsocial-thumbnails%2Fmodels%2Fggml-org%2FQwen3-14B-GGUF.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://huggingface.co/ggml-org/Qwen3-14B-GGUF" rel="noopener noreferrer" class="c-link"&gt;
            ggml-org/Qwen3-14B-GGUF · Hugging Face
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            We’re on a journey to advance and democratize artificial intelligence through open source and open science.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          huggingface.co
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Chaque document a son prompt dédié afin de rendre la génération la plus précise et adaptée possible à l'AVP de vos rêves !&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Qualité, tests et déploiement
&lt;/h2&gt;

&lt;p&gt;Avant que vous puissiez affronter l'entretien, on vérifie que l’équipement qu'on vous a fourni tient la route :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tests automatisés :&lt;/strong&gt; &lt;code&gt;pytest&lt;/code&gt; rejoue nos scénarios à chaque changement, et &lt;code&gt;ruff&lt;/code&gt; formate et vérifie le code pour qu’il reste propre et lisible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation sélective :&lt;/strong&gt; la CI GitHub Actions ne relance que les suites concernées par les fichiers modifiés. Comme un joueur qui ne refait que le niveau qu’il vient de changer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un seul coffre pour tout transporter :&lt;/strong&gt; CV Generator est conteneurisé et se déploie avec Docker Compose (local et production). Les images sont publiées sur &lt;strong&gt;GHCR&lt;/strong&gt;, et chaque release est versionnée.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Sécurité et données personnelles
&lt;/h2&gt;

&lt;p&gt;Préparer sa candidature c'est une quête certes, mais avec CV Generator, c'est dans un cadre sécurisé : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;L'accès est contrôlé et sécurisé par la &lt;strong&gt;clé API&lt;/strong&gt; (&lt;code&gt;X-API-Key&lt;/code&gt;) qui empêche chaque client de  fouiner dans les documents des autres.&lt;/li&gt;
&lt;li&gt;Un document inexistant ou appartenant à un autre client renvoie une erreur 404 dans les deux cas.&lt;/li&gt;
&lt;li&gt;Votre JSON Resume n'est ni exposé par l'API de statut ni destiné aux journaux.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Aujourd'hui&lt;/strong&gt;, il y'a une clé API qui &lt;strong&gt;contrôle les accès&lt;/strong&gt; à CV Generator et simplifie le travail côté &lt;strong&gt;interopérabilité&lt;/strong&gt; au sein de notre Master MIAGE. &lt;strong&gt;Plus tard&lt;/strong&gt;, une connexion via &lt;strong&gt;NC connect&lt;/strong&gt; est envisageable.&lt;/p&gt;

&lt;h2&gt;
  
  
  👥 Qui sommes-nous ?
&lt;/h2&gt;

&lt;p&gt;Nous sommes un duo d'étudiants du &lt;strong&gt;Master MIAGE&lt;/strong&gt; à &lt;a href="https://iae.unc.nc/" rel="noopener noreferrer"&gt;l'IAE de Nouvelle-Calédonie&lt;/a&gt; : &lt;strong&gt;Quoc-Kim&lt;/strong&gt; BUI (plus communément Kim) et &lt;strong&gt;Anthony&lt;/strong&gt; GASS. On s'est réparti les &lt;strong&gt;tâches&lt;/strong&gt; de cette manière :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Kim&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Anthony&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gestion de projet&lt;/td&gt;
&lt;td&gt;Conception architecture technique&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;Développement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Digital design&lt;/td&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;Sécurité&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Grâce à cette répartition, on a pu s'organiser du mieux possible pour vous offrir un arsenal technique et humain afin d'affronter l'entretien dans les meilleures conditions. ⚔︎&lt;/p&gt;

&lt;p&gt;Vous pouvez nous retrouver sur :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn : &lt;a href="https://www.linkedin.com/in/quoc-kim-bui-70aa6121a/" rel="noopener noreferrer"&gt;Kim&lt;/a&gt; / &lt;a href="https://www.linkedin.com/in/anthony-gass-2b77a5300/" rel="noopener noreferrer"&gt;Anthony&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub : &lt;a href="https://github.com/SpewQ" rel="noopener noreferrer"&gt;Kim&lt;/a&gt; / &lt;a href="https://github.com/gass-an" rel="noopener noreferrer"&gt;Anthony&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Lors du HackAVP, nous étions respectivement chez &lt;a href="https://apid.nc" rel="noopener noreferrer"&gt;APID&lt;/a&gt; et la &lt;a href="https://www.province-sud.nc" rel="noopener noreferrer"&gt;Province Sud&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 Conclusion
&lt;/h2&gt;

&lt;p&gt;Merci à &lt;strong&gt;l'OPT-NC&lt;/strong&gt;, à la &lt;strong&gt;Station N&lt;/strong&gt; et à la &lt;strong&gt;commission Data &amp;amp; IA d'OPEN NC&lt;/strong&gt; de nous avoir donné la possibilité d'exploiter des données interopérables afin qu'on puisse proposer une solution qui répond à de vrais enjeux de l'emploi calédonien dans la fonction publique.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Ressources
&lt;/h2&gt;

&lt;p&gt;Pour les développeurs curieux :&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gass-an" rel="noopener noreferrer"&gt;
        gass-an
      &lt;/a&gt; / &lt;a href="https://github.com/gass-an/CV-Generator" rel="noopener noreferrer"&gt;
        CV-Generator
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Projet on-premise permettant de générer des CV, des lettres de motivation et des documents de préparation aux entretiens à partir d'un AVP de l'OPT-NC. Développé dans le cadre du Master MIAGE pour le HackAVP 2026.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CV-Generator&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;CV-Generator génère des CV, des lettres de motivation et des guides de
préparation à l'entretien adaptés à un avis de vacance de poste (AVP) de l'OPT
à partir des seules informations d'un JSON Resume.&lt;/p&gt;
&lt;p&gt;Le dépôt sépare :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le backend FastAPI et son worker dans &lt;code&gt;generator-service/&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;les modèles et la gestion des clés communs dans &lt;code&gt;shared/&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;le service privé d'administration dans &lt;code&gt;generator-admin-service/&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;le frontend React dans &lt;code&gt;generatorweb-service/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le backend enregistre chaque demande comme un job PostgreSQL. Un worker appelle
ensuite llama.cpp, stocke le document source en AsciiDoc et permet son
téléchargement au format DOCX généré à la demande.&lt;/p&gt;
&lt;p&gt;La &lt;a href="https://github.com/gass-an/CV-Generator/generator-service/README.md" rel="noopener noreferrer"&gt;documentation du backend&lt;/a&gt; détaille
l'installation et l'API. Les &lt;a href="https://github.com/gass-an/CV-Generator/generator-service/demo/curl-examples.md" rel="noopener noreferrer"&gt;exemples curl&lt;/a&gt;
permettent de tester les trois types de documents. Le
&lt;a href="https://github.com/gass-an/CV-Generator/deploy/README.md" rel="noopener noreferrer"&gt;déploiement Docker&lt;/a&gt; décrit l'installation de production
La gestion métier des clés est documentée dans &lt;a href="https://github.com/gass-an/CV-Generator/shared/README.md" rel="noopener noreferrer"&gt;shared/README.md&lt;/a&gt;
Les configurations Docker locales et de production sont centralisées dans
&lt;a href="https://github.com/gass-an/CV-Generator/deploy/README.md" rel="noopener noreferrer"&gt;&lt;code&gt;deploy/&lt;/code&gt;&lt;/a&gt;…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/gass-an/CV-Generator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Rendez-vous le &lt;strong&gt;4 novembre à Tech&amp;amp;Co&lt;/strong&gt; pour la remise des prix !&lt;/p&gt;

&lt;p&gt;Et vous, quel est le &lt;strong&gt;pire moment&lt;/strong&gt; de cette fameuse quête de la &lt;strong&gt;candidature&lt;/strong&gt; : le CV, la lettre ou l’entretien ? 👇&lt;/p&gt;

</description>
      <category>hackavp</category>
      <category>hackathon</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
