Local-first
Why CramForge keeps books and study material local
CramForge is a study-app starter for DRM-free EPUBs. The public repository ships empty because a reusable tool should not bundle someone else’s books, private notes, or a required AI provider.
The import boundary
An import creates the reader content and a predictable Markdown workspace:
study-materials/<book-slug>/
README.md
chapters/chNN.md
study-guide.md
agent-instructions.mdThe reader handles the book. Markdown handles the handoff to summaries, flashcards, quizzes, cram notes, or any other study format.
Why Markdown
Markdown keeps the study material portable. A user can edit it directly, version it, or hand it to the coding agent or model they already use. The project does not need to own that relationship.
What I check
The useful path is an actual import: run the build and lint checks, import a book the user has the right to use, confirm its chapter and asset output, open it in the reader, and inspect the generated study-pack files outside the app.