What Solid Memo is for and not for, who uses it, and the principles the code enforces.
Solid Memo helps people remember what they learn: its flashcards return right before they'd be forgotten. A learner's study stays in a pod they choose, not with the app.
- Learn for the long term. Cards are scheduled by FSRS-6, which
a new instance starts on, or by SM-2, spaced repetition's
best-known algorithm, if the learner picks it. The better a card is
known, the longer it waits.
srs.md,
sm2.ts,fsrs.ts,scheduling.ts. - Keep the learner's data in their own pod, read and written from their browser. data-model.md, authentication.md, architecture.md.
- Try it first. A guest studies in a pod kept in the browser and can move that study to a pod later. guest-mode.md, onboarding.md.
- Start from ready-made decks and courses. Library decks, some
being courses that teach before they ask, each version described
in open standards, under its own license.
deck-library.md, courses.md,
decks/. - Write and share decks and courses. Solid Memo Studio manages decks in bulk, and writes, checks and publishes releases to a pod for others to add. studio.md.
- Data other apps can read. Data is RDF in open vocabularies; Solid Memo's own terms and shapes are published, versioned, at their addresses. standards.md, vocab.md, shapes.md, validation.md, migrations.md.
- In the learner's language. The app speaks English, Swedish, Korean, German, Spanish and French, and shows text in the language it's written in. i18n.md.
- Safe whatever the data holds. Text from a pod or a library
can't run code in the app.
markdown.md,
validation.md. - Run anywhere. The site is static files any web host can serve. deployment.md.
- Learners study decks and courses in the app (srs.md, courses.md).
- Authors write and publish decks and courses with the Studio (studio.md).
- People who run their own copy of the site (deployment.md).
- Developers of other Solid apps read and write the same data (data-model.md, vocab.md).
- Not a service that holds learners' data. Solid Memo has no server, account or database; the learner's pod server holds the data (privacy.md).
- Not a way to watch learners. There's no analytics or
tracking: only the learner and those their pod lets in see their
study (
privacy.md). - Not an exam. A course's questions schedule the learner's cards; they don't grade the learner for others.
- Not a source of authority. The library's decks are "Compiled by Anton Wiklund with the help of AI" (deck-library.md). Each names its sources; corrections go to the issue tracker.
No public policy applies (policy.md); the project sets its own principles, each checked by code:
| Principle | Described in | Enforced by |
|---|---|---|
| Every line of code is tested | testing.md | 100% coverage per package (vitest.shared.ts), in npm run check |
| Each layer depends only on the layers it may | boundaries.md, architecture.md | checkBoundaries.ts, npm run check:boundaries |
| Data has its stated shape | shapes.md, validation.md | shapes, checked in the app and by npm run library:check; pySHACL in CI (shacl_crosscheck.py) |
| A published deck version never changes | deck-library.md | npm run library:check -- --base <ref> in CI's library job (ci.yml) fails on an edited or removed published version (baseProblems in deckLibrary.ts); continuity rules fail on a dropped card |
| Every library deck has a license | deck-library.md | noLicense in libraryRules.ts, run by npm run library:check |
| Data from a pod can't run code | markdown.md | the Content Security Policy, checked by build.test.ts |
| Every language has every message | i18n.md | i18n.test.tsx |
| The schedulers match their guide | srs.md (SM-2 and FSRS-6) | sm2.test.ts, fsrs.test.ts |
| It works with real Solid servers | testing.md |
end-to-end tests against several servers, in CI |
| Turtle is written one way | architecture.md |
npm run format:turtle:check |
| The docs and English messages use American spelling | style.md | cspell.config.yaml, npm run lint:spelling, in npm run check |
English is the authoritative language of the code, docs, commits and issues; messages in other languages translate the English (i18n.md).