mirror of
				https://github.com/theoludwig/theoludwig.git
				synced 2025-10-14 20:23:25 +02:00 
			
		
		
		
	fix: add more details to tasks in Work experiences
This commit is contained in:
		| @@ -87,14 +87,23 @@ | |||||||
|       "title": "Studies" |       "title": "Studies" | ||||||
|     }, |     }, | ||||||
|     "interests": { |     "interests": { | ||||||
|       "fusey": "<link>Fusey (fusey.gg)</link>: website I'm developing for the game ARK that tracks the number of players connected to the servers in real time and has over ~5,000 visitors each month, ~100,000 members on Discord, and ~120,000 followers on X/Twitter.", |       "title": "Interests & hobbies", | ||||||
|  |       "fusey": "<link>Fusey (fusey.gg)</link>: website I'm developing for the game ARK that tracks the number of players connected to the servers in real time and has <strong>over ~5,000 visitors each month, ~100,000 members on Discord, and ~120,000 followers on X/Twitter</strong>.", | ||||||
|       "open-source": "Open-Source Enthusiast" |       "open-source": "Open-Source Enthusiast" | ||||||
|     }, |     }, | ||||||
|     "work": { |     "work": { | ||||||
|       "ircad": { |       "ircad": { | ||||||
|         "duration": "4 years", |         "duration": "4 years", | ||||||
|         "position": "Full Stack Web Developer Apprentice", |         "position": "Full Stack Web Developer Apprentice", | ||||||
|         "summary": "Development of WebSurg, a virtual university dedicated to medical-surgical training, in React.js/Next.js and API Platform with Symfony." |         "tasks": { | ||||||
|  |           "WebSurg": "Development of WebSurg, a virtual university dedicated to medical-surgical training, built with React.js/Next.js and API Platform with Symfony.", | ||||||
|  |           "Figma": "Integration of Figma mockups for WebSurg, website dedicated to medical-surgical training.", | ||||||
|  |           "IRCAD-Core": "IRCAD Core, an internal tool for managing medical training sessions and their requirements (anatomicals models, medications, staff training, etc.).", | ||||||
|  |           "feature-logs": "History and traceability of data modifications (what? who? when?) in IRCAD Core.", | ||||||
|  |           "feature-permissions": "Advanced permissions system and OAuth2 authentication, with read, write, and delete access restricted for specific users of the IRCAD Core application.", | ||||||
|  |           "feature-search": "Search engine with filters, sorting, and customizable display for each user of IRCAD Core.", | ||||||
|  |           "feature-architecture": "IRCAD Core project architecture in TypeScript Monorepo with Turborepo, and automatic deployment (CI/CD) with Docker Compose, self-hosted internally." | ||||||
|  |         } | ||||||
|       }, |       }, | ||||||
|       "numerize": { |       "numerize": { | ||||||
|         "duration": "3 months", |         "duration": "3 months", | ||||||
|   | |||||||
| @@ -87,14 +87,23 @@ | |||||||
|       "title": "Études" |       "title": "Études" | ||||||
|     }, |     }, | ||||||
|     "interests": { |     "interests": { | ||||||
|       "fusey": "<link>Fusey (fusey.gg)</link> : site web que je développe pour le jeu ARK qui permet de suivre en temps réel le nombre de joueurs connectés sur les serveurs et a plus de ~5 000 visiteurs chaque mois, ~100 000 membres sur Discord et ~120 000 followers sur X/Twitter.", |       "title": "Intérêts & loisirs", | ||||||
|  |       "fusey": "<link>Fusey (fusey.gg)</link> : site web que je développe pour le jeu ARK qui permet de suivre en temps réel le nombre de joueurs connectés sur les serveurs et a plus de <strong>~5 000 visiteurs chaque mois, ~100 000 membres sur Discord et ~120 000 followers sur X/Twitter</strong>.", | ||||||
|       "open-source": "Enthousiaste de l'Open-Source" |       "open-source": "Enthousiaste de l'Open-Source" | ||||||
|     }, |     }, | ||||||
|     "work": { |     "work": { | ||||||
|       "ircad": { |       "ircad": { | ||||||
|         "duration": "4 ans", |         "duration": "4 ans", | ||||||
|         "position": "Apprenti Développeur Web Full Stack", |         "position": "Apprenti Développeur Web Full Stack", | ||||||
|         "summary": "Développement de WebSurg, une université virtuelle consacrée à la formation médico-chirurgicale, en React.js/Next.js et API Platform avec Symfony." |         "tasks": { | ||||||
|  |           "WebSurg": "Développement de WebSurg, une université virtuelle consacrée à la formation médico-chirurgicale, en React.js/Next.js et API Platform avec Symfony.", | ||||||
|  |           "Figma": "Intégration des maquettes Figma pour WebSurg, site web consacrée à la formation médico-chirurgicale.", | ||||||
|  |           "IRCAD-Core": "IRCAD Core, outil interne de gestion des formations médicales et leurs besoins (modèles anatomiques, médicaments, formations du personnel, etc.).", | ||||||
|  |           "feature-logs": "Historique et traçabilité des modifications des données (quoi? qui? quand?) dans IRCAD Core.", | ||||||
|  |           "feature-permissions": "Système de permissions avancé et authentification OAuth2, avec accès en lecture, écriture et suppression restreint pour des utilisateurs spécifiques de l'application IRCAD Core.", | ||||||
|  |           "feature-search": "Moteur de recherche avec filtres, tris et ordre d'affichage personnalisable pour IRCAD Core.", | ||||||
|  |           "feature-architecture": "Architecture du projet IRCAD Core en Monorepo TypeScript avec Turborepo, et déploiement automatique (CI/CD) avec Docker Compose, auto-hébergé en interne." | ||||||
|  |         } | ||||||
|       }, |       }, | ||||||
|       "numerize": { |       "numerize": { | ||||||
|         "duration": "3 mois", |         "duration": "3 mois", | ||||||
|   | |||||||
| @@ -41,9 +41,9 @@ export const CurriculumVitaeEducation: React.FC< | |||||||
|         t("curriculum-vitae.education.iut.years.2022-2023.courses.tests"), |         t("curriculum-vitae.education.iut.years.2022-2023.courses.tests"), | ||||||
|         t("curriculum-vitae.education.iut.years.2022-2023.courses.clean-code"), |         t("curriculum-vitae.education.iut.years.2022-2023.courses.clean-code"), | ||||||
|         t("curriculum-vitae.education.iut.years.2022-2023.courses.systems-c"), |         t("curriculum-vitae.education.iut.years.2022-2023.courses.systems-c"), | ||||||
|         t( |         // t( | ||||||
|           "curriculum-vitae.education.iut.years.2022-2023.courses.sql-security", |         //   "curriculum-vitae.education.iut.years.2022-2023.courses.sql-security", | ||||||
|         ), |         // ), | ||||||
|       ], |       ], | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
| @@ -54,19 +54,19 @@ export const CurriculumVitaeEducation: React.FC< | |||||||
|       courses: [ |       courses: [ | ||||||
|         t("curriculum-vitae.education.iut.years.2021-2022.courses.java"), |         t("curriculum-vitae.education.iut.years.2021-2022.courses.java"), | ||||||
|         t("curriculum-vitae.education.iut.years.2021-2022.courses.systems-c"), |         t("curriculum-vitae.education.iut.years.2021-2022.courses.systems-c"), | ||||||
|         t( |         // t( | ||||||
|           "curriculum-vitae.education.iut.years.2021-2022.courses.windows-forms", |         //   "curriculum-vitae.education.iut.years.2021-2022.courses.windows-forms", | ||||||
|         ), |         // ), | ||||||
|         t("curriculum-vitae.education.iut.years.2021-2022.courses.sql"), |         t("curriculum-vitae.education.iut.years.2021-2022.courses.sql"), | ||||||
|       ], |       ], | ||||||
|     }, |     }, | ||||||
|     { |     // { | ||||||
|       years: t("curriculum-vitae.education.lycee.years.2019-2021.title"), |     //   years: t("curriculum-vitae.education.lycee.years.2019-2021.title"), | ||||||
|       studyType: t("curriculum-vitae.education.lycee.study-type"), |     //   studyType: t("curriculum-vitae.education.lycee.study-type"), | ||||||
|       institution: t("curriculum-vitae.education.lycee.institution"), |     //   institution: t("curriculum-vitae.education.lycee.institution"), | ||||||
|       score: t("curriculum-vitae.education.lycee.score"), |     //   score: t("curriculum-vitae.education.lycee.score"), | ||||||
|       courses: [], |     //   courses: [], | ||||||
|     }, |     // }, | ||||||
|   ] |   ] | ||||||
|  |  | ||||||
|   return ( |   return ( | ||||||
| @@ -79,35 +79,33 @@ export const CurriculumVitaeEducation: React.FC< | |||||||
|         {educations.map((education) => { |         {educations.map((education) => { | ||||||
|           return ( |           return ( | ||||||
|             <li key={education.years} className="card card-nested"> |             <li key={education.years} className="card card-nested"> | ||||||
|               <div className="content"> |               <p className="relative m-0"> | ||||||
|                 <p className="relative m-0"> |                 <strong>{education.studyType}</strong> | ||||||
|                   <strong>{education.studyType}</strong> |               </p> | ||||||
|                 </p> |  | ||||||
|  |  | ||||||
|                 <p className="relative m-0"> |               <p className="relative m-0"> | ||||||
|                   <strong>{education.score}</strong> |                 <strong>{education.score}</strong> | ||||||
|                 </p> |               </p> | ||||||
|  |  | ||||||
|                 <p className="text-muted m-0">{education.institution}</p> |               <p className="text-muted m-0">{education.institution}</p> | ||||||
|  |  | ||||||
|                 <p className="text-muted m-0"> |               <p className="text-muted m-0"> | ||||||
|                   <small>{education.years}</small> |                 <small>{education.years}</small> | ||||||
|                 </p> |               </p> | ||||||
|  |  | ||||||
|                 {education.courses.length > 0 ? ( |               {education.courses.length > 0 ? ( | ||||||
|                   <ul |                 <ul | ||||||
|                     style={{ |                   style={{ | ||||||
|                       paddingInlineStart: 20, |                     paddingInlineStart: 20, | ||||||
|                     }} |                   }} | ||||||
|                   > |                 > | ||||||
|                     {education.courses.map((course) => { |                   {education.courses.map((course) => { | ||||||
|                       return <li key={course}>{course}</li> |                     return <li key={course}>{course}</li> | ||||||
|                     })} |                   })} | ||||||
|                   </ul> |                 </ul> | ||||||
|                 ) : ( |               ) : ( | ||||||
|                   <></> |                 <></> | ||||||
|                 )} |               )} | ||||||
|               </div> |  | ||||||
|             </li> |             </li> | ||||||
|           ) |           ) | ||||||
|         })} |         })} | ||||||
|   | |||||||
| @@ -10,31 +10,34 @@ export const CurriculumVitaeInterests: React.FC< | |||||||
|   const t = useTranslations() |   const t = useTranslations() | ||||||
|  |  | ||||||
|   const interests = [ |   const interests = [ | ||||||
|     t("curriculum-vitae.interests.open-source"), |     <strong key="open-source"> | ||||||
|  |       {t("curriculum-vitae.interests.open-source")} | ||||||
|  |     </strong>, | ||||||
|     t.rich("curriculum-vitae.interests.fusey", { |     t.rich("curriculum-vitae.interests.fusey", { | ||||||
|       link: (children) => { |       link: (children) => { | ||||||
|         return ( |         return ( | ||||||
|           <a href="https://fusey.gg" target="_blank"> |           <a href="https://fusey.gg" target="_blank" className="font-semibold"> | ||||||
|             {children} |             {children} | ||||||
|           </a> |           </a> | ||||||
|         ) |         ) | ||||||
|       }, |       }, | ||||||
|  |       strong: (children) => { | ||||||
|  |         return <strong>{children}</strong> | ||||||
|  |       }, | ||||||
|     }), |     }), | ||||||
|   ] |   ] | ||||||
|  |  | ||||||
|   return ( |   return ( | ||||||
|     <CurriculumVitaeSection |     <CurriculumVitaeSection | ||||||
|       id="interests" |       id="interests" | ||||||
|       title={t("home.interests.title")} |       title={t("curriculum-vitae.interests.title")} | ||||||
|       icon={<FaHeart size={24} />} |       icon={<FaHeart size={24} />} | ||||||
|     > |     > | ||||||
|       <ul className="list-unstyled m-0"> |       <ul className="list-unstyled m-0"> | ||||||
|         {interests.map((interest, index) => { |         {interests.map((interest, index) => { | ||||||
|           return ( |           return ( | ||||||
|             <li key={index} className="card card-nested"> |             <li key={index} className="card card-nested max-w-2xl"> | ||||||
|               <p> |               <p>{interest}</p> | ||||||
|                 <strong>{interest}</strong> |  | ||||||
|               </p> |  | ||||||
|             </li> |             </li> | ||||||
|           ) |           ) | ||||||
|         })} |         })} | ||||||
|   | |||||||
| @@ -9,13 +9,21 @@ export const CurriculumVitaeWork: React.FC<CurriculumVitaeWorkProps> = () => { | |||||||
|  |  | ||||||
|   const workExperiences = [ |   const workExperiences = [ | ||||||
|     { |     { | ||||||
|       summary: t("curriculum-vitae.work.ircad.summary"), |  | ||||||
|       website: "https://ircad.fr/", |       website: "https://ircad.fr/", | ||||||
|       name: "IRCAD", |       name: "IRCAD", | ||||||
|       location: "1 Place de l'Hôpital, FR-67000 Strasbourg", |       location: "1 Place de l'Hôpital, FR-67000 Strasbourg", | ||||||
|       position: t("curriculum-vitae.work.ircad.position"), |       position: t("curriculum-vitae.work.ircad.position"), | ||||||
|       dates: "28/08/2023 - 31/08/2027", |       dates: "28/08/2023 - 31/08/2027", | ||||||
|       duration: t("curriculum-vitae.work.ircad.duration"), |       duration: t("curriculum-vitae.work.ircad.duration"), | ||||||
|  |       tasks: [ | ||||||
|  |         // t("curriculum-vitae.work.ircad.tasks.WebSurg"), | ||||||
|  |         t("curriculum-vitae.work.ircad.tasks.Figma"), | ||||||
|  |         t("curriculum-vitae.work.ircad.tasks.IRCAD-Core"), | ||||||
|  |         t("curriculum-vitae.work.ircad.tasks.feature-logs"), | ||||||
|  |         t("curriculum-vitae.work.ircad.tasks.feature-permissions"), | ||||||
|  |         t("curriculum-vitae.work.ircad.tasks.feature-search"), | ||||||
|  |         t("curriculum-vitae.work.ircad.tasks.feature-architecture"), | ||||||
|  |       ], | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       summary: t("curriculum-vitae.work.numerize.summary"), |       summary: t("curriculum-vitae.work.numerize.summary"), | ||||||
| @@ -25,6 +33,7 @@ export const CurriculumVitaeWork: React.FC<CurriculumVitaeWorkProps> = () => { | |||||||
|       position: t("curriculum-vitae.work.numerize.position"), |       position: t("curriculum-vitae.work.numerize.position"), | ||||||
|       dates: "11/04/2023 - 26/07/2023", |       dates: "11/04/2023 - 26/07/2023", | ||||||
|       duration: t("curriculum-vitae.work.numerize.duration"), |       duration: t("curriculum-vitae.work.numerize.duration"), | ||||||
|  |       tasks: [], | ||||||
|     }, |     }, | ||||||
|   ] |   ] | ||||||
|  |  | ||||||
| @@ -50,16 +59,36 @@ export const CurriculumVitaeWork: React.FC<CurriculumVitaeWorkProps> = () => { | |||||||
|                 <strong>{workExperience.position}</strong> |                 <strong>{workExperience.position}</strong> | ||||||
|               </p> |               </p> | ||||||
|  |  | ||||||
|               <p className="text-muted"> |               <p className="text-muted m-0"> | ||||||
|                 <small> |                 <small> | ||||||
|                   <span className="space-right"> |                   <span className="space-right"> | ||||||
|                     {workExperience.dates} ({workExperience.duration}) |                     {workExperience.dates} ({workExperience.duration}) | ||||||
|                   </span> |                   </span> | ||||||
|                 </small> |                 </small> | ||||||
|               </p> |               </p> | ||||||
|               <div className="mt-2"> |  | ||||||
|                 <p>{workExperience.summary}</p> |               {workExperience.tasks.length > 0 ? ( | ||||||
|               </div> |                 <ul | ||||||
|  |                   style={{ | ||||||
|  |                     paddingInlineStart: 20, | ||||||
|  |                   }} | ||||||
|  |                   className="space-y-1" | ||||||
|  |                 > | ||||||
|  |                   {workExperience.tasks.map((task) => { | ||||||
|  |                     return <li key={task}>{task}</li> | ||||||
|  |                   })} | ||||||
|  |                 </ul> | ||||||
|  |               ) : ( | ||||||
|  |                 <></> | ||||||
|  |               )} | ||||||
|  |  | ||||||
|  |               {workExperience.summary != null ? ( | ||||||
|  |                 <div className="mt-2"> | ||||||
|  |                   <p>{workExperience.summary}</p> | ||||||
|  |                 </div> | ||||||
|  |               ) : ( | ||||||
|  |                 <></> | ||||||
|  |               )} | ||||||
|             </li> |             </li> | ||||||
|           ) |           ) | ||||||
|         })} |         })} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user