diff --git a/apps/web/src/pages/HomePage.tsx b/apps/web/src/pages/HomePage.tsx
index 6f700ae..a6f72c6 100644
--- a/apps/web/src/pages/HomePage.tsx
+++ b/apps/web/src/pages/HomePage.tsx
@@ -1,10 +1,9 @@
import { useEffect, useState } from "react";
import { BookOpen, LibraryBig, ScanLine } from "lucide-react";
import { api } from "../api/client";
-import { hasActiveCoverWork, isBookCoverUpdating, type DashboardData } from "../api/types";
-import { bookDisplayTitle, bookMetadataState, bookMetadataStateLabel, bookVolumeLabel, displayPublishedDate } from "../book/metadata";
-import { BookCard } from "../components/BookCard";
-import { EmptyState, LoadingState, Meter, Panel } from "../components/ui";
+import type { DashboardData } from "../api/types";
+import { bookDisplayTitle, bookVolumeLabel } from "../book/metadata";
+import { EmptyState, LoadingState, Panel } from "../components/ui";
import { navigate } from "../router";
export function HomePage() {
@@ -28,14 +27,29 @@ export function HomePage() {
}, []);
if (!state) return ;
- const fallbackCoverLoading = hasActiveCoverWork(state.jobs);
+
+ const renderHomeBook = (item: DashboardData["books"][number], className = "home-book-card") => {
+ const volumeLabel = bookVolumeLabel(item);
+ return (
+
+ );
+ };
return (
-
-
+
+
-
Cabinet de curiosites numerique
-
Ouvrir, classer, reprendre.
+
Bibliotheque personnelle
+
Reprendre la lecture.
{fallback ? "API absente ou incomplete : specimens de demonstration actifs." : "Catalogue branche sur le serveur local."}
-
- {state.books.map((book) => (
-
- ))}
+
+ {state.books.map((book) => renderHomeBook(book))}
);
diff --git a/apps/web/src/pages/HomePageProgressScroll.test.ts b/apps/web/src/pages/HomePageProgressScroll.test.ts
index c553ee7..d743fe0 100644
--- a/apps/web/src/pages/HomePageProgressScroll.test.ts
+++ b/apps/web/src/pages/HomePageProgressScroll.test.ts
@@ -2,17 +2,31 @@ import { readFileSync } from "node:fs";
import { describe, expect, it } from "vitest";
describe("home progress list layout", () => {
- it("keeps the continue reading list scrollable after six visible books", () => {
+ it("keeps the continue reading list scrollable after three visible books", () => {
const styles = readFileSync(new URL("../styles/app.css", import.meta.url), "utf8");
const continueGrid = styles.match(/\.continue-grid\s*\{[^}]+\}/)?.[0] ?? "";
const continueTile = styles.match(/\.continue-tile\s*\{[^}]+\}/)?.[0] ?? "";
- expect(continueGrid).toContain("--continue-visible-rows: 6");
- expect(continueGrid).toContain("--continue-tile-block-size: 118px");
+ expect(continueGrid).toContain("--continue-visible-rows: 3");
+ expect(continueGrid).toContain("--continue-tile-block-size: 112px");
expect(continueGrid).toContain("max-height: calc((var(--continue-tile-block-size) * var(--continue-visible-rows)) + (10px * (var(--continue-visible-rows) - 1)))");
expect(continueGrid).toContain("overflow-y: auto");
expect(continueGrid).toContain("scrollbar-gutter: stable");
expect(continueTile).toContain("block-size: var(--continue-tile-block-size)");
expect(continueTile).toContain("overflow: hidden");
});
+
+ it("keeps home book cards scoped and simplified", () => {
+ const source = readFileSync(new URL("./HomePage.tsx", import.meta.url), "utf8");
+
+ expect(source).toContain("renderHomeBook");
+ expect(source).toContain("home-book-card");
+ expect(source).not.toContain(" span {
+ color: var(--ink-muted);
+}
+
+.home-book-volume {
+ width: max-content;
+ max-width: 100%;
+ padding: 3px 6px;
+ border: 1px solid rgba(213, 168, 77, 0.42);
+ border-radius: 999px;
+ color: #f5dfaa;
+ font-size: 0.72rem;
+ font-weight: 900;
+ background: rgba(213, 168, 77, 0.1);
+}
+
.continue-cover {
display: grid;
place-items: center;