# Tillsynsappen — instruktioner för Claude Code

Detta är en Next.js 14-app (App Router) med MySQL som driftsätts på cPanel. Läs `ARCHITECTURE.md` för fullständig översikt över stack, databasschema, API-routes och portaler.

## Språk
- Svar och commit-meddelanden skrivs på **svenska**.
- All UI-text och dokumentation är på svenska.

## Driftsättning — kör alltid detta efter kodändringar

**På Mac (i denna mapp, `nextjs-app/`):**
```bash
npm run build && git add -A && git commit -m "<kort beskrivning>" && git push origin main
```

**På servern** (via SSH till cPanel-hosten):
```bash
source /home/anderspe/nodevenv/dev.anderspettersson.studio/inspektorsappen/nextjs-app/22/bin/activate && git fetch origin && git reset --hard origin/main && npm install
```

Sedan: **cPanel → Setup Node.js App → Restart** (manuellt steg i webbgränssnittet).

Inga `cd`-kommandon behövs — utgå ifrån att nuvarande mapp är `nextjs-app/`. Commit-meddelandet ska spegla vad som faktiskt ändrades.

## Databas
- **MySQL** via `mysql2/promise` (inte PostgreSQL).
- Host: `anderspe_inspektorsappen` på cPanel.
- Schemaändringar körs manuellt i phpMyAdmin via `.sql`-filer i rotmappen **innan** servern startas om.
- Befintliga migrationsfiler finns listade i `ARCHITECTURE.md`.

## UI-scopes
- **Admin + chef**: desktop-first, delar designspråk (samma `card`, `btn-primary`, tabbmönster).
- **Handläggare**: mobil PWA, bottom navigation, får avvika visuellt.

## JSX-fallgropar

- **Fragment vid ternär**: när ternärens andra gren `) : (` innehåller fler än ett syskon-element, *alltid* wrappa med `<>...</>`. Annars: "Expression expected" vid build.
- **Fetch i render**: datahämtning sker alltid i `useEffect`, aldrig direkt i render-funktionen eller som `&&`-sidoeffekt i JSX. Annars: oändliga anrop eller "rendered more hooks than previous render".
- **`createToken` returnerar `{ token, jti }`** — inte en sträng. Alla login-routes destrukturerar: `const { token, jti } = await createToken(...)`. Glöms lätt vid nya routes.

## Fallgropar att minnas
- **Lucide-importer måste läggas till manuellt per fil** — saknade ikoner ger "Application error: a client-side exception has occurred" utan tydlig ledtråd. Kontrollera alltid importlistan högst upp i varje `.jsx`-fil när nya ikoner används.
- **`.next/`-build-artefakter är committade i repo** — körningen på servern använder dem, så `npm run build` lokalt **innan** push är obligatoriskt.
- **Alla render-funktioner i `handlaggare/page.jsx` körs eagerly** via `tabContent`-objektet. Ett krash i `renderStatistik()` eller `renderSettings()` kraschar hela sidan även om användaren är på hemfliken.
- **Inga mockar i tester** mot databasen — använd riktig DB.

## Tillsyner — tvånivå-taggning
- **Nivå 1** (`tillsyn_omraden`): obligatoriskt verksamhetsområde per tillsyn, administreras av admin per enhet.
- **Nivå 2** (`tillsyn_taggar`): valfria fria taggar, hanteras av handläggare i inställningar.

## Distansspårning
Daglig office/remote-logg i `work_location_log`. Default-gräns 49 % distans per handläggare (`remote_limit_percent`). Chef-dashboardens insights-API summerar distansandel. Handläggare kan opta ut (`remote_tracking_opted_out`).
