Skip to content

Latest commit

 

History

History
100 lines (86 loc) · 5.69 KB

objectives.md

File metadata and controls

100 lines (86 loc) · 5.69 KB

Objectives

What Solid Memo is for and not for, who uses it, and the principles the code enforces.

Mission

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.

Goals

  1. 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.
  2. Keep the learner's data in their own pod, read and written from their browser. data-model.md, authentication.md, architecture.md.
  3. 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.
  4. 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/.
  5. 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.
  6. 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.
  7. 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.
  8. Safe whatever the data holds. Text from a pod or a library can't run code in the app. markdown.md, validation.md.
  9. Run anywhere. The site is static files any web host can serve. deployment.md.

Who it is for

What it is not for

  • 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.

Principles and where they are enforced

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

Language

English is the authoritative language of the code, docs, commits and issues; messages in other languages translate the English (i18n.md).