writed project pages content

This commit is contained in:
2026-04-16 14:39:14 +02:00
parent 3a79088cce
commit fc2b481bd4
18 changed files with 104 additions and 83 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ type props = {
export default async function Home({ params }: props) { export default async function Home({ params }: props) {
const { locale } = await params; const { locale } = await params;
const projects = getAllProjects(); const projects = getAllProjects().filter((item) => item.ready);
return ( return (
<main className=" bg-brand-beige text-brand-black flex flex-col items-center justify-center"> <main className=" bg-brand-beige text-brand-black flex flex-col items-center justify-center">
+3 -2
View File
@@ -30,12 +30,13 @@ export default async function ProjectPage({ params }: props) {
} }
const otherProjects = getAllProjects() const otherProjects = getAllProjects()
.filter((item: any) => item.slug !== slug) .filter((item: any) => item.slug !== slug && item.ready)
.slice(0, 2) .slice(0, 2)
.map((item: any) => ({ .map((item: any) => ({
slug: item.slug, slug: item.slug,
title: item.title, title: item.title,
subtitle: item.subtitle, description: item.description,
cover: item.cover
})); }));
return ( return (
+6 -9
View File
@@ -5,7 +5,8 @@ type props = {
projects: { projects: {
slug: string; slug: string;
title: string; title: string;
subtitle: string; description: string;
cover: string;
}[]; }[];
}; };
@@ -14,7 +15,7 @@ export function OtherProjects({ locale, projects }: props) {
return ( return (
<section className="pb-20 pt-8"> <section className="pb-20 pt-8">
<h2 className="mb-10 text-center text-5xl font-semibold"> <h2 className="mb-10 text-center text-[clamp(80px,10vw,128px)] font-serif text-brand-brown">
Autres projets Autres projets
</h2> </h2>
@@ -25,13 +26,9 @@ export function OtherProjects({ locale, projects }: props) {
href={`/${locale}/works/${project.slug}`} href={`/${locale}/works/${project.slug}`}
className="group block" className="group block"
> >
<div className="mb-3 text-2xl font-medium">{project.title}</div> <div className="mb-3 text-3xl font-sans">{project.title}</div>
<p className="mb-3 text-sm text-neutral-500">{project.description}</p>
<div className="flex min-h-[220px] items-center justify-center rounded-[22px] bg-white text-4xl shadow-sm transition group-hover:-translate-y-1"> <img className="flex min-h-[220px] items-center justify-center rounded-[22px] bg-white text-4xl shadow-sm transition group-hover:-translate-y-1" src={project.cover} alt="cover image" />
{project.title}
</div>
<p className="mt-3 text-sm text-neutral-500">{project.subtitle}</p>
</Link> </Link>
))} ))}
</div> </div>
+7 -6
View File
@@ -1,6 +1,8 @@
--- ---
ready: true
title: "EverEast Solutions" title: "EverEast Solutions"
priority: 1 priority: 1
description: "Plateforme de mise en relations clients - agences web et gestion de projet agile"
dateLabel: "2026 - auj." dateLabel: "2026 - auj."
category: "Application web" category: "Application web"
client: "EverEast Solutions" client: "EverEast Solutions"
@@ -15,10 +17,9 @@ technologies:
- "Cloudron" - "Cloudron"
- "Mollie" - "Mollie"
- "Ackee" - "Ackee"
cover: "/images/projects/evereast/cover.jpg" cover: "/images/projects/evereast/cover.png"
preview1: "/images/projects/evereast/preview-1.jpg" preview1: "/images/projects/evereast/preview-1.png"
preview2: "/images/projects/evereast/preview-2.jpg" preview2: "/images/projects/evereast/preview-2.png"
description: "Plateforme de mise en relations clients - agences web et gestion de projet agile"
website: "https://evereast-solutions.com" website: "https://evereast-solutions.com"
featured: true featured: true
--- ---
@@ -47,8 +48,8 @@ featured: true
<ProjectPreviewGrid <ProjectPreviewGrid
items={[ items={[
{ title: "Aperçu 1", image: "/images/projects/EverEastSultions/preview-1.jpg" }, { title: "Aperçu 1", image: "/images/projects/evereast/preview-1.png" },
{ title: "Aperçu 2", image: "" } { title: "Aperçu 2", image: "/images/projects/evereast/preview-2.png" }
]} ]}
/> />
+17 -27
View File
@@ -1,25 +1,22 @@
--- ---
title: "EverEast Solutions" ready: true
priority: 1 title: "Global Git Contribution Graph (GGCG)"
priority: 4
description: "Une vue unifiée et élégante de toute votre activité de développement, centralisant les contributions de toutes vos forges Git dans une seule heatmap interactive."
dateLabel: "2026 - auj." dateLabel: "2026 - auj."
category: "Application web" category: "Application web"
client: "EverEast Solutions" client: "Open Source"
roles: roles:
- "Co-fondateur"
- "Développeur Full-Stack" - "Développeur Full-Stack"
technologies: technologies:
- "React" - "Next JS"
- "FastAPI" - "Rust"
- "MariaDB" - "MariaDB"
- "Reids"
- "Docker" - "Docker"
- "Cloudron" cover: "/images/projects/ggcg/cover.png"
- "Mollie" preview1: "/images/projects/ggcg/preview-1.png"
- "Ackee" preview2: "/images/projects/ggcg/preview-2.png"
cover: "/images/projects/evereast/cover.jpg"
preview1: "/images/projects/evereast/preview-1.jpg"
preview2: "/images/projects/evereast/preview-2.jpg"
description: "Plateforme de mise en relations clients - agences web et gestion de projet agile"
website: "https://evereast-solutions.com"
featured: true featured: true
--- ---
@@ -28,27 +25,20 @@ featured: true
<ProjectsColumns> <ProjectsColumns>
<div> <div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed En tant que développeurs, notre activité est souvent dispersée sur plusieurs plateformes. GitHub est le standard, mais de nombreuses entreprises utilisent GitLab, et les communautés open source se tournent de plus en plus vers des alternatives comme CodeBerg ou encore Forgejo.
pulvinar eget in. Mi varius senectus adipiscing augue in metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed GGCG est une application front-end qui agrège les données de contribution git de multiples sources. Le projet à vocation à être auto-hébergé par les développeurs qui le souhaite. Un application mobile existe aussi.
pulvinar eget in. Mi varius senectus adipiscing augue in metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed
pulvinar eget in. Mi varius senectus adipiscing augue in metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed
pulvinar eget in. Mi varius senectus adipiscing augue in metus.
</div> </div>
<div> <div>
Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien Ce projet à posé plusieurs défis. Entre autre la conception de l'architecture de l'application pour mixer performances des agrégations de données couteuse et répétitives, disponibilité du service autohébergé par l'utilisateur ou publiquement accessible via l'application mobile, persistances des configurations utilisateur et respet des quota api des différentes forges.
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien Le tout en maitrisant la confifentialité des données et leur niveau de sensibilité.
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu.
</div> </div>
</ProjectsColumns> </ProjectsColumns>
</div> </div>
<ProjectPreviewGrid <ProjectPreviewGrid
items={[ items={[
{ title: "Aperçu 1", image: "/images/projects/EverEastSultions/preview-1.jpg" }, { title: "Aperçu 1", image: "/images/projects/ggcg/preview-1.png" },
{ title: "Aperçu 2", image: "" } { title: "Aperçu 2", image: "/images/projects/ggcg/preview-2.png" }
]} ]}
/> />
+11 -14
View File
@@ -1,25 +1,22 @@
--- ---
title: "EverEast Solutions" ready: true
priority: 1 title: "MG Dev"
priority: 3
description: ""
dateLabel: "2026 - auj." dateLabel: "2026 - auj."
category: "Application web" category: "Application web"
client: "EverEast Solutions" client: "EverEast Solutions"
roles: roles:
- "Co-fondateur"
- "Développeur Full-Stack" - "Développeur Full-Stack"
technologies: technologies:
- "React" - "React"
- "FastAPI" - "Vercel"
- "MariaDB" - "Resend"
- "Docker" - "Docker"
- "Cloudron"
- "Mollie"
- "Ackee" - "Ackee"
cover: "/images/projects/evereast/cover.jpg" cover: "/images/projects/mgdev/cover.png"
preview1: "/images/projects/evereast/preview-1.jpg" preview1: "/images/projects/mgdev/preview-1.png"
preview2: "/images/projects/evereast/preview-2.jpg" preview2: "/images/projects/mgdev/preview-2.png"
description: "Plateforme de mise en relations clients - agences web et gestion de projet agile"
website: "https://evereast-solutions.com"
featured: true featured: true
--- ---
@@ -47,8 +44,8 @@ featured: true
<ProjectPreviewGrid <ProjectPreviewGrid
items={[ items={[
{ title: "Aperçu 1", image: "/images/projects/EverEastSultions/preview-1.jpg" }, { title: "Aperçu 1", image: "/images/projects/mgdev/preview-1.png" },
{ title: "Aperçu 2", image: "" } { title: "Aperçu 2", image: "/images/projects/mgdev/preview-2.png" }
]} ]}
/> />
+17 -22
View File
@@ -1,23 +1,23 @@
--- ---
ready: true
title: "Threadbase" title: "Threadbase"
priority: 2 priority: 2
description: "L'application macOS qui sauvegarde les fenêtres, les notes mentales et le contexte de travaille de l'utilisateur."
dateLabel: "2026 - auj." dateLabel: "2026 - auj."
category: "Application macOS" category: "Application macOS"
client: "Mathéo Guilbert EI" client: "Mathéo Guilbert EI"
roles: roles:
- "Développeur Full-Stack" - "Développeur Full-Stack"
technologies: technologies:
- "React" - "Swift"
- "FastAPI" - "Next JS"
- "MariaDB" - "MariaDB"
- "Docker" - "Docker"
- "Cloudron" - "Komodo"
- "Mollie" - "PostHog"
- "Ackee" cover: "/images/projects/threadbase/cover.png"
cover: "/images/projects/threadbase/cover.jpg" preview1: "/images/projects/threadbase/preview-1.png"
preview1: "/images/projects/threadbase/preview-1.jpg" preview2: "/images/projects/threadbase/preview-2.png"
preview2: "/images/projects/threadbase/preview-2.jpg"
description: "Plateforme de mise en relations clients - agences web et gestion de projet agile"
website: "https://evereast-solutions.com" website: "https://evereast-solutions.com"
featured: true featured: true
--- ---
@@ -27,27 +27,22 @@ featured: true
<ProjectsColumns> <ProjectsColumns>
<div> <div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed Threadbase est une application macOS que je développe en tant qu'indépendant. Le but est de faciliter la reprise d'un projet par un développeur après une pause plus ou moins longue.
pulvinar eget in. Mi varius senectus adipiscing augue in metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed
pulvinar eget in. Mi varius senectus adipiscing augue in metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed Ce projet m'a permi de me former au développement d'application dans l'écosystème Apple et à la manipulation de l'OS (bureaux virtuels, applications).
pulvinar eget in. Mi varius senectus adipiscing augue in metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed
pulvinar eget in. Mi varius senectus adipiscing augue in metus.
</div> </div>
<div> <div>
Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien Il m'a également apporté la notion de vente d'un produit numérique, qui compte autant que le produit lui même.
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien J'ai tout développé moi même, l'application en tant que telle, la landing page, gestion des licences logiciels, mise en place de l'architecture serveur qui accueil tout cela.
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu. Eget sagittis dui dictum porttitor. Urna ornare mattis pharetra sapien
elit netus eleifend ante et. Viverra nunc duis id pellentesque aliquam arcu.
</div> </div>
</ProjectsColumns> </ProjectsColumns>
</div> </div>
<ProjectPreviewGrid <ProjectPreviewGrid
items={[ items={[
{ title: "Aperçu 1", image: "/images/projects/EverEastSultions/preview-1.jpg" }, { title: "Aperçu 1", image: "/images/projects/threadbase/preview-1.png" },
{ title: "Aperçu 2", image: "" } { title: "Aperçu 2", image: "/images/projects/threadbase/preview-2.png" }
]} ]}
/> />
+39
View File
@@ -0,0 +1,39 @@
---
ready: false
title: ""
priority: 1
description: ""
dateLabel: ""
category: ""
client: ""
roles:
- ""
technologies:
- ""
cover: "/images/projects/template/cover.png"
preview1: "/images/projects/template/preview-1.png"
preview2: "/images/projects/template/preview-2.png"
featured: true
---
<div>
<h2>La mission</h2>
<ProjectsColumns>
<div>
</div>
<div>
</div>
</ProjectsColumns>
</div>
<ProjectPreviewGrid
items={[
{ title: "", image: "/images/projects/template/preview-1.png" },
{ title: "", image: "/images/projects/template/preview-2.png" }
]}
/>
<ProjectVisitButton href="" />
+1 -1
View File
@@ -38,5 +38,5 @@ export function getAllProjects(): Project[] {
return getProjectSlugs() return getProjectSlugs()
.map((slug) => getProjectBySlug(slug)) .map((slug) => getProjectBySlug(slug))
.filter((project): project is Project => project !== null) .filter((project): project is Project => project !== null)
.sort((a, b) => b.priority - a.priority); .sort((a, b) => a.priority - b.priority);
} }
+2 -1
View File
@@ -1,4 +1,5 @@
export type ProjectFrontmatter = { export type ProjectFrontmatter = {
ready: boolean;
title: string; title: string;
priority: number; priority: number;
category: string; category: string;
@@ -7,7 +8,7 @@ export type ProjectFrontmatter = {
technologies: string[]; technologies: string[];
preview1?: string; preview1?: string;
preview2?: string; preview2?: string;
website: string; website?: string;
featured: boolean; featured: boolean;
description: string; description: string;
dateLabel: string; dateLabel: string;

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB