diff --git a/src/assets/images/recommendations/anne-marchadier.jpg b/src/assets/images/recommendations/anne-marchadier.jpg
new file mode 100644
index 0000000..4175643
Binary files /dev/null and b/src/assets/images/recommendations/anne-marchadier.jpg differ
diff --git a/src/assets/images/recommendations/benoit-sarda.jpg b/src/assets/images/recommendations/benoit-sarda.jpg
new file mode 100644
index 0000000..4010451
Binary files /dev/null and b/src/assets/images/recommendations/benoit-sarda.jpg differ
diff --git a/src/assets/images/recommendations/benoit-talbot.jpg b/src/assets/images/recommendations/benoit-talbot.jpg
new file mode 100644
index 0000000..26979cd
Binary files /dev/null and b/src/assets/images/recommendations/benoit-talbot.jpg differ
diff --git a/src/assets/images/recommendations/laurent-perez.jpg b/src/assets/images/recommendations/laurent-perez.jpg
new file mode 100644
index 0000000..26ceaf3
Binary files /dev/null and b/src/assets/images/recommendations/laurent-perez.jpg differ
diff --git a/src/assets/images/recommendations/matthieu-diouron.jpg b/src/assets/images/recommendations/matthieu-diouron.jpg
new file mode 100644
index 0000000..f55fcef
Binary files /dev/null and b/src/assets/images/recommendations/matthieu-diouron.jpg differ
diff --git a/src/assets/images/recommendations/maxime-boudier.jpg b/src/assets/images/recommendations/maxime-boudier.jpg
new file mode 100644
index 0000000..37ec42a
Binary files /dev/null and b/src/assets/images/recommendations/maxime-boudier.jpg differ
diff --git a/src/assets/images/recommendations/pascal-gentil.jpg b/src/assets/images/recommendations/pascal-gentil.jpg
new file mode 100644
index 0000000..f5093c9
Binary files /dev/null and b/src/assets/images/recommendations/pascal-gentil.jpg differ
diff --git a/src/components/code/FeaturedRecommendation.astro b/src/components/code/FeaturedRecommendation.astro
index e173260..7390697 100644
--- a/src/components/code/FeaturedRecommendation.astro
+++ b/src/components/code/FeaturedRecommendation.astro
@@ -2,15 +2,25 @@
import { Image } from "astro:assets";
import type { ImageMetadata } from "astro";
+const avatarImages = import.meta.glob<{ default: ImageMetadata }>(
+ '/src/assets/images/recommendations/*.{jpg,jpeg,png,webp}',
+ { eager: true }
+);
+
interface Props {
author: string;
authorRole: string;
company: string;
text: string;
- avatar?: ImageMetadata;
+ avatar?: string;
+ url?: string;
}
-const { author, authorRole, company, text, avatar } = Astro.props;
+const { author, authorRole, company, text, avatar, url } = Astro.props;
+
+const avatarImage = avatar
+ ? avatarImages[`/src/assets/images/recommendations/${avatar}`]?.default
+ : undefined;
const truncated = text.length > 200 ? text.slice(0, 200).replace(/\s+\S*$/, '') + '...' : text;
@@ -27,9 +37,9 @@ const initials = author
"{truncated}"
- {avatar ? (
+ {avatarImage ? (
)}
- {author}
+ {url ? (
+
+ {author}
+
+
+ ) : (
+ {author}
+ )}
· {authorRole}, {company}
diff --git a/src/components/code/RecommendationCard.astro b/src/components/code/RecommendationCard.astro
index efa2388..b7b9647 100644
--- a/src/components/code/RecommendationCard.astro
+++ b/src/components/code/RecommendationCard.astro
@@ -2,17 +2,27 @@
import { Image } from "astro:assets";
import type { ImageMetadata } from "astro";
+const avatarImages = import.meta.glob<{ default: ImageMetadata }>(
+ '/src/assets/images/recommendations/*.{jpg,jpeg,png,webp}',
+ { eager: true }
+);
+
interface Props {
author: string;
authorRole: string;
company: string;
text: string;
date: Date;
- avatar?: ImageMetadata;
+ avatar?: string;
+ url?: string;
lang?: string;
}
-const { author, authorRole, company, text, date, avatar, lang = 'fr' } = Astro.props;
+const { author, authorRole, company, text, date, avatar, url, lang = 'fr' } = Astro.props;
+
+const avatarImage = avatar
+ ? avatarImages[`/src/assets/images/recommendations/${avatar}`]?.default
+ : undefined;
const dateLocales: Record = { fr: 'fr-FR', en: 'en-US', ar: 'ar-SA' };
const formattedDate = date.toLocaleDateString(dateLocales[lang] || 'fr-FR', {
@@ -44,9 +54,9 @@ const avatarGradient = colors[colorIndex];
- {avatar ? (
+ {avatarImage ? (
)}
- {author}
+ {url ? (
+
+ {author}
+
+
+ ) : (
+ {author}
+ )}
{authorRole} · {company}
{formattedDate}
diff --git a/src/content.config.ts b/src/content.config.ts
index 2fd9e39..61793c6 100644
--- a/src/content.config.ts
+++ b/src/content.config.ts
@@ -72,11 +72,12 @@ const experiencesCollection = defineCollection({
const recommendationsCollection = defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/content/recommendations" }),
- schema: ({ image }) => z.object({
+ schema: z.object({
author: z.string(),
authorRole: z.string(),
company: z.string(),
- avatar: image().optional(),
+ avatar: z.string().optional(),
+ url: z.string().url().optional(),
date: z.date(),
relationship: z.string().optional(),
lang: z.enum(['fr', 'en']).default('fr'),
diff --git a/src/content/recommendations/anne-marchadier.md b/src/content/recommendations/anne-marchadier.md
index 83d2df1..93dfd6e 100644
--- a/src/content/recommendations/anne-marchadier.md
+++ b/src/content/recommendations/anne-marchadier.md
@@ -2,6 +2,8 @@
author: "Anne Marchadier Valmont"
authorRole: "Responsable administratif"
company: "4CAD Group"
+avatar: anne-marchadier.jpg
+url: https://www.linkedin.com/in/anne-marchadier-valmont-50421a12
date: 2009-08-19
lang: "fr"
---
diff --git a/src/content/recommendations/antoine-wolff.md b/src/content/recommendations/antoine-wolff.md
index 95b359e..dbd2487 100644
--- a/src/content/recommendations/antoine-wolff.md
+++ b/src/content/recommendations/antoine-wolff.md
@@ -2,6 +2,7 @@
author: "Antoine Wolff"
authorRole: "Développeur, graphiste et chef de projet"
company: "LeCollectif"
+url: https://www.linkedin.com/in/wolffantoine
date: 2020-12-07
lang: "fr"
---
diff --git a/src/content/recommendations/benoit-sarda.md b/src/content/recommendations/benoit-sarda.md
index 4ff888d..73d9f00 100644
--- a/src/content/recommendations/benoit-sarda.md
+++ b/src/content/recommendations/benoit-sarda.md
@@ -2,6 +2,8 @@
author: "Benoit Sarda"
authorRole: "Sr Solution Architect, Manuf"
company: "Amazon Web Services (AWS)"
+avatar: benoit-sarda.jpg
+url: https://www.linkedin.com/in/benoitsarda
date: 2011-12-07
lang: "fr"
---
diff --git a/src/content/recommendations/benoit-talbot.md b/src/content/recommendations/benoit-talbot.md
index 05f2b01..2e68769 100644
--- a/src/content/recommendations/benoit-talbot.md
+++ b/src/content/recommendations/benoit-talbot.md
@@ -2,6 +2,8 @@
author: "Benoit Talbot"
authorRole: "Consultant technico-fonctionel Sage ERP X3"
company: "Concept ERP"
+avatar: benoit-talbot.jpg
+url: https://www.linkedin.com/in/benoit-talbot-65610a81
date: 2015-01-29
lang: "fr"
---
diff --git a/src/content/recommendations/bouchra-ghaoui.md b/src/content/recommendations/bouchra-ghaoui.md
index ecc09f0..1d1b782 100644
--- a/src/content/recommendations/bouchra-ghaoui.md
+++ b/src/content/recommendations/bouchra-ghaoui.md
@@ -2,6 +2,7 @@
author: "Bouchra Ghaoui"
authorRole: "Senior Engagement Manager"
company: "Capgemini"
+url: https://www.linkedin.com/in/bouchra-ghaoui-46509a10
date: 2011-12-09
lang: "fr"
---
diff --git a/src/content/recommendations/daniel-gall.md b/src/content/recommendations/daniel-gall.md
index 04ce22d..e96fcc7 100644
--- a/src/content/recommendations/daniel-gall.md
+++ b/src/content/recommendations/daniel-gall.md
@@ -2,6 +2,7 @@
author: "Daniel Gall"
authorRole: "Consultant"
company: "Taos Conseil"
+url: https://www.linkedin.com/in/daniel-g-385524
date: 2011-12-07
lang: "fr"
---
diff --git a/src/content/recommendations/gregoire-lacoste.md b/src/content/recommendations/gregoire-lacoste.md
index 69a6f81..044529e 100644
--- a/src/content/recommendations/gregoire-lacoste.md
+++ b/src/content/recommendations/gregoire-lacoste.md
@@ -2,6 +2,7 @@
author: "Grégoire Lacoste"
authorRole: "Chief Product Officer"
company: "CertifiCall"
+url: https://www.linkedin.com/in/gregoirelacoste
date: 2020-12-08
lang: "fr"
---
diff --git a/src/content/recommendations/guillaume-gendrillon.md b/src/content/recommendations/guillaume-gendrillon.md
index 39839c2..b4a3e90 100644
--- a/src/content/recommendations/guillaume-gendrillon.md
+++ b/src/content/recommendations/guillaume-gendrillon.md
@@ -2,6 +2,7 @@
author: "Guillaume Gendrillon"
authorRole: "Lead designer Information Voyageur et signalétique"
company: "RATPgroup"
+url: https://www.linkedin.com/in/guillaumegendrillon
date: 2011-12-05
lang: "fr"
---
diff --git a/src/content/recommendations/laurent-perez.md b/src/content/recommendations/laurent-perez.md
index 0f4a4d2..64d97e0 100644
--- a/src/content/recommendations/laurent-perez.md
+++ b/src/content/recommendations/laurent-perez.md
@@ -2,6 +2,8 @@
author: "Laurent Perez"
authorRole: "Senior Developer"
company: "itk"
+avatar: laurent-perez.jpg
+url: https://www.linkedin.com/in/laurentperez
date: 2009-09-07
lang: "en"
---
diff --git a/src/content/recommendations/matthieu-diouron.md b/src/content/recommendations/matthieu-diouron.md
index 75227be..6a59aa1 100644
--- a/src/content/recommendations/matthieu-diouron.md
+++ b/src/content/recommendations/matthieu-diouron.md
@@ -2,6 +2,8 @@
author: "Matthieu Diouron"
authorRole: "Director of Business Development"
company: "T-Systems France"
+avatar: matthieu-diouron.jpg
+url: https://www.linkedin.com/in/mdiouron
date: 2009-09-09
lang: "fr"
---
diff --git a/src/content/recommendations/maxime-boudier.md b/src/content/recommendations/maxime-boudier.md
index 0177628..8995e32 100644
--- a/src/content/recommendations/maxime-boudier.md
+++ b/src/content/recommendations/maxime-boudier.md
@@ -2,6 +2,8 @@
author: "Maxime Boudier"
authorRole: "Staff Web Engineer"
company: "SNCF Connect & Tech"
+avatar: maxime-boudier.jpg
+url: https://www.linkedin.com/in/maximeboudier
date: 2020-12-12
lang: "fr"
---
diff --git a/src/content/recommendations/olivier-cornudet.md b/src/content/recommendations/olivier-cornudet.md
index 79e5087..4a30311 100644
--- a/src/content/recommendations/olivier-cornudet.md
+++ b/src/content/recommendations/olivier-cornudet.md
@@ -2,6 +2,7 @@
author: "Olivier Cornudet"
authorRole: "Consultant manager"
company: "e-THEMIS"
+url: https://www.linkedin.com/in/olivier-cornudet-9a398738
date: 2015-02-11
lang: "fr"
---
diff --git a/src/content/recommendations/pascal-gentil.md b/src/content/recommendations/pascal-gentil.md
index 20d2db1..0a01edf 100644
--- a/src/content/recommendations/pascal-gentil.md
+++ b/src/content/recommendations/pascal-gentil.md
@@ -2,6 +2,8 @@
author: "Pascal Gentil"
authorRole: "Chef de projet Sage X3"
company: "YOUR PARTNER"
+avatar: pascal-gentil.jpg
+url: https://www.linkedin.com/in/pascalgentil
date: 2015-02-08
lang: "fr"
---
diff --git a/src/content/recommendations/vanessa-boissard.md b/src/content/recommendations/vanessa-boissard.md
index d482c65..3983b82 100644
--- a/src/content/recommendations/vanessa-boissard.md
+++ b/src/content/recommendations/vanessa-boissard.md
@@ -2,6 +2,7 @@
author: "Vanessa Boissard"
authorRole: "Psychologue sociale"
company: "AlterAlliance"
+url: https://www.linkedin.com/in/vanessaboissard
date: 2011-12-05
lang: "fr"
---
diff --git a/src/pages/ar/برمجة/index.astro b/src/pages/ar/برمجة/index.astro
index 7440eec..0966fde 100644
--- a/src/pages/ar/برمجة/index.astro
+++ b/src/pages/ar/برمجة/index.astro
@@ -100,6 +100,7 @@ const recommendationTexts = recommendations.map((rec) => ({
company={rec.data.company}
text={rec.text}
avatar={rec.data.avatar}
+ url={rec.data.url}
/>
))}
diff --git a/src/pages/ar/برمجة/توصيات.astro b/src/pages/ar/برمجة/توصيات.astro
index bc21436..8709147 100644
--- a/src/pages/ar/برمجة/توصيات.astro
+++ b/src/pages/ar/برمجة/توصيات.astro
@@ -34,6 +34,7 @@ const recommendations = (await getCollection("recommendations"))
text={rec.body || ''}
date={rec.data.date}
avatar={rec.data.avatar}
+ url={rec.data.url}
lang={rec.data.lang}
/>
diff --git a/src/pages/code/index.astro b/src/pages/code/index.astro
index 971bcff..389eebb 100644
--- a/src/pages/code/index.astro
+++ b/src/pages/code/index.astro
@@ -100,6 +100,7 @@ const recommendationTexts = recommendations.map((rec) => ({
company={rec.data.company}
text={rec.text}
avatar={rec.data.avatar}
+ url={rec.data.url}
/>
))}
diff --git a/src/pages/code/recommandations.astro b/src/pages/code/recommandations.astro
index 19386c5..a30074a 100644
--- a/src/pages/code/recommandations.astro
+++ b/src/pages/code/recommandations.astro
@@ -34,6 +34,7 @@ const recommendations = (await getCollection("recommendations"))
text={rec.body || ''}
date={rec.data.date}
avatar={rec.data.avatar}
+ url={rec.data.url}
lang={rec.data.lang}
/>
diff --git a/src/pages/en/code/index.astro b/src/pages/en/code/index.astro
index 66b84b5..a361626 100644
--- a/src/pages/en/code/index.astro
+++ b/src/pages/en/code/index.astro
@@ -100,6 +100,7 @@ const recommendationTexts = recommendations.map((rec) => ({
company={rec.data.company}
text={rec.text}
avatar={rec.data.avatar}
+ url={rec.data.url}
/>
))}
diff --git a/src/pages/en/code/recommendations.astro b/src/pages/en/code/recommendations.astro
index 09fd84b..78a35f5 100644
--- a/src/pages/en/code/recommendations.astro
+++ b/src/pages/en/code/recommendations.astro
@@ -34,6 +34,7 @@ const recommendations = (await getCollection("recommendations"))
text={rec.body || ''}
date={rec.data.date}
avatar={rec.data.avatar}
+ url={rec.data.url}
lang={rec.data.lang}
/>