NoteBuilder

Open-source · github.com/YuZh98/notebuilder

Study material that does something. Build notebooks from reactive cards, drill them in Study mode, and hand them to anyone as a single offline file.

https://raw.githubusercontent.com/YuZh98/notebuilder/main/docs/screenshots/v0.2.0/study-live.png

https://github.com/YuZh98/notebuilder/actions/workflows/ci.yml/badge.svg?branch=main https://img.shields.io/badge/tests-2718-brightgreen https://img.shields.io/badge/Svelte-5-FF3E00?logo=svelte&logoColor=white https://img.shields.io/badge/Tauri-2-24C8DB?logo=tauri&logoColor=white https://img.shields.io/badge/platform-macOS-black?logo=apple https://img.shields.io/badge/License-MIT-yellow.svg

Download for macOS (Apple silicon, v0.3.0) · Website and live demo. Notebooks live in a local SQLite database on your machine; nothing is sent anywhere.


Who is this for?

  • Students and self-learners who want flashcards that flip, quizzes that check themselves, practice problems with fresh numbers every attempt, and a progress meter that fills as they finish cards.
  • Teachers and tutors who want to send one file that works in any browser, offline, with nothing to install, that remembers each student’s progress and hands back a results summary.
  • Anyone explaining something quantitative. A slider, a formula, and a chart in one card wire together and react live. Drag the slider, watch the curve move.

Why not a document?

ProblemStatic notesNoteBuilder
Self-testingRe-reading, highlightingFlashcards flip, quizzes grade themselves, practice problems redraw their numbers
Quantitative intuitionA pasted screenshot of a plotSlider drives formula drives chart, live, per card
Knowing where you standGut feelingPer-reader progress meters count what you have actually finished
SharingRecipient needs your app or an accountOne self-contained .html that opens offline in any browser
Authoring costHours per lessonAny chat AI drafts it from the built-in prompt; you review the drafts

How it works

Cards are built from slots. A card is a small stack of primitives on a 12-column grid: text, slider, formula, chart, choice, practice problem, table, code, image, checklist, text answer, progress. Slots in the same card share variables; dependencies resolve by topological sort, and cycles or missing writers are caught at import.

Edit and Study are hard-separated. Edit shows structure and configuration; Study is the rendered, interactive result. Cmd+Enter flips between them.

Any AI can draft a notebook. + → From AI… writes a complete prompt for ChatGPT, Claude, Gemini, or any other chat AI. Paste the reply back; NoteBuilder validates it, explains any problems with where and how to fix them, and marks every new card as a draft until you review it. No AI runs inside the app, and the notebook format is published.

Sharing is a file. Export a notebook as a self-contained Reader .html. The recipient reads and interacts; their answers and progress are saved in their own browser, and My results gives them a summary to send back.

https://raw.githubusercontent.com/YuZh98/notebuilder/main/docs/screenshots/v0.2.0/edit-mode.pnghttps://raw.githubusercontent.com/YuZh98/notebuilder/main/docs/screenshots/v0.2.0/reader.png
Edit mode: every slot becomes its configuration fields.The shared .html in a plain browser: authoring chrome is gone, and the reader’s state is their own.

Engineering

  • Stack: Svelte 5 + TypeScript (strict) front end in a Rust Tauri 2 shell; SQLite storage with migrations; native print and dialogs.
  • Durable saves: every database access rides one queue, each save is a single transaction, and saves survive a crash or a Cmd+Q. Persisted-shape changes ship a migration, so old files keep loading.
  • Security: no eval on user content; formulas run through a small purpose-built expression evaluator, all user text is escaped before Markdown or KaTeX rendering, and SQL is parameterized throughout.
  • Tests: 2,718 tests across 204 files, svelte-check clean, CI on every push. Source-level guard tests lock architectural invariants so regressions fail loudly.

License

MIT.