Phase 3: HTMX & Alpine.js integration, router refactoring, and UI modernization
CI / Test (Python 3.11) (push) Has been cancelled
CI / Test (Python 3.12) (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Type Check (push) Has been cancelled
CI / Summary (push) Has been cancelled

- Modernized the frontend with HTMX for server-driven UI and Alpine.js for client state.
- Refactored anime, player, and recommendation logic into modular routers.
- Updated README.md to reflect the latest project state and technologies (v2.4).
- Added Plyr.io for an improved streaming experience.
- Improved project structure with componentized templates.
- Added Playwright and Vitest configuration for frontend testing.
This commit is contained in:
root
2026-03-26 10:34:26 +00:00
parent a684237725
commit 9f85908ff3
31 changed files with 3413 additions and 2201 deletions
+29 -24
View File
@@ -1,36 +1,41 @@
<!-- Home Section: Recommendations & Latest Releases -->
<div id="tab-home" class="tab-content"
x-show="activeTab === 'home'"
x-init="if (activeTab === 'home') setTimeout(() => loadHomeContent(), 500)"
@set-tab.window="if ($event.detail.tab === 'home') loadHomeContent()">
<!-- Loading State -->
<div id="homeLoading" class="loading-spinner">Chargement des recommandations...</div>
<!-- Home Section: Premium Layout -->
<div id="tab-home" class="tab-content" x-show="activeTab === 'home'">
<!-- Hero / Featured area could go here later -->
<!-- Recommendations Section -->
<div id="recommendationsSection" style="display: none;">
<!-- Recommendations Row -->
<div class="section-container">
<div class="section-header">
<h2>🎯 Recommandé pour vous</h2>
<button class="btn-small btn-secondary" onclick="loadRecommendations()">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" style="width:14px;height:14px;">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
</svg>
Actualiser
<button class="btn-secondary btn-small"
hx-get="/api/recommendations"
hx-target="#recommendationsList">
<i class="fas fa-sync-alt"></i> Actualiser
</button>
</div>
<div id="recommendationsList" class="recommendations-carousel"></div>
<div id="recommendationsList"
hx-get="/api/recommendations"
hx-trigger="load delay:100ms"
class="streaming-row">
<div class="loading-spinner"></div>
</div>
</div>
<!-- Latest Releases Section -->
<div id="releasesSection" style="display: none; margin-top: 40px;">
<!-- Latest Releases Row -->
<div class="section-container">
<div class="section-header">
<h2>🔥 Dernières sorties de la saison</h2>
<button class="btn-small btn-secondary" onclick="loadLatestReleases()">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" style="width:14px;height:14px;">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
</svg>
Actualiser
<h2>🔥 Dernières sorties</h2>
<button class="btn-secondary btn-small"
hx-get="/api/releases/latest"
hx-target="#releasesList">
<i class="fas fa-sync-alt"></i> Actualiser
</button>
</div>
<div id="releasesList" class="releases-carousel"></div>
<div id="releasesList"
hx-get="/api/releases/latest"
hx-trigger="load delay:300ms"
class="streaming-row">
<div class="loading-spinner"></div>
</div>
</div>
</div>