Objectives
What Solid Memo is for, who it is for, what it is not for, and the principles the code keeps, each with where it is enforced.
Mission
Solid Memo helps people remember what they learn, with flashcards that come back just before they would be forgotten, while what they study stays in a pod of their own choosing, not with the app.
Goals
Each goal, and the pages and code that carry it out:
- 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, when the learner chooses it, so each comes
back at a longer interval the better it is known.
srs.md,
sm2.ts,fsrs.ts,scheduling.ts. - Keep your data in your own pod. Everything you study is stored in your Solid pod, read and written from your browser. Solid Memo has no server and no accounts of its own. 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 into a pod later. guest-mode.md, onboarding.md.
- Start from ready-made decks and courses. A library of decks,
some of them courses that teach before they ask, each version
described with open standards and under its own license.
deck-library.md, courses.md,
decks/. - Write and share your own. 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, with Solid Memo's own terms and shapes published, versioned, at their addresses. standards.md, vocab.md, shapes.md, validation.md, migrations.md.
- In your language. The app speaks English, Swedish, Korean, German, Spanish and French, and shows text in the languages it is written in. i18n.md.
- Safe whatever the data holds. Text from a pod or a library is shown so that no data can run code in the app. markdown.md, validation.md.
- Run anywhere. The site is static files that any web host can serve. deployment.md.
Who it is for
- Learners, who study decks and courses in the app (srs.md, courses.md).
- Authors of decks and courses, who write and publish them with the Studio (studio.md).
- People who run their own copy of the site (deployment.md).
- Developers of other Solid apps, who read and write the same data (data-model.md, vocab.md).
What it is not for
- Not a service that holds your data. There is no Solid Memo server, account or database; your pod's server holds your data (privacy.md).
- Not a way to watch learners. The app has no analytics and no tracking, and no one but you and those your pod lets in can see what you studied (privacy.md).
- Not an exam. A course's questions schedule cards for you; they do not grade you for anyone else.
- Not a source of authority. The library's decks are "Compiled by Anton Wiklund with the help of AI" (deck-library.md). Each says what it was compiled from, and corrections are welcome in the issue tracker.
Principles and where they are enforced
No public policy applies to Solid Memo (policy.md), so its objectives come from the project itself. Each principle below is checked by code, not left to good intentions:
| Principle | Where it is described | Where it is enforced |
|---|---|---|
| Every line of code is tested | testing.md | 100% coverage per package, in vitest.shared.ts, run by npm run check |
| Each layer depends only on the layers it may | boundaries.md, architecture.md | checkBoundaries.ts, npm run check:boundaries |
| Data has the shape it says it has | shapes.md, validation.md | the shapes, checked in the app and by npm run library:check; pySHACL in CI (shacl_crosscheck.py) |
| A published deck version never changes under its readers | deck-library.md | npm run library:check -- --base <ref> in CI's library job (ci.yml) fails on a published version edited or removed (baseProblems in deckLibrary.ts); the continuity rules fail on a card dropped |
| Every library deck says how it may be reused | deck-library.md | the noLicense rule in libraryRules.ts, run by npm run library:check |
| Data from a pod cannot 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 do what their guide says | srs.md (SM-2 and FSRS-6) | sm2.test.ts, fsrs.test.ts |
| It works with real Solid servers | testing.md | the end-to-end tests against several servers, in CI |
| Turtle is written one way | architecture.md | npm run format:turtle:check |
| The docs and the English messages use one spelling, American | style.md | cspell.config.yaml, npm run lint:spelling, in npm run check |
Language
English is the authoritative language of the code, its documentation, commits and issues; the docs are written in American English. The app's messages in other languages are translations of the English (i18n.md).