| .agents/skills | ||
| content | ||
| data | ||
| frontend/src | ||
| static | ||
| themes/openfreebooks | ||
| .gitignore | ||
| bun.lock | ||
| package.json | ||
| README.md | ||
| skills-lock.json | ||
| spec.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
| wrangler.jsonc | ||
| zola.toml | ||
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 |
| Hosting | Cloudflare Workers (static assets via Wrangler) |
Book content will use Markdown. Canvas features will follow the JSON Canvas standard (Obsidian-compatible).
Prerequisites
Project layout
content/ # Pages and sections (Markdown)
static/ # Site assets copied to public/ (favicons, manifest)
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 and start Zola’s dev server:
bun run build:js
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/.
Production build
bun run build
This runs vite build (outputs to themes/openfreebooks/static/js/bundle.js) and then zola build (outputs to public/).
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,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.
License
Open source — see the repository license file when added.