· Quentin Roger
J'ai transformé mon CV en chatbot IA
- SvelteKit
- Generative AI
- Groq
- Firebase
Un CV, c'est un PDF que les recruteurs survolent en 30 secondes, quand ce n'est pas un algo qui le keyword-matche avant même qu'un humain ne l'ouvre.
Du coup, je me suis dit qu'on pourrait discuter avec mon CV au lieu de le lire. Lui demander « c'est quoi tes projets Azure OpenAI chez Bouygues Telecom ? » ou « tu prendrais quelle stack pour un produit GenAI ? » et obtenir une vraie réponse, streamée token par token. C'est ce que fait qroger.com, et voici comment c'est construit.
La stack
- SvelteKit 3 + Svelte 5 pour le site, rendu côté serveur, avec les runes (
$state,$props). - Groq pour l'inférence, via le Vercel AI SDK. Leurs puces LPU sortent le premier token en moins d'une seconde, et dans une interface de chat ça se sent tout de suite.
- Firebase pour l'authentification, et Firestore pour les quotas.
- Tailwind CSS 4 + GSAP pour le côté visuel : le fond fluide animé et les grilles de points tournent sur le GPU.
- Vercel pour l'hébergement et les stats.
Un seul fichier pour les gouverner tous
Le truc dont je suis le plus content, c'est l'architecture de la donnée. Tout mon parcours (expériences, compétences, certifs) vit dans un seul module TypeScript, et ce module alimente trois choses à la fois :
- Le system prompt envoyé au LLM, comme ça l'assistant répond avec des faits au lieu de m'inventer une carrière chez la NASA.
- La section CV de la page d'accueil, rendue côté serveur pour que Google voie tout le contenu.
- Un endpoint
/llms.txt, un résumé markdown de tout le CV servi tout propre aux crawlers IA.
Quand je modifie une expérience, le chatbot, la page et le fichier pour les robots suivent sans que j'aie à y penser.
Pas de compte à créer, mais un quota quand même
Personne ne va créer un compte pour regarder un CV. Donc chaque visiteur récupère automatiquement une session anonyme Firebase, suffisante pour discuter avec un petit quota quotidien. Et si vous vous connectez avec Google ou GitHub, vous débloquez un quota plus généreux… et mes vraies coordonnées.
Les coordonnées affichées publiquement sont floutées et volontairement bidon. Les scrapers peuvent toujours écrire à nice.try.robots@gmail.com.
Côté quota, c'est minimaliste : un document Firestore par session avec un identifiant, une date et un compteur. Les conversations ne sont stockées nulle part : elles partent chez Groq pour l'inférence et la réponse revient en streaming.
Le streaming
La route API utilise streamText du AI SDK et renvoie la réponse en flux. Côté client, chaque chunk passe par markdown-it puis DOMPurify avant de toucher le DOM. Re-rendre le markdown à chaque chunk, sur le papier ça a l'air d'un gâchis, mais pour des messages de taille chat c'est imperceptible, et l'assistant peut sortir des listes, des liens et des blocs de code proprement.
Être trouvable par les IA
Une part croissante des recherches se fait maintenant dans ChatGPT, Claude ou Perplexity, et un site que leurs crawlers ne peuvent pas lire n'apparaît pas dans leurs réponses. J'ai mis en place trois choses, toutes rapides à faire :
- Un
robots.txtqui autorise explicitement GPTBot, ClaudeBot, PerplexityBot et compagnie, y compris leurs variantes search. - Le fameux
/llms.txtqui sert le CV complet en markdown propre, plutôt que de laisser un LLM se dépatouiller avec une soupe de<div>. - Du JSON-LD (schémas
Person+WebSite) pour les moteurs de recherche classiques.
Le tout m'a pris moins d'une heure, et c'est probablement le meilleur ratio effort/résultat de tout le site niveau référencement.
Si vous voulez faire pareil
Le conseil principal, c'est de garder les données du CV dans un seul module structuré et de dériver tout le reste à partir de là. L'auth anonyme évite de demander un compte, à condition de mettre un quota dès le premier jour. Et ça vaut le coup de soigner ce que voient les crawlers IA, vu que de plus en plus de recherches passent par eux.
Des questions ? Posez-les directement au chatbot, il connaît mon CV mieux que moi.
Transparence : cet article a été co-écrit avec une IA. Pour un site dont la vedette est un chatbot, ça aurait été un comble de prétendre le contraire.