Bookshelf

A curated reading list at /bookshelf/ driven by a data file. Organize recommended books by category, add ISBNs, link out to retailers, and let readers filter by topic.

Specialty Content Updated April 18, 2026 v1.0.0

The bookshelf is a publication-curated reading list — not a library of full texts (that is the Library), but a list of books the publication recommends. It lives at /bookshelf/ and is driven entirely by a data file. There are no Markdown files to create per book: add an entry to the data file, rebuild, and it appears.

Add books

Books are defined in src/_data/bookshelf.js:

export default [
  {
    title: "The Age of Reason",
    author: "Thomas Paine",
    year: 1794,
    isbn: null,
    category: "Philosophy",
    description: "Paine's argument for deism and against institutionalized religion, written in two parts during the French Revolution.",
    url: "https://www.gutenberg.org/ebooks/3743",
    tags: ["philosophy", "deism", "history"]
  },
  {
    title: "On Liberty",
    author: "John Stuart Mill",
    year: 1859,
    isbn: "978-0-14-043200-0",
    category: "Political Philosophy",
    description: "Mill's foundational essay on the nature and limits of the power that society can exercise over the individual.",
    url: "https://www.gutenberg.org/ebooks/34901",
    tags: ["philosophy", "politics", "freedom"]
  }
];
FieldRequiredNotes
titleYesBook title
authorYesAuthor name
yearNoPublication year (original, not edition)
isbnNoISBN-13 preferred. Use null for public domain works without a current edition.
categoryYesUsed to group entries on the index page
descriptionNo1–3 sentence annotation explaining why you recommend it
urlNoLink to purchase, borrow, or read free — retailer, library, or Project Gutenberg
tagsNoFor filtering

The bookshelf index

/bookshelf/ renders all entries grouped by category, alphabetically within each group. Readers can filter by tag or category using the client-side filter — no page reload required.

Each entry shows title, author, year, description, and a link button if url is provided.

Creating a new category

Categories are free-form strings. Add a new category value in the data file and it automatically becomes a filter option on the next build. There is no separate category registration step.

What to do next

  • Library for hosting full public-domain texts with chapter navigation and reading progress.
  • Quotes for a pull-quote collection alongside your reading recommendations.
  • Data files reference for how data files work across the framework.
Still need help?

Browse Support for community channels and paid support options, or book a call if you'd like me to set it up for you.