mirror of
https://github.com/theoludwig/theoludwig.git
synced 2025-09-11 23:09:22 +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