1
0

vault backup: 2025-12-26 02:09:22
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 2m29s

This commit is contained in:
2025-12-26 02:09:22 +01:00
parent 3fddadfe50
commit 50366b9b9c
288 changed files with 58893 additions and 750 deletions

199
stroma/docs/overview.md Normal file
View File

@@ -0,0 +1,199 @@
# Technical App Structure (Backend-First)
This document summarizes the **final agreed app structure** and their **core models**, focusing on **conceptual correctness and storage**, not UX.
The system is a **modular monolith**. Apps are namespaces, not microservices.
---
## 1. `core`
**Purpose:** global structure and lightweight organization.
### Models
- `Course`
- code
- name
- term / year (optional)
- metadata (optional)
### Notes
- `Course` is a **scope/container**, not a source and not knowledge.
- It groups sources, notes, exercises, and exams.
- Keep this model dumb.
---
## 2. `sources` (a.k.a. *källor*)
**Purpose:** external, replaceable, evidence-based material.
Everything here is:
- not authored by you
- safe to delete and regenerate
- traceable to an origin
### Models
- `Source`
- type (slides, målbeskrivning, instudieringsfrågor, youtube, external_notes, web)
- title
- url / origin reference
- course (FK)
- metadata
- `Asset`
- file/blob reference (PDF, images, transcript file)
- kind (original, page_image, transcript, extracted_text)
- `TextUnit`
- extracted text segment
- locator (page number, timestamp, slide index)
- confidence / OCR quality (optional)
- `Summary`
- AI or human summary
- scope (whole source, section, page range)
- locator range
### Rules
- OCR output → `TextUnit`
- Video transcripts → `TextUnit`
- Other peoples notes → `Source` + `TextUnit`
- AI summaries stay here until rewritten by you
---
## 3. `notes`
**Purpose:** your authored understanding in Markdown (incremental writing).
Everything here is:
- written or rewritten by you
- mutable and refined over time
- stable across re-imports of sources
### Models
- `Note`
- title
- body_md
- course (FK)
- `Chunk`
- UUID anchor (explicit, stable)
- excerpt_md
- status (raw → rewritten → prompted → stable)
- `Concept`
- name
- description_md
- `ChunkSourceRef`
- chunk → source link
- locator (page/timestamp)
### Rules
- Nothing enters `notes` automatically.
- Promotion from `sources` is always explicit.
- Notes are the **driver of understanding**, not scheduling.
---
## 4. `exercises`
**Purpose:** quizable, gradable units (what gets tested).
Everything here:
- has a prompt
- expects an answer or rubric
- can be graded
- can be scheduled
### Models
- `Exercise`
- type (MCQ, cloze, short_answer, free_text)
- prompt_md
- expected_answer / rubric / answer_key
- `ExerciseChunkLink`
- exercise ↔ chunk (why this exists)
- `ExerciseSourceRef` (optional)
- exercise ↔ source locator
### Rules
- Exactly **one canonical place** for testable units.
- Exercises are created from notes, exams, or manually.
- Exercises do **not** track attempts or scheduling.
---
## 5. `exams`
**Purpose:** exam context and performance history.
Everything here is:
- session-based
- append-only
- about performance under constraints
### Models
- `Exam`
- course (FK)
- date
- metadata
- `ExamExercise`
- join table (exam ↔ exercise)
- order
- `Attempt`
- exam (FK)
- mode (timed / untimed)
- start / end timestamps
- `Response`
- attempt (FK)
- exercise (FK)
- answer
- correct
- time_spent
- confidence
### Rules
- Exams **select** exercises; they dont own them.
- Exam results produce signals for reviews.
---
## 6. `reviews`
**Purpose:** spaced repetition scheduling (FSRS).
Everything here is:
- content-agnostic
- stateful
- never auto-deleted
### Models
- `ReviewItem`
- uid (stable across imports)
- points to `Exercise`
- deck / flags
- `FsrsState`
- stability
- difficulty
- due date
- reps / lapses
- `ReviewLog`
- timestamp
- rating (Again / Hard / Good / Easy)
- elapsed / scheduled days
### Rules
- Scheduler never cares *why* an exercise exists.
- Logs are append-only and must be preserved.
---
## Core Invariant (memorize this)
Sources provide evidence.
Notes explain.
Exercises test.
Exams contextualize.
Reviews schedule.
If something does not fit this sentence, it is in the wrong app.
---
## MVP Guidance
- You can ship week 1 with:
- `core`, `sources`, `notes`, `exercises`, `reviews`
- `exams` can be layered on without schema breakage.
- Avoid premature generalization (collections, curricula, sharing).
End of document.