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

@ -10,9 +10,6 @@
<!-- Favicon -->
<link rel="icon" type="image/png" href="<?= url('assets/favicon.png') ?>">
<!-- Styles -->
<?= css('assets/css/main.css') ?>
<!-- Open Graph -->
<meta property="og:title" content="<?= $page->meta_title()->or($page->title()) ?>">
<meta property="og:description" content="<?= $page->meta_description()->or($site->site_description()) ?>">
@ -21,53 +18,16 @@
<?php if ($cover = $page->cover()->toFile()): ?>
<meta property="og:image" content="<?= $cover->url() ?>">
<?php endif ?>
<?php if (file_exists('assets/dist')): ?>
<!-- Production: Load compiled assets -->
<script type="module" src="<?= url('assets/dist/index.js') ?>" defer></script>
<link rel="stylesheet" href="<?= url('assets/dist/index.css') ?>">
<?php else: ?>
<!-- Development: Load from Vite dev server -->
<script type="module" src="http://localhost:5173/@vite/client" defer></script>
<script type="module" src="http://localhost:5173/src/main.js" defer></script>
<?php endif ?>
</head>
<body class="template-<?= $page->template() ?>">
<!-- Header -->
<header class="site-header">
<div class="site-header__container">
<!-- Logo -->
<a href="<?= $site->url() ?>" class="site-header__logo">
<?php if ($logo = $site->logo()->toFile()): ?>
<img src="<?= $logo->url() ?>" alt="<?= $site->site_title() ?>">
<?php else: ?>
<span class="site-header__logo-text"><?= $site->site_title() ?></span>
<?php endif ?>
</a>
<!-- Navigation -->
<nav class="site-header__nav">
<ul class="site-nav">
<?php foreach ($site->main_navigation()->toStructure() as $item): ?>
<?php $linkedPage = $item->link()->toPages()->first() ?>
<?php if ($linkedPage): ?>
<li class="site-nav__item <?= $linkedPage->isOpen() ? 'is-active' : '' ?>">
<a href="<?= $linkedPage->url() ?>">
<?= $kirby->language()?->code() === 'en' ? $item->label_en() : $item->label_fr() ?>
</a>
</li>
<?php endif ?>
<?php endforeach ?>
</ul>
</nav>
<!-- Language Switcher -->
<?php if ($kirby->languages()->count() > 1): ?>
<div class="site-header__lang">
<?php foreach ($kirby->languages() as $lang): ?>
<a href="<?= $page->url($lang->code()) ?>"
class="site-lang__link <?= $lang->code() === $kirby->language()?->code() ? 'is-active' : '' ?>">
<?= strtoupper($lang->code()) ?>
</a>
<?php endforeach ?>
</div>
<?php endif ?>
<!-- Mobile Menu Toggle -->
<button class="site-header__toggle" aria-label="Menu">
<span></span>
<span></span>
<span></span>
</button>
</div>
</header>
<body>
<div id="app"></div>