Partagé
NGXS
Actions, selectors et orchestration des données communes à une feature.
1Glink · Deep dive technique
Un aperçu de l’architecture de la plateforme et des contributions que mon historique Git permet de m’attribuer : composants, données, système UI et interactions métier.
01 · Vue d’ensemble
L’application repose sur Angular 20, des composants standalone et un chargement paresseux des features. Les états métier sont majoritairement fournis au niveau des routes, au plus près de leur durée de vie.
Shell authentifié
Navigation · contexte · notificationsFeatures métier
CV · candidats · offres · entretiensÉtat et flux
NGXS · Signals · RxJSServices
REST · traitements asynchrones · temps réelCette architecture décrit le projet dans lequel mes développements s’inscrivent. Elle ne signifie pas que j’en ai conçu seul l’ensemble.
02 · Angular
NGXS, Signals et RxJS ne couvrent pas la même temporalité. Le projet les combine pour séparer l’état partagé, les dérivations proches de l’interface et les flux asynchrones.
Partagé
Actions, selectors et orchestration des données communes à une feature.
Proche de la vue
État local et valeurs dérivées consommées directement par les composants.
Asynchrone
Requêtes HTTP, formulaires, notifications et autres flux qui évoluent dans le temps.
03 · Refactoring
Les pages CV et entretien rassemblent beaucoup de responsabilités. J’ai contribué à les découper pour que la page principale orchestre le parcours sans porter chaque détail d’affichage.
Avant · responsabilités concentrées
Après · responsabilités distribuées
04 · TypeScript
Sur la restitution CV, j’ai travaillé sur des mappers qui regroupent et hiérarchisent les informations avant leur affichage. Les composants reçoivent ainsi un modèle adapté à leur fonction.
Les transformations peuvent être relues sans parcourir le DOM.
Les cartes partagent des contrats plus petits et plus explicites.
Les changements de présentation restent localisés.
05 · UI Engineering
J’ai restructuré le SCSS global en couches et contribué aux primitives utilisées par les écrans CV. L’objectif n’était pas de réécrire toute l’application, mais de fournir une base commune aux nouveaux écrans et aux migrations utiles.
Certains écrans sont d’abord assemblés avec des composants standards afin de rendre la fonctionnalité utilisable. Mon intervention consiste ensuite à reprendre leur structure, leurs états et leur présentation pour les intégrer au langage visuel du produit, sans dégrader leur comportement métier.
Le CDK reste pertinent lorsqu’il apporte une mécanique utile sans imposer de style. Le système visuel progresse ainsi écran par écran, en fonction des besoins réels du produit.
07 · Dans le code
Ces extraits réels sont volontairement courts : le contexte et l’effet comptent davantage que la quantité de code affichée.
ResizeObserver
Décision — regrouper les changements de taille dans la prochaine frame. Effet — la grille se recalcule après le rendu sans empiler les mises à jour.
this.resizeObserver = new ResizeObserver(() => {
this.scheduleLayout();
});
private scheduleLayout(): void {
if (this.layoutFrame !== null) {
cancelAnimationFrame(this.layoutFrame);
}
this.layoutFrame = requestAnimationFrame(() => {
this.layoutFrame = null;
this.layout();
});
}Mapper TypeScript
Décision — convertir les dates en positions bornées dans un ViewModel. Effet — le composant reçoit des valeurs directement exploitables pour l’affichage.
const items = parsedExperiences.map((parsed, index) => {
const startTime = parsed.startDate?.getTime() ?? minTime;
const endTime = parsed.endDate?.getTime() ?? maxTime;
const rawStart = ((startTime - minTime) / timelineDuration) * 100;
const rawEnd = ((endTime - minTime) / timelineDuration) * 100;
const startPercent = clamp(rawStart, 0, 96);
const endPercent = clamp(rawEnd, startPercent, 100);
return {
...parsed.item,
id: parsed.item.id || `career-timeline-${index}`,
positionPercent: startPercent,
startPercent,
endPercent,
};
});08 · Formulaire métier
J’ai contribué au formulaire de planification, à son calendrier et à l’état associé. Le problème dépasse la saisie de champs : il faut rapprocher participants, candidat, offre, date, horaires et contraintes de planning.
09 · Contributions
Cette sélection est limitée aux changements confirmés par mon historique Git. Elle ne m’attribue ni l’architecture complète du produit ni les briques temps réel développées par d’autres membres de l’équipe.