106 lines
3.6 KiB
Markdown
106 lines
3.6 KiB
Markdown
# my2dos – Projektkontext für Pi
|
||
|
||
## Zweck
|
||
my2dos ist eine kleine persönliche Produktivitäts- und Wissens-App für Aufgaben, Notizen, Links, Journal-Einträge, Tags, Teams, Collections und Kanban.
|
||
|
||
## Tech Stack
|
||
- Python / Django
|
||
- Django Templates
|
||
- HTMX für partielle Updates
|
||
- Alpine.js für UI-Interaktionen im Browser
|
||
- SQLite lokal (`db.sqlite3`)
|
||
- Virtuelle Umgebung: `.venv/`
|
||
|
||
## Wichtige Pfade
|
||
- `core/models.py` – Datenmodelle, Tag-/Link-Metadaten-Sync
|
||
- `core/views.py` – Hauptlogik, Item-Erstellung/Bearbeitung, Teams, Collections, API
|
||
- `core/forms.py` – Django Forms
|
||
- `core/templates/core/` – UI Templates
|
||
- `core/tests.py` – Tests
|
||
- `my2dos/settings.py` – Django Settings
|
||
- `README.md` – Setup und Basis-Dokumentation
|
||
|
||
## Zentrale Konzepte
|
||
- `Item.kind`: `todo`, `note`, `link`, `journal`
|
||
- `Item.visibility`: `private`, `team`, `public`
|
||
- Tags werden aus `#tag` im Content extrahiert und mit `Item.sync_metadata()` synchronisiert.
|
||
- Team-Tags entsprechen `Team.slug`.
|
||
- Ein Team-Tag wie `#myteam` macht ein Item automatisch zum Team-Item.
|
||
- Team-Items behalten die Verknüpfung über `Item.team` und `Item.visibility = team`.
|
||
- Interne Links haben die Form `[[note:1]]`, `[[todo:2]]` oder `[[3]]`.
|
||
- Collections können manuell oder tag-basiert sein.
|
||
- Tag-basierte Collections verwenden Content-Tags, Team-Tags sollen dabei nicht als Content-Filter genutzt werden.
|
||
|
||
## Häufige Befehle
|
||
Setup:
|
||
|
||
```bash
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
.venv/bin/python manage.py migrate
|
||
.venv/bin/python manage.py createsuperuser
|
||
```
|
||
|
||
Server starten:
|
||
|
||
```bash
|
||
.venv/bin/python manage.py runserver
|
||
```
|
||
|
||
Tests ausführen:
|
||
|
||
```bash
|
||
.venv/bin/python manage.py test core
|
||
```
|
||
|
||
Einzelne Testklasse ausführen:
|
||
|
||
```bash
|
||
.venv/bin/python manage.py test core.tests.TestKlasse
|
||
```
|
||
|
||
## Zugriff auf produktive Aufgaben
|
||
- Produktive Aufgaben liegen unter `https://my2dos.rucki.ch` und können über die JSON-API abgerufen werden.
|
||
- Lokale Zugangsdaten stehen in `.env` und dürfen nicht committed oder ausgegeben werden:
|
||
- `MY2DOS_API_URL`
|
||
- `MY2DOS_API_KEY`
|
||
- API-Authentifizierung: Header `X-Api-Key: $MY2DOS_API_KEY` oder `Authorization: Bearer $MY2DOS_API_KEY`.
|
||
- Offene Remote-Aufgaben anzeigen:
|
||
|
||
```bash
|
||
./scripts/my2dos_remote_tasks.py list
|
||
```
|
||
|
||
- Aufgabe als erledigt markieren:
|
||
|
||
```bash
|
||
./scripts/my2dos_remote_tasks.py done <id>
|
||
```
|
||
|
||
- Direkt per curl abrufen:
|
||
|
||
```bash
|
||
source .env
|
||
curl -H "X-Api-Key: $MY2DOS_API_KEY" "$MY2DOS_API_URL/api/items/?limit=500"
|
||
```
|
||
|
||
## Arbeitsregeln für Coding-Agenten
|
||
- Vor Änderungen relevante Dateien lesen.
|
||
- Änderungen möglichst klein und gezielt halten.
|
||
- Bestehende UI-/Template-Struktur respektieren.
|
||
- Nach funktionalen Änderungen Tests ergänzen oder anpassen.
|
||
- Wenn möglich mindestens `.venv/bin/python manage.py test core` ausführen.
|
||
- Keine grossen Refactorings ohne explizite Nachfrage.
|
||
- Keine Änderungen an Datenbank/Migrationen ohne Notwendigkeit.
|
||
- Bei Änderungen an Team-/Tag-Logik besonders auf Seiteneffekte bei Collections, API und Bearbeiten-Formularen achten.
|
||
|
||
## Bekannte/Für die Zukunft relevante Themen
|
||
- Team-Tags und Content-Tags klar getrennt halten.
|
||
- Bearbeiten von Team-Items darf die Team-Verknüpfung nicht verlieren.
|
||
- Collections müssen Sichtbarkeit/Team-Kompatibilität von enthaltenen Items beachten.
|
||
- Mobile UI nutzt eigene Tag-Picker und Quick-Composer-Interaktionen.
|
||
|
||
## Notizen für neue Sessions
|
||
Wenn eine neue Pi-Session in diesem Verzeichnis gestartet wird, zuerst diese Datei, `README.md` und bei Bedarf `core/models.py`, `core/views.py`, `core/forms.py` sowie `core/tests.py` berücksichtigen.
|