Migration vers architecture Svelte + Kirby inspirée de design-to-pack

- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod

Architecture fonctionnelle de base établie, à améliorer et compléter.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
isUnknown 2026-02-06 16:30:15 +01:00
parent c4456d587c
commit cbe89acb21
53 changed files with 3348 additions and 772 deletions

View file

@ -1,109 +1,2 @@
<?php snippet('header') ?>
<main class="portfolio">
<!-- Intro Section -->
<section class="portfolio__intro">
<?php if ($page->intro_title()->isNotEmpty()): ?>
<h1 class="portfolio__title"><?= $page->intro_title() ?></h1>
<?php endif ?>
<?php if ($page->intro_text()->isNotEmpty()): ?>
<p class="portfolio__text"><?= $page->intro_text() ?></p>
<?php endif ?>
</section>
<!-- Projects Grid -->
<section class="portfolio__projects">
<?php
$projects = $page->children()->listed();
$total = $projects->count();
$index = 0;
?>
<?php foreach ($projects as $project): ?>
<?php $index++ ?>
<article class="project-card" data-index="<?= $index ?>">
<!-- Project Gallery -->
<div class="project-card__gallery">
<?php if ($cover = $project->cover()->toFile()): ?>
<img src="<?= $cover->url() ?>" alt="<?= $project->title() ?>" class="project-card__cover">
<?php endif ?>
<?php foreach ($project->files()->filterBy('template', 'image')->limit(5) as $image): ?>
<img src="<?= $image->url() ?>" alt="" class="project-card__image">
<?php endforeach ?>
</div>
<!-- Project Info -->
<div class="project-card__info">
<h2 class="project-card__title"><?= $project->title() ?></h2>
<?php if ($project->tagline()->isNotEmpty()): ?>
<p class="project-card__tagline"><?= $project->tagline() ?></p>
<?php endif ?>
<?php if ($project->description()->isNotEmpty()): ?>
<p class="project-card__description"><?= $project->description() ?></p>
<?php endif ?>
<!-- Meta -->
<div class="project-card__meta">
<?php if ($project->impact()->isNotEmpty()): ?>
<div class="project-card__impact">
<span class="label">Impact:</span>
<?= $project->impact()->join(', ') ?>
</div>
<?php endif ?>
<?php if ($project->category()->isNotEmpty()): ?>
<div class="project-card__category">
<span class="label">Catégorie:</span>
<?= $project->category()->value() ?>
</div>
<?php endif ?>
<?php if ($project->platforms()->isNotEmpty()): ?>
<div class="project-card__platforms">
<span class="label">Plateformes:</span>
<?= $project->platforms()->join(' / ') ?>
</div>
<?php endif ?>
</div>
<!-- Links -->
<div class="project-card__links">
<?php if ($project->apple_link()->isNotEmpty()): ?>
<a href="<?= $project->apple_link() ?>" class="btn btn--apple" target="_blank">
Apple
</a>
<?php endif ?>
<?php if ($project->android_link()->isNotEmpty()): ?>
<a href="<?= $project->android_link() ?>" class="btn btn--android" target="_blank">
Android
</a>
<?php endif ?>
</div>
</div>
<!-- Counter -->
<div class="project-card__counter">
<?= str_pad($index, 2, '0', STR_PAD_LEFT) ?>/<?= str_pad($total, 2, '0', STR_PAD_LEFT) ?>
</div>
</article>
<?php endforeach ?>
</section>
<!-- Thumbnails Navigation -->
<nav class="portfolio__thumbnails">
<?php foreach ($projects as $project): ?>
<a href="#<?= $project->slug() ?>" class="portfolio__thumbnail">
<?php if ($cover = $project->cover()->toFile()): ?>
<img src="<?= $cover->thumb(['width' => 100])->url() ?>" alt="<?= $project->title() ?>">
<?php endif ?>
</a>
<?php endforeach ?>
</nav>
</main>
<?php snippet('footer') ?>