# Website Audit en Opruimverslag

Datum: 12 februari 2026  
Scope: `D:\Werkbestanden\SmartVisitor\TESTING\admin`

## 1. Executive Summary

- De codebase is functioneel rijk maar sterk vervuild op root-niveau (veel HTML, tests, docs, backups door elkaar).
- Menu-runtime is database-gedreven (`sv_scans.menu_configurations`) met een fallback menu in code.
- SQL-toegang loopt primair via `sql.js` naar `https://srv890194.hstgr.cloud/api/sql/sql_execute.php`.
- Eerste cleanup-batch is uitgevoerd: root testbestanden zijn verplaatst naar `tests/manual/*`.
- Tweede cleanup-batch is uitgevoerd: tijdelijke HTML tooling en grote referentiemappen zijn naar `archive/` verplaatst.
- Kritieke navigatieissues (`tags.html`, `finance_invoices.html`, `person_detail.html`) zijn gefixt.

## 2. Feitelijke Inventaris

Op basis van statische scan:

- Totale bestanden: 739
- HTML bestanden: 259
- Markdown bestanden: 204
- SQL bestanden: 214
- Testnaam-bestanden: 47

Belangrijkste concentraties:

- HTML: 152 in root, 87 in `Notion Exports`, rest verspreid.
- SQL: 182 in `migrations`, 25 in `scripts`, 4 in root.
- Testbestanden: vooral in root (nu deels opgeschoond), daarnaast `api` en `imap-api`.

## 3. Navigatie en Paginaflow

### 3.1 Startpunt (`index.html`)

- Dashboard toont kaarten naar kernmodules (CRM, Events, People, Hardware, Monitoring, Finance).
- Gebruikt `common.js`, `navigation.js`, `sql.js`, `auth.js`.
- Laadt directe SQL-statistieken voor CRM op de homepage.

### 3.2 Runtime Menu (`navigation.js`)

- Menu wordt eerst uit DB geladen:
  - tabel: `sv_scans.menu_configurations`
  - filter: `is_production = TRUE AND is_active = TRUE`
- Bij fout of geen data valt systeem terug op `navMenuStructureFallback`.
- Conclusie: de echte productie-navigatie staat niet alleen in code, maar ook in databaseconfiguratie.

### 3.3 Geconstateerde inconsistenties

- `index.html` verwees naar `tags.html` (gefixt naar `tag_management.html`).
- `client_detail.html` verwees naar `finance_invoices.html` (gefixt naar `finance.html#invoices`).
- `emails.html` verwees naar `person_detail.html` (gefixt naar `contact_edit.html?id=...`).
- Door database-gedreven menu kan code-scan alleen fallback volledig garanderen; productie-menu moet ook in DB geaudit worden.

## 4. SQL API en Database Keten

## 4.1 Frontendlaag

- `sql.js` bevat:
  - API endpoint(s)
  - `runSQL(sql)` globale helper
  - header `X-API-Key`
  - optioneel `X-Session-Token` voor versioned webhook gedrag

## 4.2 Endpointlaag

- `sql_execute.php` en `api/sql_execute.php`:
  - accepteren JSON met `sql` en `params`
  - valideren `X-API-Key`
  - voeren prepared statements uit
  - SELECT/SHOW/DESCRIBE => resultset
  - write queries => `{success, rows_affected}`

## 4.3 Inzicht in DB-structuur voor agents

Gebruik deze queries via SQL API om actuele structuur op te halen:

```sql
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'sv_scans'
ORDER BY table_name;
```

```sql
SELECT table_name, column_name, data_type, is_nullable, column_key
FROM information_schema.columns
WHERE table_schema = 'sv_scans'
ORDER BY table_name, ordinal_position;
```

```sql
SELECT table_name, constraint_name, referenced_table_name
FROM information_schema.key_column_usage
WHERE table_schema = 'sv_scans'
  AND referenced_table_name IS NOT NULL
ORDER BY table_name, constraint_name;
```

```sql
SELECT menu_structure, name, is_production, is_active
FROM sv_scans.menu_configurations
ORDER BY is_production DESC, updated_at DESC;
```

## 5. Uitgevoerde Opschoning (Batch 1)

Uitgevoerd:

- Nieuwe teststructuur:
  - `tests/manual/html`
  - `tests/manual/scripts`
  - `tests/manual/data`
  - `tests/manual/sql`
- Root `test_*` bestanden en `tests/manual/html\file_storage_test.html` verplaatst naar bovenstaande mappen.
- `tests/README.md` toegevoegd met werkafspraken.

Resultaat:

- Root is direct overzichtelijker.
- Tests zijn nu logisch gegroepeerd en makkelijker uit te sluiten.

## 5.1 Uitgevoerde Opschoning (Batch 2)

Uitgevoerd:

- Tijdelijke/legacy HTML pagina's verplaatst naar `archive/html/*`:
  - debug/migration/legacy/misc subsets
- Grote referentie- en backupmappen verplaatst naar `archive/reference/`:
  - `Notion Exports/`, `Backup/`, `Server Snapshots/`, `chat-pwa-mobile.backup.*`
- Niet-runtime rootbestanden verder opgeschoond:
  - handmatige exports (`.csv/.txt`) naar `archive/reference/exports/`
  - losse SQL scratch files naar `archive/sql/manual/`
  - Notion-conversietools naar `archive/tools/notion/`
- Dev/deploy scripts uit root gehaald naar `ops/`:
  - `ops/local-dev/*` en `ops/deploy/*`
  - compose/docs/scripts aangepast op nieuwe paden
- Documentatie-updates:
  - bulk rewrite van verplaatste testpaden naar `tests/manual/...`
  - absolute padverwijzingen teruggebracht naar repo-relatieve paden

Niet verplaatst:

- `downloads/` bewust behouden op root, omdat API-configuraties daarvan afhankelijk zijn.

## 5.2 Uitgevoerde Opschoning (Batch 3)

Uitgevoerd:

- Root-documentatie verplaatst:
  - alle root `*.md` behalve `README.md` naar `docs/`
- Root compose/deploy tooling verplaatst:
  - compose bestanden naar `ops/local-dev/` en `ops/deploy/compose/`
  - `deploy-n8n-skills.ps1` en `deploy-n8n-skills.sh` naar `ops/deploy/`
- Overige root scripts verplaatst:
  - `cleanup-console-logs.ps1`, `cleanup-console-simple.ps1` -> `ops/local-dev/`
  - `find_socketio_config.sh` -> `ops/deploy/socketio/`
  - `import_demo_data.ps1`, `import_kpn_contacts.ps1` -> `scripts/`
- Backup/artefactbestanden uit root verplaatst naar `archive/`:
  - `*.backup`, `*.bak`, `gps_update_deploy.zip`
- Losse debug/artefactbestanden verplaatst:
  - `debug_email.php` -> `archive/html/debug/`
  - `n8n_workflow_reminder_fix.json`, `talk_example.json` -> `archive/reference/exports/`
- Paden in documentatie aangepast voor nieuwe compose/deploy locaties.

Resultaat:

- Root is beter afgestemd op admin runtimebestanden.
- Niet-runtime documentatie en deploymentconfig staan nu logisch onder `docs/` en `ops/`.

## 6. Lean Werkmodel met 4 Sub-Agents

Vastgelegd in `agents/`:

- `agents/projectleider.md`
- `agents/uitvoer_agent_a.md`
- `agents/uitvoer_agent_b.md`
- `agents/guardian_agent.md`
- `agents/README.md`

Kern:

- Projectleider: planning en prioritering
- Uitvoer A: structuur en fysieke cleanup
- Uitvoer B: functionele inventaris
- Guardian: kwaliteit, risico, escalatie

## 7. Aanbevolen Excludes na Cleanup

Advies om gefaseerd uit te sluiten (na validatie):

- Grote exports/backups:
  - `Notion Exports/`
  - `Backup/`
  - `chat-pwa-mobile.backup.*`
  - `downloads/` (of alleen specifieke artefacten bewaren)
- Lokale tooling/artefacten:
  - extra logs, tijdelijke dumps, ad-hoc credentials exports
- Testartefacten:
  - eventueel `tests/manual/data` (als dat transient testdata bevat)

Let op: `*.sql` staat al globaal in `.gitignore` met beperkte uitzonderingen; dat vereist bewust beheer voor nieuwe migraties.

## 8. React Migratieadvies (na cleanup)

Aanpak: gefaseerde strangler-migratie.
Uitgewerkt in: `docs/REACT_VERCEL_RAILWAY_MIGRATION_ROADMAP_2026-02-12.md` (v1).

Doelarchitectuur:

- Frontend: React (`Vite + TypeScript`) op Vercel.
- Backend/API: Railway (BFF/API-laag tussen frontend en database).

Migratieroute:

1. Stabiliseer eerst informatiearchitectuur en routinglijst.  
2. Zet nieuwe React-shell op naast bestaande HTML (strangler).  
3. Migreer gefaseerd alle domeinen (CRM -> Events -> Communicatie -> Finance -> Overig), niet alles tegelijk.  
4. Gebruik `companies` + `contacts` alleen als startfase/pilot, niet als eindscope.  
5. Centraliseer data-access in 1 typed API-client (geen losse `runSQL` strings in views).  
6. Introduceer typed contracten per endpoint (DTO/schema) en role-based auth aan API-zijde.  
7. Faseer daarna legacy HTML gecontroleerd uit.

Waarom:

- Minimaliseert productierisico.
- Maakt testen en regressiecontrole per domein mogelijk.
- Past bij de huidige database-gedreven menustructuur.

## 9. Open Risico's

- Hardcoded API keys/credentials op meerdere plekken aanwezig.
- SQL rechtstreeks vanuit frontendstrings blijft gevoelig voor fouten en governance-problemen.
- Productiemenu deels in DB => extra auditstap verplicht bij elke navigatiewijziging.
- Er zijn nog legacy referenties mogelijk in oudere planningbestanden buiten runtime-scope.

## 10. Volgende Iteratie

- Pagina-overzichtspagina gebruiken als single source voor handmatige functionele walkthrough.
- Guardian laat ontbrekende links automatisch rapporteren.
- Projectleider start Fase 0 implementatie van de roadmap (React shell + Railway BFF basis met auth/menu/health).
- Resterende doc-rewrites automatiseren zodat alle nieuwe `tests/`, `ops/` en `archive/` paden consistent zijn.

## 11. Update T14 Top-20 Walkthrough (2026-02-12)

- Uitgevoerd: technische walkthrough van 20 kritieke runtimepagina's.
- Resultaat: 20/20 pagina's bestaan; geen missende lokale refs gevonden.
- Rapport: `docs/TOP20_KRITIEKE_PAGINAS_WALKTHROUGH_2026-02-12.md`.
- Messaging smoke checks:
  - `https://smartereventing-messaging-production.up.railway.app` -> HTTP 200
  - `https://cdn.socket.io/4.7.5/socket.io.min.js` -> HTTP 200
- Guardian oordeel: `go` met expliciete uitzonderingsnotitie voor messaging-routes:
  - `messaging.html` zonder standaard `navigation.js` include.
  - `messagingV2.html` als fullscreen externe iframe-shell buiten normale auth/nav/sql bootstrap.



