Skip to content

Commit 8a7ab77

Browse files
committed
feat: write the liflow case study with real architecture details (v0.7.5)
- add an optional caseStudy field to the Project type (context, objectives, role, solution, architecture, technical choices, difficulties, security, learnings — reuses the existing problem/result fields rather than duplicating them) and populate it for liflow, taking /projects/liflow from 3 generic sections to 11 - source the architecture section from the actual liflow repo (readme/ project docs, not the internal security audit) rather than the portfolio's own possibly-stale copy — confirms the multi-tenant/ per-organization model, and resolves a real discrepancy between the may-2026 blog post ("no stripe for now") and package.json (stripe is a dependency): stripe is wired in but not publicly enabled yet - render the extended 11-section flow only when caseStudy is present, keep the existing light 3-section fallback for infralens and the client site until their own case studies land - close out phase 5 of the portfolio redesign roadmap
1 parent 9bc75db commit 8a7ab77

6 files changed

Lines changed: 91 additions & 23 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## [0.7.5] — 2026-08-08
4+
5+
### Contenu
6+
7+
- **Étude de cas Liflow** (`src/lib/projects.ts`, `app/projects/[slug]/page.tsx`) — `/projects/liflow` passe de 3 sections génériques (Problème/Solution/Résultat) à 11 (contexte, problème, objectifs, rôle, solution, architecture, choix techniques, difficultés, sécurité et confidentialité, résultat, enseignements), via un nouveau champ optionnel `caseStudy` sur `Project`. Sourcé sur l'article de blog à jour (mai 2026, post-refonte) et sur le dépôt Liflow réel en local pour confirmer l'architecture — multi-tenant par organisation, Better Auth, Prisma/PostgreSQL, stockage S3 présigné, Mux, Inngest, Stripe présent dans le code mais non activé publiquement. Les projets sans `caseStudy` (InfraLens, site client) gardent l'affichage léger existant.
8+
39
## [0.7.4] — 2026-08-08
410

511
### Contenu

‎app/projects/[slug]/page.tsx‎

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,32 @@ export default async function ProjectPage({ params }: Props) {
7474

7575
{/* Contenu */}
7676
<div className="flex flex-col gap-6">
77-
{[
78-
{ label: "Problème", text: project.problem },
79-
{ label: "Solution", text: project.solution },
80-
{ label: "Résultat", text: project.result },
81-
].map(({ label, text }) => (
77+
{(project.caseStudy
78+
? [
79+
{ label: "Contexte", text: project.caseStudy.context },
80+
{ label: "Problème", text: project.problem },
81+
{ label: "Objectifs", text: project.caseStudy.objectives },
82+
{ label: "Rôle", text: project.caseStudy.role },
83+
{ label: "Solution", text: project.caseStudy.solution },
84+
{ label: "Architecture", text: project.caseStudy.architecture },
85+
{
86+
label: "Choix techniques",
87+
text: project.caseStudy.technicalChoices,
88+
},
89+
{ label: "Difficultés", text: project.caseStudy.difficulties },
90+
{
91+
label: "Sécurité et confidentialité",
92+
text: project.caseStudy.security,
93+
},
94+
{ label: "Résultat", text: project.result },
95+
{ label: "Enseignements", text: project.caseStudy.learnings },
96+
]
97+
: [
98+
{ label: "Problème", text: project.problem },
99+
{ label: "Solution", text: project.solution },
100+
{ label: "Résultat", text: project.result },
101+
]
102+
).map(({ label, text }) => (
82103
<section
83104
key={label}
84105
className="rounded-xl border p-6"

0 commit comments

Comments
 (0)