1
0

vault backup: 2025-12-21 14:40:49
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 2m44s

This commit is contained in:
2025-12-21 14:40:49 +01:00
parent a1e409d9d9
commit 4b1f9082bf
2 changed files with 74 additions and 4 deletions

View File

@@ -13,13 +13,13 @@
"state": {
"type": "markdown",
"state": {
"file": "Anatomi & Histologi 2/Gamla tentor/2022-01-15/1.md",
"file": "Anatomi & Histologi 2/Schema.md",
"mode": "source",
"source": true,
"source": false,
"backlinks": false
},
"icon": "lucide-file",
"title": "1"
"title": "Schema"
}
}
]
@@ -213,9 +213,10 @@
},
"active": "baa45c5e57825965",
"lastOpenFiles": [
"z-Tech/Quiz-app.md",
"Anatomi & Histologi 2/Gamla tentor/2022-01-15/1.md",
"Anatomi & Histologi 2/Gamla tentor/2022-01-15/!2022-01-15-0032-BWD.pdf",
"Anatomi & Histologi 2/Gamla tentor/2022-01-15/!2022-01-15-0032-BWD.md",
"Anatomi & Histologi 2/Gamla tentor/2022-01-15/1.md",
"Anatomi & Histologi 2/Gamla tentor/2025-06-03/24.md",
"Anatomi & Histologi 2/Gamla tentor/2025-06-03/25.md",
"Anatomi & Histologi 2/Gamla tentor/2025-06-03/30.md",

View File

@@ -0,0 +1,69 @@
Här är en sammanfattning av arkitekturen och besluten vi spikat, redo att användas som specifikation när du börjar koda.
### 1. Teknikstack
* **Backend:** Django (Micro-framework stil, allt i en fil).
* **Databas:** SQLite (med WAL-mode aktiverat för prestanda).
* **Frontend:** Django Templates + **HTMX** (för SPA-känsla utan build-steg).
* **Server:** Gunicorn (kör appen) bakom **Caddy** (hanterar HTTPS och statiska filer).
### 2. Filstruktur & Setup
Projektet består primärt av **en enda Python-fil** (`quiz.py`) som innehåller:
* Django Settings.
* Modeller (`User`, `Question`, `Option`, `QuizResult`).
* Vyer & URLs.
* HTML-templates (som skrivs till disk vid start).
* Import-logik.
**Mappstruktur:**
```text
/
├── quiz.py # Hela applikationen
├── db.sqlite3 # Databasen
└── static/ # Genereras av collectstatic
```
Gamla Tentor/YYYY-mm-dd/nn.md från obsidian
### 3. Nyckelfunktioner
#### A. Dataimport (Markdown)
* **Källa:** Läser `.md`-filer från `import_folder`.
* **Trigg:** Sker automatiskt i `AppConfig.ready()` när servern startar.
* **Logik:** Använder filsökvägen som ID för att uppdatera frågor snarare än att skapa dubbletter.
#### B. Användare (Lazy Auth)
* Ingen inloggningsskärm.
* **Middleware:** Skapar automatiskt en osynlig `User` och loggar in besökaren om de är anonyma.
#### C. Quiz-flöde
* Sidan laddas inte om.
* `index.html` startar quizet.
* Svar skickas via HTMX (`hx-post`) -> Servern validerar -> Returnerar nästa fråga (`partials/question.html`) som byts ut i DOM:en.
### 4. Deployment & Drift
#### Gitea Action (Deploy)
Ingen `pm2`. Vi dödar och startar om processen med enkla shell-kommandon:
```bash
pkill -f "gunicorn quiz:application" || true
nohup gunicorn quiz:application --workers 3 --bind 127.0.0.1:8000 > app.log 2>&1 &
```
#### Caddy (Reverse Proxy)
Hanterar SSL och avlastar Python från att servera statiska filer.
```caddy
din-domän.se {
root * /sökväg/till/static
file_server /static/*
reverse_proxy 127.0.0.1:8000
}
```
#### Databassäkerhet
För att undvika "Database locked" vid omstarter/concurrent writes:
```sql
PRAGMA journal_mode = WAL;
```