Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .astro/content.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,5 +160,5 @@ declare module 'astro:content' {

type AnyEntryMap = ContentEntryMap & DataEntryMap;

export type ContentConfig = typeof import("./../src/content/config.js");
export type ContentConfig = typeof import("../src/content/config.js");
}
2 changes: 1 addition & 1 deletion .astro/data-store.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.8.1","content-config-digest","5e54967a61329eee","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://proxyfil.fr\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"experimentalDefaultStyles\":true},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false},\"legacy\":{\"collections\":false}}","staticData",["Map",11,12],"allStaticData",{"id":11,"data":13,"filePath":37,"digest":38},{"profileImage":14,"profileAlt":15,"profileLink":16,"profileTitle":17,"profileName":18,"github":19,"githubText":20,"portfolioImage":21,"email":22,"linkedin":23,"instagram":24,"youtube":25,"alias":26,"contactSectionTitle":27,"contactSectionSubtitle":28,"contactSectionButtonText":29,"contactSectionButtonIcon":30,"techsTitle":31,"instagramIconName":32,"youtubeIconName":33,"githubIconName":34,"linkedinIconName":35,"emailIconName":36},"/images/proxyfil.webp","Photo of Pierre-Louis Leclerc (Proxyfil) for the blog","/about-me","DevOps Engineer Student","Pierre-Louis Leclerc","https://github.com/proxyfil","Want to see my code?","/images/portfolio.webp","[email protected]","https://www.linkedin.com/in/pierre-louis-leclerc/","https://www.instagram.com/pierrelouisirl/","https://www.youtube.com/@proxyfil4036","Proxyfil","Ready to take your idea to the next level?","Let's work together.","Contact Me","paperplane","TECHS","instagram","youtube","github","linkedin","envelope","src/content/staticData/allStaticData.json","606acb4ab07cd770"]
[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.8.1","content-config-digest","3120b7a6e0893304","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://proxyfil.fr\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"experimentalDefaultStyles\":true},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false},\"legacy\":{\"collections\":false}}","staticData",["Map",11,12],"allStaticData",{"id":11,"data":13,"filePath":37,"digest":38},{"profileImage":14,"profileAlt":15,"profileLink":16,"profileTitle":17,"profileName":18,"github":19,"githubText":20,"portfolioImage":21,"email":22,"linkedin":23,"instagram":24,"youtube":25,"alias":26,"contactSectionTitle":27,"contactSectionSubtitle":28,"contactSectionButtonText":29,"contactSectionButtonIcon":30,"techsTitle":31,"instagramIconName":32,"youtubeIconName":33,"githubIconName":34,"linkedinIconName":35,"emailIconName":36},"/images/proxyfil.webp","Photo of Pierre-Louis Leclerc (Proxyfil) for the blog","/about-me","DevOps Engineer Student","Pierre-Louis Leclerc","https://github.com/proxyfil","Want to see my code?","/images/portfolio.webp","[email protected]","https://www.linkedin.com/in/pierre-louis-leclerc/","https://www.instagram.com/pierrelouisirl/","https://www.youtube.com/@proxyfil4036","Proxyfil","Ready to take your idea to the next level?","Let's work together.","Contact Me","paperplane","TECHS","instagram","youtube","github","linkedin","envelope","src/content/staticData/allStaticData.json","67d2708f51b24e1c"]
2 changes: 1 addition & 1 deletion .astro/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1748972451562
"lastUpdateCheck": 1761163064283
}
}
116 changes: 113 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"alpinejs": "^3.14.9",
"astro": "^5.6.1",
"astro-icon": "^1.1.5",
"i18n": "^0.15.2",
"preact": "^10.26.2",
"prismjs": "^1.30.0",
"tailwindcss": "^4.0.8"
Expand Down
Binary file added public/images/posts/minecraft-kubernetes.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 6 additions & 1 deletion src/components/blog/DatePub.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
---
import { getLangFromUrl, useTranslations } from "../../i18n/utils";
const lang = getLangFromUrl(Astro.url);

const {date, class: className} = Astro.props;

let localeDate = lang === 'fr' ? 'fr-FR' : 'en-US';
---

<span
Expand All @@ -18,7 +23,7 @@ const {date, class: className} = Astro.props;
clip-rule="evenodd"></path></svg
>
{
new Date(date).toLocaleDateString("en-US", {
new Date(date).toLocaleDateString(localeDate, {
timeZone: "UTC", // Avoid timezone adjustments
day: "numeric",
month: "long",
Expand Down
16 changes: 10 additions & 6 deletions src/components/blog/Hero.astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ import { Icon } from "astro-icon/components";
import Heading from "../ui/Heading.astro";
import { AstroError } from "astro/errors";
import { getCollection} from "astro:content";
import { getLangFromUrl, useTranslations } from "../../i18n/utils";

const lang = getLangFromUrl(Astro.url);
const t = useTranslations(lang);

const [staticData] = await getCollection('staticData');

Expand Down Expand Up @@ -42,7 +46,7 @@ if (!staticData) {
>
<div class="z-2">
<Heading
text={staticData.data.githubText}
text={t('staticData.data.githubText')}
textGradient=""
level={3}
/>
Expand All @@ -68,28 +72,28 @@ if (!staticData) {
class="group-hover:scale-103 ease-in-out duration-500 w-5/12 max-sm:w-auto flex justify-center items-center"
>
<div
aria-label={staticData.data.profileAlt}
aria-label={t('staticData.data.profileAlt')}
class="h-full w-full max-sm:rounded-full rounded-2xl max-sm:size-20 bg-center bg-cover"
style={`background-image: url(${staticData.data.profileImage})`}
>
<a href={staticData.data.profileLink} class="h-full w-full flex"></a>
<a href={`/${lang}/about-me`} class="h-full w-full flex"></a>
</div>
</div>
<div class="p-4 w-7/12 flex flex-col justify-center gap-4 max-sm:w-fit max-md:gap-2">
<span
class="font-extrabold text-lg max-xl:text-base max-lg:text-sm max-lg:flex max-lg:flex-col-reverse max-md:flex-row leading-normal max-sm:leading-none"
><b
class="bg-gradient-to-r from-riptide-400 to-mint-400 dark:from-riptide-200 dark:to-mint-400 text-transparent bg-clip-text"
>{staticData.data.profileTitle}</b
>{t('staticData.data.profileTitle')}</b
> 🚀</span
>
<Heading
text={staticData.data.profileName}
level={3}
/>
<Button
link={staticData.data.profileLink}
text="About Me"
link={`/${lang}/about-me`}
text={t('blog.hero.aboutMeButton')}
iconName="person"
class="drop-shadow-xl"
/>
Expand Down
11 changes: 10 additions & 1 deletion src/components/blog/Languages.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
---
const allPosts = await Astro.glob("../../pages/blog/posts/*.md");
import { getLangFromUrl, useTranslations } from "../../i18n/utils";

const lang = getLangFromUrl(Astro.url);
const t = useTranslations(lang);

let allPosts = await Astro.glob("../../pages/en/blog/posts/*.md");
if(lang == 'fr') {
allPosts = await Astro.glob("../../pages/fr/blog/posts/*.md");
}

const languages = [
...new Set(allPosts.map((post) => post.frontmatter.languages).flat()),
];
Expand Down
16 changes: 12 additions & 4 deletions src/components/blog/LastPost.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
---
const allPosts = await Astro.glob("../../pages/blog/posts/*.md");
import { getLangFromUrl, useTranslations } from "../../i18n/utils";

const lang = getLangFromUrl(Astro.url);
const t = useTranslations(lang);

let allPosts = await Astro.glob("../../pages/en/blog/posts/*.md");
if(lang == 'fr') {
allPosts = await Astro.glob("../../pages/fr/blog/posts/*.md");
}

import Tag from "../ui/Tag.astro";
import ReadMore from "../ui/ReadMore.astro";
Expand Down Expand Up @@ -44,7 +52,7 @@ const imageAlt =
<div
class="w-full flex pb-5 gap-2 flex-wrap justify-end z-10 max-sm:px-6 max-sm:pt-6"
role="list"
aria-label="Programming languages"
aria-label={t("blog.lastPost.languages")}
>
{languages.map((language: unknown) => (
<Capsule lang={language?.toString() || ""} />
Expand All @@ -54,7 +62,7 @@ const imageAlt =
<a
href={latestPost.url}
class="text-mint-50 gap-3 h-full flex items-end max-sm:px-6 rounded-lg transition-all"
aria-label={`Read article: ${latestPost.frontmatter.title}`}
aria-label={`${t("blog.lastPost.readArticle")}: ${latestPost.frontmatter.title}`}
>
<div class="gap-3 flex flex-col justify-end drop-shadow-[1px_6px_1px_rgba(0,_0,_0,_0.3)]">
<DatePub date={latestPost.frontmatter.pubDate} class="text-mint-50" />
Expand All @@ -71,7 +79,7 @@ const imageAlt =
<div
class="gap-2 mt-3 justify-start items-center flex flex-row flex-wrap max-sm:px-6 max-sm:pb-6"
role="list"
aria-label="Article tags"
aria-label={t("blog.lastPost.tags")}
>
{tags.map((tag) => (
<Tag tag={tag} forceDark="true">{tag}</Tag>
Expand Down
16 changes: 12 additions & 4 deletions src/components/blog/ListPosts.astro
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
---
import { getLangFromUrl, useTranslations } from "../../i18n/utils";

const lang = getLangFromUrl(Astro.url);
const t = useTranslations(lang);

import BlogPost from "./BlogPost.astro";
import Heading from "../ui/Heading.astro";

Expand All @@ -11,7 +16,10 @@ export interface Props {

const { excludeLatest = false, currentPostUrl = "", all = false } = Astro.props;

const allPosts = await Astro.glob("../../pages/blog/posts/*.md");
let allPosts = await Astro.glob("../../pages/en/blog/posts/*.md");
if(lang == 'fr') {
allPosts = await Astro.glob("../../pages/fr/blog/posts/*.md");
}
// Sort by date in descending order (newest first)
allPosts.sort((a, b) => {
const dateA = new Date(a.frontmatter.pubDate).getTime();
Expand Down Expand Up @@ -60,7 +68,7 @@ if (!all) {
{
all && (
<div class="flex gap-4 pb-6 items-center text-center justify-center">
<Heading text="All" textGradient="Posts" level={2} />
<Heading text={`${t('blog.listPosts.all')}`} textGradient={t('blog.listPosts.posts')} level={2} />
</div>
)
}
Expand All @@ -84,10 +92,10 @@ if (!all) {
!all && (
<div id="morePosts" class="w-full flex justify-center text-center my-12">
<a
href="/blog/posts/"
href={`/${lang}/blog/posts/`}
class="font-bold cursor-pointer text-mint-400 dark:text-mint-100 hover:text-mint-500 dark:hover:text-mint-300 transition-all"
>
View all posts...
{t("blog.listPosts.morePosts")}
</a>
</div>
)
Expand Down
Loading