diff --git a/.env.example b/.env.example index bd2e6c1..49e3237 100644 --- a/.env.example +++ b/.env.example @@ -4,8 +4,11 @@ # ssh -N -L 5433:/var/run/postgresql/.s.PGSQL.5432 @it2810-34.idi.ntnu.no DATABASE_URL=postgres://gruppe@localhost:5433/norwegian_explorer -# På VM-en (koble til via socket i stedet for nettverk): +# På VM-en (koble til via socket i stedet for nettverk). Backend skal lytte på port 3001, +# og NODE_ENV=production skrur av GraphiQL: # DATABASE_URL=postgres://gruppe@%2Fvar%2Frun%2Fpostgresql/norwegian_explorer +# PORT=3001 +# NODE_ENV=production # Lokal testing av passordtilbakestilling: lagrer e-post som .eml, sender ingenting. # APP_PUBLIC_URL=http://localhost:5173/ diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a45fd52 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2c75786 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +dist +node_modules +**/node_modules.nosync +package-lock.json +server/data.nosync diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..75a894a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "singleQuote": true, + "printWidth": 100 +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..b0d531a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,101 @@ +# Retningslinjer for KI-assistenter + +Denne fila leses av KI-verktøy (Claude Code, Copilot, Codex m.fl.) som jobber i repoet. Den gjelder også for oss som skriver kode selv. Mennesket som ber om endringen er ansvarlig for alt som merges. + +## Prosjektet + +Norwegian Explorer: søkbar katalog over turer i Norge. React + TypeScript + Vite i frontend, GraphQL (Yoga) i Node/TypeScript i backend, PostgreSQL/PostGIS på VM-en. Oppgaven er et studieprosjekt i IT2810, og koden skal kunne leses av eksterne. + +Les [README.md](README.md) og [docs/arkitektur.md](docs/arkitektur.md) før du endrer noe større. + +## Struktur + +``` +src/pages/ Sider (Home, Profile, Fjellomrade) +src/features/ Større deler (Explore, RouteBuilder, ElevationProfile) +src/components/ Delte komponenter +src/lib/ Hjelpefiler uten visning (graphql, format, gpx …) +server/graphql/ Skjemaet delt etter tema, én modul per område +server/services/ Spørringer og beregninger resolverne bruker +server/lib/ Innlogging, grenser, e-post +server/db/ Tilkobling og oppsett av appens tabeller +docs/ Dokumentasjon +``` + +Legg ny kode i riktig mappe. Lag ikke nye filer i roten av `src/` eller `server/`. + +## Kommandoer + +Alt under skal gå uten feil før du sier at noe er ferdig: + +```bash +npm run format:check # Prettier +npm run lint # ESLint +npx tsc -b # typesjekk +npm run build # bygg +``` + +Kjør `npm run format` for å rette formatering. Start lokalt med `npm run dev:server` og `npm run dev`. + +## Kodekvalitet + +- **Gjenbruk før du skriver nytt.** Søk i `src/lib/`, `server/lib/` og nabofilene først. Sjekk spesielt: + - `graphql()` i `src/lib/graphql.ts` for alle kall mot backend. Bruk aldri `fetch` direkte. + - `checkSession()` og `TOKEN_KEY` for innlogging. Ikke skriv tokennøkkelen som tekst. + - `formatKm()` i `src/lib/format.ts` og `lengthText()` for lengder. + - `authed()` i `server/lib/auth.ts` for resolvere som krever innlogging, og `setPassword()` for passordbytte. +- **Ikke kopier kode.** Står det samme i to filer, flytt det til én felles funksjon. +- **Del opp filer der det er naturlig.** Én fil skal ha ett tydelig ansvar. Trenger du å bla lenge for å finne ting, eller blander filen flere ansvar (for eksempel datahenting, kart og visning), er det tid for å dele den. Del etter ansvar og ikke etter linjeantall, og ikke del opp bare for å komme under en grense. +- **TypeScript overalt.** Ingen `.js` eller `.mjs`. Unngå `any`. Trengs det, skriv en kort kommentar om hvorfor. +- **Alle kall mot serveren skal ha timeout** og vise en forståelig feil til brukeren. +- **Ingen ubrukt kode.** Fjern døde imports, filer og kommentert-ut kode. Ikke legg igjen malfiler. +- **Søk, filtrering og sortering skjer på serveren** i SQL, aldri bare på det klienten har lastet. +- **Kommentarer på norsk**, som forklarer hvorfor, ikke hva. Koden skal kunne leses av eksterne. + +## Tilgjengelighet og bærekraft + +- Alle interaktive elementer skal kunne brukes med tastatur og ha tydelig fokus og navn (`aria-label`, `