The SSG procedure to generate a book online with versioning https://openfreebooks.org
Find a file
2026-05-20 09:33:33 -07:00
.agents/skills Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
content Enhance basic math notation content by adding a historical overview of mathematical symbols, including the evolution of the equals sign and the introduction of zero. Update comparison section with clearer explanations and examples, and improve styling for visual elements in the math chapter. Adjust chapter structure to allow for flexible content ordering based on importance. 2026-05-20 09:33:33 -07:00
data Update chapter weight for directed numbers section, modify curriculum structure to include a new basic math notation category, and enhance frontend logic for rendering math content in widget-less chapters. 2026-05-19 23:52:48 -07:00
frontend/src Update chapter weight for directed numbers section, modify curriculum structure to include a new basic math notation category, and enhance frontend logic for rendering math content in widget-less chapters. 2026-05-19 23:52:48 -07:00
scripts Update math chapter weights, enhance content clarity in directed numbers section, and add new curriculum category for Foundation. Implement chapter navigation improvements and style updates for better user experience across the platform. 2026-05-19 23:35:40 -07:00
static Replace old Open Graph image with new static asset and integrate social meta tags into base template for improved sharing capabilities. 2026-05-19 12:39:24 -07:00
themes/openfreebooks Update math chapter weights, enhance content clarity in directed numbers section, and add new curriculum category for Foundation. Implement chapter navigation improvements and style updates for better user experience across the platform. 2026-05-19 23:35:40 -07:00
.gitignore Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
bun.lock Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
CONTRIBUTING.md Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
LICENSE Update project configuration and documentation: set version in package.json, enhance spec.md with canvas feature details, add credits URL in zola.toml, and improve footer layout in base.html. Remove unused static files including 404.html, index.html, main.css, robots.txt, site.webmanifest, and sitemap.xml. 2026-05-18 22:33:20 -07:00
package.json Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
README.md Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
skills-lock.json Update .gitignore to include additional static assets for KaTeX, add KaTeX and Commander dependencies in package.json and bun.lock, enhance footer with an About link in base.html, and improve work card links in index.html. Update Vite configuration for asset handling and add new components in SASS files. 2026-05-18 23:35:42 -07:00
spec.md Enhance basic math notation content by adding a historical overview of mathematical symbols, including the evolution of the equals sign and the introduction of zero. Update comparison section with clearer explanations and examples, and improve styling for visual elements in the math chapter. Adjust chapter structure to allow for flexible content ordering based on importance. 2026-05-20 09:33:33 -07:00
tsconfig.json Update TypeScript configuration to exclude test files, enhance CatalogMermaidView component with improved SVG handling and zoom functionality, and modify catalog-to-mermaid logic to include rootNodeId in diagram output. Adjust styles for z-index in catalog components for better layering. 2026-05-19 11:57:50 -07:00
vite.config.ts Update .gitignore to exclude generated chapter sync output, enhance package.json scripts for chapter synchronization, and update README and CONTRIBUTING.md for improved clarity on chapter structure and development processes. Remove obsolete components related to quadratic demos to streamline the project. 2026-05-19 15:39:35 -07:00
wrangler.jsonc Update zola.toml to include site title, description, theme, and additional URLs for navigation 2026-05-18 21:06:12 -07:00
zola.toml Integrate Pagefind for enhanced search functionality: update build process to include search indexing, add search page and UI components, and modify templates for search integration. Update styles for search modal and ensure proper indexing of chapter content. Enhance documentation to reflect new search capabilities. 2026-05-19 12:29:49 -07:00

Open Free Books

Free, open-source textbooks for every learner — from elementary school through university. The site is fully static, open on GitHub, and deployed to Cloudflare.

Live site: openfreebooks.org

Stack

Layer Tool
Site generator Zola
Theme Custom theme in themes/openfreebooks/
Interactivity Solid.js (header, marquee, scroll reveal, theme toggle)
JS build Bun + Vite
Search Pagefind (post-build index, Component UI)
Hosting Cloudflare Workers (static assets via Wrangler)

Chapter content is HTML partials in the theme today (not Markdown). Canvas maps use the JSON Canvas standard (Obsidian-compatible) via json-canvas-viewer.

Contributing curriculum, subjects, or chapters? See CONTRIBUTING.md.

Prerequisites

Project layout

content/                 # Pages and sections (Markdown front matter)
data/                    # Catalog + per-subject curriculum JSON
static/                  # Site assets copied to public/ (favicons, _redirects)
themes/openfreebooks/    # Zola theme
  templates/             # HTML (Tera)
  sass/                  # Stylesheets (compiled to main.css)
  static/js/bundle.js    # Built Solid bundle (committed for simple deploys)
frontend/src/            # Solid.js source
public/                  # Zola build output (gitignored) — Wrangler deploy target
wrangler.jsonc           # Cloudflare Workers static assets config

Development

Install JS dependencies:

bun install

Build the Solid bundle, index search (once per session or after content changes), then start Zola’s dev server:

bun run build:js
bun run index:search
zola serve

Open http://127.0.0.1:1111. Re-run bun run build:js (or bun run dev:js in another terminal) when you change frontend/. Re-run bun run index:search when you change chapter HTML or add pages so search stays up to date.

Search UI is available immediately; results require the index step above (static/pagefind/ is gitignored and copied from the build output).

Production build

bun run build

This runs vite build (outputs to themes/openfreebooks/static/js/bundle.js), zola build (outputs to public/), then Pagefind (public/pagefind/).

Deploy to Cloudflare

bun run build
wrangler deploy

The Worker name is openfreebooks (see wrangler.jsonc). Assets are served from public/ with no server-side logic.

Configuration

Site-wide settings live in zola.toml:

  • base_url — canonical URL for feeds and absolute links
  • [extra] — site_title, github_url, browse_url, search_url, about_url (used in templates and the Solid config block)

Theme notes

The visual design is inspired by manlung.work: paper background with grain, Instrument Serif headings, warm ochre accent (#9a6b2e), and light/dark mode (system preference plus a toggle).

Keep themes/openfreebooks/static/ clean. Only committed built assets belong there (currently js/bundle.js). Do not copy Zola’s public/ output into the theme static/ folder — that pollutes public/js/ on the next build.

Contributor experience — known friction (task list)

These issues make contributions harder than they should be. PRs that fix any item are welcome.

Catalog & data

  • Auto-wire subjects in catalog.html — stop hardcoding if subject.id == "math"; load data/{id}-curriculum.json by subject id convention.
  • Single source for subjects — merge catalog.json subject stubs and {subject}-curriculum.json or generate one from the other at build time.
  • scripts/validate-curriculum.ts — JSON schema check: slugs, curriculums ⊆ global list, live chapters have content/, graph.edges acyclic.
  • Document or script new curriculum labels — today requires catalog.json, Sass badge, and TS curriculumBadgeClass() mapping.

Chapters & content

  • Colocated chapter folders — content/{subject}/{slug}/ with sync:chapters, generic chapter.html, auto widget registry.
  • Strand kicker from front matter — [extra] strand in _index.md.
  • Subject-agnostic catalog load in chapter template — breadcrumb still loads math-curriculum.json literally until more subjects go live.
  • Markdown chapters (optional) — README/spec disagree on format; if staying HTML, document clearly everywhere.
  • Defuddle “copy as Markdown” — spec calls for it on every page; not implemented.

Site & discoverability

  • Data-driven homepage cards — “Browse by subject” / featured blocks duplicate manual edits in index.html.
  • Pagefind search — /search/, header modal (⌘K), bun run index:search for local dev.
  • CONTRIBUTING wizard or checklist in CI — fail PR if live chapter missing partial or catalog entry.

Build & repo hygiene

  • Prevent stale theme static/**/*.html — committed copies under themes/openfreebooks/static/ override Zola output (index, catalog, math); add CI check or pre-commit.
  • Clarify package manager — project uses Bun (bun run build); align docs/tooling if pnpm is preferred elsewhere.
  • dev one-liner — e.g. bun run dev running vite build --watch + zola serve together.

New subject onboarding

  • Subject scaffold command — e.g. bun run scaffold:subject science creating data/science-curriculum.json, content/science/_index.md, and catalog entry.
  • Redirect template generic — math-redirect.html → subject-redirect.html using ?subject= from section path.

Agent skills

Skill Path Use
OFB (this project) .agents/skills/ofb/SKILL.md Catalog, curriculum JSON, chapters, product rules
Zola + Solid .agents/skills/zola/SKILL.md Templates, Sass, bundle, zola serve

License

Open source — see the repository license file when added.