1
0
Files
medical-notes/quiz/docs/overview.md
Johan Dahlin 67c3507f3a
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 3m10s
vault backup: 2025-12-23 22:52:59
2025-12-23 22:52:59 +01:00

199 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.