From 16905ecb6fee952b239803231c332805b7d0192f Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Tue, 17 Feb 2026 07:36:26 +0000 Subject: [PATCH] feat: add bookshelf home page with animated book spine components Co-Authored-By: Claude Opus 4.6 --- src/app/page.tsx | 102 ++--------------------------------- src/components/BookShelf.tsx | 38 +++++++++++++ src/components/BookSpine.tsx | 47 ++++++++++++++++ 3 files changed, 89 insertions(+), 98 deletions(-) create mode 100644 src/components/BookShelf.tsx create mode 100644 src/components/BookSpine.tsx diff --git a/src/app/page.tsx b/src/app/page.tsx index 6fe62d1..7b8054b 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,101 +1,7 @@ -import Image from "next/image"; +import { getAllGames } from "@/lib/content"; +import BookShelf from "@/components/BookShelf"; export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Get started by editing{" "} - - src/app/page.tsx - - . -
  2. -
  3. Save and see your changes instantly.
  4. -
- -
- - Vercel logomark - Deploy now - - - Read our docs - -
-
- -
- ); + const games = getAllGames(); + return ; } diff --git a/src/components/BookShelf.tsx b/src/components/BookShelf.tsx new file mode 100644 index 0000000..c0306eb --- /dev/null +++ b/src/components/BookShelf.tsx @@ -0,0 +1,38 @@ +import { GameMeta } from "@/types"; +import BookSpine from "./BookSpine"; + +export default function BookShelf({ games }: { games: GameMeta[] }) { + return ( +
+ {/* Title */} +
+

+ Cronicas de los Reinos +

+

+ Las historias epicas de los mundos que nos unieron +

+
+
+ + {/* Shelf */} +
+ {/* Books row */} +
+ {games.map((game) => ( + + ))} +
+ + {/* Shelf surface */} +
+
+
+ + {/* Footer */} +

+ Selecciona un tomo para comenzar a leer +

+
+ ); +} diff --git a/src/components/BookSpine.tsx b/src/components/BookSpine.tsx new file mode 100644 index 0000000..98033e6 --- /dev/null +++ b/src/components/BookSpine.tsx @@ -0,0 +1,47 @@ +import Link from "next/link"; +import { GameMeta } from "@/types"; + +export default function BookSpine({ game }: { game: GameMeta }) { + return ( + +
+ {/* Book spine edge */} +
+ + {/* Book cover content */} +
+
+

+ {game.title} +

+

+ {game.subtitle} +

+
+
+ + {/* Shine effect on hover */} +
+
+ + ); +}