/** * src/book/BookHome.tsx * * The book's table-of-contents landing page at /book. */ import { Link } from 'react-router-dom'; import { groupByPart, CHAPTERS } from './lib/chapters.ts'; import { isChapterDone } from './lib/progress.ts'; const PARTS = groupByPart(CHAPTERS); export default function BookHome() { return (
{/* Hero */}

NeedleScript

From First Stitch to Generative Fabric

An interactive book. Every page is a mix of prose and runnable code — edit any cell, see the embroidery update live, then export to your machine.

Start reading →
{/* Parts */} {PARTS.map((part) => (

{part.title}

{part.chapters.map((ch) => { const done = isChapterDone(ch.id); return ( {ch.title} {done && } {ch.subtitle && ( {ch.subtitle} )} ); })}
))}
); }