JJK Tech
Projet personnelReactTypeScriptFirebaseClaudeTailwindProductivité

Cadence — App de recherche de stage

Un cockpit personnel pour chercher un stage : objectifs chiffrés, suivi de candidatures, et un assistant IA qui score les offres, compare le CV et prépare les entretiens.

Cadence — App de recherche de stage

01Contexte

Contexte

Projet personnel en production (2026), conçu et développé en solo — produit, UI, full-stack, intégration IA et déploiement. Cadence sert au quotidien à un étudiant Master 2 en recherche de stage : un outil unique, sobre et synchronisé, plutôt qu'un tableur ou des notes éparpillées. Ce n'est pas une mission client : c'est un side project réel, utilisé tous les jours, hébergé sur Firebase Hosting (https://fluxetudiant.web.app).

02Problème

Problème

Pendant une recherche de stage, candidatures, relances, CV, offres et préparation d'entretien se dispersent entre notes, mails et tableurs. Il manquait un outil unique, synchronisé, avec de l'IA vraiment utile — score d'offre, match CV, e-mail, lettre, kit entretien — pas un gadget.

03Solution

Solution

SPA dark en français, comptes personnels, données dans Firestore. Deux espaces : Organisation (objectifs du mois, notes, assistant) et Candidatures (pipeline, dates, historique). L'IA (Claude, via Cloud Function) score les offres, analyse l'adéquation CV ↔ annonce, rédige e-mails et lettres, et génère un kit entretien lisible. Auth Firebase, isolation par utilisateur, interface volontairement sans surplus de couleurs.

04Résultats

Résultats

  • Projet personnel en production, usage quotidien pendant une recherche de stage M2
  • Pipeline de candidatures + organisation dans une seule app synchronisée
  • IA côté serveur uniquement : score, match CV, e-mail, lettre et kit entretien
  • Données isolées par compte (Firestore rules : auth.uid == userId)

05Fonctionnalités

Fonctionnalités

Organisation

  • Objectifs du mois, y compris quantifiés (ex. 6 candidatures/jour) avec barre de progression et quota du jour
  • Notes rapides et assistant IA pour les structurer ou proposer des objectifs
  • Emploi du temps hebdomadaire (8h–23h, drag & drop, suggestions IA, export .ics), masqué par défaut
  • Zones affichables ou masquables selon le besoin du moment

Candidatures

  • Fiches entreprise, poste, URL, contact, dates (envoi, relance, entretien)
  • Pipeline : À envoyer, Envoyée, Relancée, Entretien, Refus, Acceptée
  • Grille 3 colonnes, une seule fiche ouverte à la fois, en modale
  • Import CV PDF / .txt / .md, historique horodaté, filtres par statut et scores, brouillon persisté

Assistant IA

  • Score offre 1–10 et justification
  • Match CV ↔ offre 1–10, écarts et actions
  • E-mail de candidature, lettre de motivation, brief et kit entretien (markdown propre, même si l'IA renvoie un JSON)
  • Page Résultats IA et suggestions d'objectifs / planning depuis les notes

06Stack & architecture

Stack & architecture

Frontend React 19, TypeScript, Vite 8, Tailwind CSS 4, typo DM Sans et JetBrains Mono. Auth Firebase (e-mail / mot de passe + Google : popup desktop, redirect mobile) et Cloud Firestore, collections ideas, monthlyGoals, plannerTasks, candidatures sous appData/{uid}/. Hosting Firebase (SPA, rewrite ** → index.html). IA via Cloud Function api (europe-west1), proxy /api/**, clé Anthropic jamais exposée au client. PDF avec pdfjs-dist, markdown avec react-markdown. Pas de React Router : navigation Organisation / Candidatures persistée en localStorage, hash pour les résultats IA.

SPA

React 19, état local pour la navigation, UI compacte mobile-first (cartes, modales, barres de progression). Dark zinc : la couleur est réservée aux erreurs et actions destructives.

Firebase

Auth, Firestore et Hosting. Données par uid, rules lecture/écriture uniquement si auth.uid == userId. Migration depuis un ancien espace partagé.

Cloud Function

Proxy IA europe-west1. Claude / Anthropic côté serveur. Normalisation des payloads (JSON, blocs json, JSON tronqué) pour afficher du vrai markdown.

07Défis

Défis

  • Isolation des données par compte et migration depuis un ancien espace partagé
  • IA côté serveur uniquement, sans clé dans le front
  • Normalisation des réponses IA (JSON, fences, JSON tronqué) vers du markdown lisible
  • Extraction texte PDF côté client
  • Grille candidatures : l'expansion cassait les colonnes, remplacée par une modale
  • Objectifs binaires et quantifiés, rétrocompatibles dans Firestore
  • Export calendrier ICS hebdomadaire
  • Auth Google adaptée mobile (redirect) vs desktop (popup)

08Statut

Statut

En production sur Firebase Hosting, usage quotidien. Live : https://fluxetudiant.web.app. Captures à coller dans public/projects/ (remplacer cadence.svg) : écran Organisation, grille Candidatures, modale / résultats IA.

Une question sur ce projet ?

Posez une question précise (technique, choix d'architecture, résultats...) et obtenez une réponse générée à partir du contenu de ce projet.