Dagsplan: flytt/navn/deling + plan-badge, kategorier, feltmodus

Dagsplan kan navngis og flyttes til annen dato (slår sammen uten datatap).
Delbar som hovedregel (shared-flagg default true) med toggle for privat;
andres delte planer kan ses skrivebeskyttet via "Plan for"-velger.
getPlanFor håndhever tilgang. Per-oppgave plan-badge (dag + person) via
planIndex filtrert per viewer.

Egendefinerte kategorier (categories.json) i tillegg til de 12 innebygde;
dynamisk validering, deles via WS, addes fra kategori-nedtrekket.

Feltmodus (body.field-mode): større berøringsmål for mobil, auto på <640px.

plans.json migreres array -> {name,items,shared} ved oppstart (bakoverkompat).
26 integrasjonstester (6 nye), alle grønne. README + CLAUDE.md oppdatert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jon Vanvik 2026-06-15 13:59:19 +02:00
parent be166034de
commit bdeb6254b9
8 changed files with 724 additions and 147 deletions

View file

@ -135,8 +135,16 @@ WantedBy=multi-user.target
- **Presence** — se hvem som er pålogget akkurat nå
- **Kanban-tavle** med drag & drop mellom statuskolonner, pluss klassisk tabellvisning
- **Dagsplan** — plukk oppgaver fra lista og bygg en ordnet plan for dagen
(dra for å sortere, kapasitet i timer, datovelger). Planen er personlig og
synkes mellom dine egne faner.
(dra for å sortere, kapasitet i timer, datovelger). Kan navngis, flyttes til
en annen dato i ett klikk, og er som hovedregel synlig for alle (med en
«Synlig for alle»-toggle for å gjøre den privat). Andres delte planer kan ses
skrivebeskyttet via «Plan for»-velgeren.
- **Plan-badge på oppgaver** — hvert kort/rad viser om oppgaven er planlagt,
hvilken dag og av hvem.
- **Egendefinerte kategorier** — legg til nye kategorier fra kategori-nedtrekket
(«+ Ny kategori …»); de deles med hele teamet umiddelbart.
- **Feltmodus** — toggle (📱 / `f`) for større knapper og mer tommelvennlig
layout på mobil; slås på automatisk på små skjermer.
- **Kommentar ved statusbytte** — når du markerer ferdig eller blokkert (via
knapp, kanban-drag eller modal) tilbys du å skrive en kommentar som festes
til oppgaven og vises i aktivitetsloggen
@ -149,7 +157,7 @@ WantedBy=multi-user.target
- **Angre sletting** direkte fra toast
- KPI-er, grafer (kategori/prioritet/eier), filtre, sortering, søk
- Eksport/import av JSON, eksempeldata for demo
- Tastatursnarveier: `n` ny · `/` søk · `v` bytt visning · `p` dagsplan · `a` aktivitet · `esc` lukk
- Tastatursnarveier: `n` ny · `/` søk · `v` bytt visning · `p` dagsplan · `f` feltmodus · `a` aktivitet · `esc` lukk
## API
@ -158,14 +166,17 @@ optimistisk låsing — send med ved update, få 409 hvis noen andre har lagret.
| Metode | Endepunkt | Beskrivelse |
|---|---|---|
| GET | `/api/state` | Bruker, oppgaver, aktivitet, kjente brukere, online, og dagens plan |
| GET | `/api/state` | Bruker, oppgaver, aktivitet, kjente brukere, online, kategorier, dagens plan, planIndex |
| POST | `/api/tasks` | Opprett oppgave (`title` påkrevd) |
| PUT | `/api/tasks/:id` | Oppdater (delvis OK; send `v` for konfliktsjekk; valgfri `comment` festes som status-kommentar) |
| DELETE | `/api/tasks/:id` | Slett |
| POST | `/api/tasks/:id/comments` | Legg til kommentar `{ text }` |
| DELETE | `/api/tasks/:id/comments/:cid` | Slett egen kommentar |
| GET | `/api/plan?date=YYYY-MM-DD` | Hent egen dagsplan (ordnet liste av task-ids) |
| PUT | `/api/plan` | Lagre egen dagsplan `{ date, items: [id…] }` |
| GET | `/api/plan?date=YYYY-MM-DD&user=navn` | Hent dagsplan (egen, eller en annens hvis delt — ellers 403) |
| PUT | `/api/plan` | Lagre egen dagsplan `{ date, items: [id…], name?, shared? }` |
| PUT | `/api/plan/share` | Slå deling av/på `{ date, shared }` |
| PUT | `/api/plan/move` | Flytt hele planen `{ from, to }` (slår sammen på måldato) |
| POST | `/api/categories` | Legg til egendefinert kategori `{ name, color? }` |
| POST | `/api/replace` | Erstatt hele listen (import) |
| POST | `/api/seed` | Last eksempeldata (kun hvis tomt) |
| POST | `/api/login` | Sett navn-cookie (hvis cookie-auth er på) |
@ -183,7 +194,8 @@ curl -s -X POST localhost:3000/api/tasks \
## Lagring
JSON-filer i `DATA_DIR` (atomisk skriv via tmp-fil + rename, serialisert i
prosessen): `tasks.json`, `activity.json`, `users.json` og `plans.json`
(dagsplaner per bruker per dato; planer eldre enn 30 dager ryddes ved oppstart).
prosessen): `tasks.json`, `activity.json`, `users.json`, `plans.json`
(dagsplaner `{name, items, shared}` per bruker per dato; eldre enn 30 dager
ryddes ved oppstart) og `categories.json` (egendefinerte kategorier).
Én node-prosess per datakatalog. Holder fint til tusenvis av oppgaver; blir det
trangt er SQLite (`node:sqlite`) neste naturlige steg.