docs: update CLAUDE.md, ROADMAP.md, SESSION-LOG.md with all session findings
This commit is contained in:
+61
-91
@@ -225,47 +225,14 @@
|
||||
|
||||
---
|
||||
|
||||
## PHASE 2 — New Module: Hot Desk Management
|
||||
## PHASE 2 — New Module: Hot Desk Management ✅
|
||||
|
||||
> Module 14 from xlsx. Entirely new.
|
||||
|
||||
### 2.01 `[HEAVY]` Hot Desk Module — Full Implementation
|
||||
### 2.01 ✅ `[HEAVY]` Hot Desk Module — Full Implementation (2026-02-26)
|
||||
|
||||
**What:** Build Module 14 from scratch per xlsx spec:
|
||||
|
||||
- 4 desks in a shared room
|
||||
- Users reserve desks 1 week ahead
|
||||
- Calendar view showing desk availability per day
|
||||
- Reserve/cancel actions
|
||||
- History of past reservations
|
||||
- Visual room layout showing which desks are booked
|
||||
|
||||
**Module structure:**
|
||||
|
||||
```
|
||||
src/modules/hot-desk/
|
||||
├── components/
|
||||
│ ├── hot-desk-module.tsx # Main view with calendar + room layout
|
||||
│ ├── desk-calendar.tsx # Week view with 4 desk columns
|
||||
│ ├── desk-room-layout.tsx # Visual 4-desk room diagram
|
||||
│ └── reservation-dialog.tsx # Book/cancel dialog
|
||||
├── hooks/
|
||||
│ └── use-reservations.ts # CRUD + conflict detection
|
||||
├── services/
|
||||
│ └── reservation-service.ts # Business logic, overlap check
|
||||
├── types.ts # DeskReservation, DeskId
|
||||
├── config.ts # Module metadata
|
||||
└── index.ts
|
||||
```
|
||||
|
||||
**Files to also create/modify:**
|
||||
|
||||
- `src/app/(modules)/hot-desk/page.tsx` — Route
|
||||
- `src/config/modules.ts` — Register module
|
||||
- `src/config/navigation.ts` — Add sidebar entry
|
||||
- `src/config/flags.ts` — Add feature flag
|
||||
|
||||
**User approval required** before moving to Phase 3.
|
||||
**What:** Build Module 14 from scratch per xlsx spec.
|
||||
**Status:** ✅ Done. Full implementation: 4 desks, week-ahead calendar, reserve/cancel, room layout with window (left) + door (right) landmarks, history. Registered in modules/navigation/flags.
|
||||
|
||||
---
|
||||
|
||||
@@ -273,13 +240,17 @@ src/modules/hot-desk/
|
||||
|
||||
> Fază adăugată pentru rafinarea cerințelor, UX și logicii de business înainte de implementarea tehnică.
|
||||
|
||||
### 3.01 `[UI/UX]` Header & Navigare Globală
|
||||
### 3.01 ✅ `[UI/UX]` Header & Navigare Globală (2026-02-27)
|
||||
|
||||
**Cerințe noi:**
|
||||
|
||||
- **Logo-uri:** Mărirea dimensiunii logo-urilor în header ("nu se vede nimic acum").
|
||||
- **Mini-joc Logo:** La click pe logo-uri, acestea se schimbă (efect interactiv/fun, gimmick vizual).
|
||||
- **Logo-uri:** Mărirea dimensiunii logo-urilor în header.
|
||||
- **Mini-joc Logo:** Click pe logo-uri le animează (spin/bounce/ping), combo secret BTG→US→SDT declanșează confetti.
|
||||
- **Navigare:** Click pe titlul aplicației redirecționează către Dashboard.
|
||||
- **Theme Toggle:** Slider animat sun/moon cu gradient zi/noapte, stele, nori.
|
||||
- **Dark mode logos:** Variante corecte light/dark pe baza temei, cu fallback montat.
|
||||
|
||||
**Status:** ✅ Done. Sidebar redesigned: logos in centered row (flex-1, theme-aware, dual-render light+dark), "ArchiTools" text below, animated theme toggle (Sun/Moon lucide icons, gradient background, stars/clouds).
|
||||
|
||||
### 3.02 `[BUSINESS]` Registratura — Integrare și UX
|
||||
|
||||
@@ -306,12 +277,14 @@ src/modules/hot-desk/
|
||||
- **Valabilitate Documente (Expirare CU/AC):** Adăugarea unui sistem de urmărire a valabilității pentru documente emise (ex: Certificat de Urbanism, Autorizație de Construire). Sistemul trebuie să permită setarea unei date de expirare și să genereze alerte/reamintiri cu X zile înainte de expirare (pentru a iniția procedurile de prelungire).
|
||||
- **Pregătire Web Scraping (Wishlist):** Adăugarea unui câmp opțional "URL Verificare Status" (ex: link către portalul primăriei) și "ID Urmărire Extern". Arhitectura trebuie să permită pe viitor rularea unui job de fundal (ex: via N8N sau un worker intern) care să facă scraping/API call pe acel URL și să actualizeze automat statusul în ArchiTools.
|
||||
|
||||
### 3.04 `[ARCHITECTURE]` Autentificare & Identitate (Pregătire)
|
||||
### 3.04 ✅ `[ARCHITECTURE]` Autentificare & Identitate (2026-02-27)
|
||||
|
||||
**Cerințe noi:**
|
||||
|
||||
- **Devansare Prioritate Authentik:** Deoarece funcționalități precum "Responsabil" și "Audit Log" depind de identitatea utilizatorului, integrarea cu Authentik (legat la Domain Controller/Active Directory) devine o prioritate arhitecturală.
|
||||
- **Sincronizare Useri:** Sistemul trebuie să poată citi lista de utilizatori din Authentik/AD pentru a popula dropdown-urile de tip "Responsabil" chiar și pentru utilizatorii care nu s-au logat încă în ArchiTools.
|
||||
- **Devansare Prioritate Authentik:** Integrarea cu Authentik (legat la Domain Controller/Active Directory).
|
||||
- **Sincronizare Useri:** Sistemul poate citi lista de utilizatori din Authentik/AD.
|
||||
|
||||
**Status:** ✅ Done. NextAuth v4 + Authentik OIDC fully configured. Group→role mapping (admin/manager/user) and group→company mapping. Header user menu with login/logout. Env vars hardcoded in docker-compose.yml (Portainer CE limitation). See also Phase 6 below.
|
||||
|
||||
### 3.05 `[BUSINESS]` Email Signature — Automatizare și Branding
|
||||
|
||||
@@ -359,24 +332,30 @@ src/modules/hot-desk/
|
||||
- Echipamentele care au aceste date completate vor fi randate automat în vizualizarea grafică a rack-ului.
|
||||
- La hover pe un echipament din rack, va apărea un tooltip cu detaliile de bază (Nume, IP, Status).
|
||||
|
||||
### 3.09 `[BUSINESS]` Address Book — Tipuri Dinamice
|
||||
### 3.09 ✅ `[BUSINESS]` Address Book — Tipuri Dinamice (2026-02-27)
|
||||
|
||||
**Cerințe noi:**
|
||||
|
||||
- **Tip Contact Dinamic:** Câmpul "Tip" (ex: Client, Furnizor, Instituție) trebuie să devină un câmp de tip "creatable select" (combinație între dropdown și text input). Utilizatorul trebuie să poată scrie un tip nou (ex: "Colaborator Extern"), iar acesta să se salveze automat și să apară în dropdown pentru viitoarele contacte.
|
||||
- **Tip Contact Dinamic:** Câmpul "Tip" devine "creatable select" (dropdown + text input) cu salvare automată.
|
||||
|
||||
### 3.10 `[UI/UX]` Hot Desk — Orientare Vizuală
|
||||
**Status:** ✅ Done. `CreatableTypeSelect` component (input + "+" button), `DEFAULT_TYPE_LABELS` + dynamic types from existing contacts, `ContactType` allows `| string` for custom types.
|
||||
|
||||
### 3.10 ✅ `[UI/UX]` Hot Desk — Orientare Vizuală (2026-02-27)
|
||||
|
||||
**Cerințe noi:**
|
||||
|
||||
- **Punct de Reper (Fereastră):** În vizualizarea grafică a camerei (room layout), trebuie adăugată schematic o fereastră pe peretele din stânga. Acest element vizual va servi ca punct de reper pentru ca utilizatorii să se poată orienta ușor și să înțeleagă care birou este care (ex: "biroul de lângă geam", "biroul de la ușă").
|
||||
- **Punct de Reper (Fereastră):** Fereastră pe stânga, ușă pe dreapta.
|
||||
|
||||
### 3.11 `[BUSINESS]` Password Vault — Câmpuri Noi
|
||||
**Status:** ✅ Done. Window on left wall (sky-blue, "Fereastră"), door on right wall (amber, "Ușă").
|
||||
|
||||
### 3.11 ✅ `[BUSINESS]` Password Vault — Câmpuri Noi (2026-02-27)
|
||||
|
||||
**Cerințe noi:**
|
||||
|
||||
- **Câmp Email:** Adăugarea unui câmp distinct pentru "Email", separat de "Username" (deoarece multe conturi folosesc un email pentru login, dar au și un username separat, sau invers).
|
||||
- **Link Clickabil:** Asigurarea că URL-ul salvat este afișat ca un link clickabil (deschidere în tab nou) direct din lista de parole, pentru acces rapid.
|
||||
- **Câmp Email:** Adăugarea unui câmp distinct pentru "Email", separat de "Username".
|
||||
- **Link Clickabil:** URL afișat ca link clickabil (tab nou) din lista de parole.
|
||||
|
||||
**Status:** ✅ Done. Added `email: string` field to VaultEntry type. Form has email input. URLs rendered as clickable `<a>` links with `target="_blank"`.
|
||||
|
||||
### 3.12 `[BUSINESS]` Mini Utilities — Extindere și Fix-uri
|
||||
|
||||
@@ -530,80 +509,71 @@ AI_DEFAULT_MODEL=claude-sonnet-4-6-20261001
|
||||
|
||||
---
|
||||
|
||||
## PHASE 6 — Authentication (Authentik SSO)
|
||||
## PHASE 6 — Authentication (Authentik SSO) ✅
|
||||
|
||||
> Real users, real permissions. Requires server admin access.
|
||||
> Real users, real permissions. Core auth done, access control pending.
|
||||
|
||||
### 6.01 `[HEAVY]` Authentik OIDC Integration
|
||||
### 6.01 ✅ `[HEAVY]` Authentik OIDC Integration (2026-02-27)
|
||||
|
||||
**What:** Replace stub user with real Authentik SSO.
|
||||
**Status:** ✅ Done. NextAuth v4 + Authentik OIDC provider configured. Group→role mapping (authentik groups → admin/manager/user). Group→company mapping (beletage/urban-switch/studii-de-teren). Cookie-based session. `useAuth()` returns real user. Header shows user name/email + logout. Sign in with Authentik page works.
|
||||
|
||||
- NextAuth.js / Auth.js route handler
|
||||
- OIDC token → user profile resolution
|
||||
- Cookie-based session
|
||||
- `useAuth()` returns real user
|
||||
|
||||
**Server setup required:**
|
||||
|
||||
1. Create OAuth2 app in Authentik (http://10.10.10.166:9100)
|
||||
2. Set redirect URI: `http://10.10.10.166:3000/api/auth/callback/authentik`
|
||||
3. Set env vars: `AUTHENTIK_URL`, `AUTHENTIK_CLIENT_ID`, `AUTHENTIK_CLIENT_SECRET`, `NEXTAUTH_SECRET`
|
||||
|
||||
**User action needed:** Authentik admin credentials.
|
||||
Env vars (hardcoded in docker-compose.yml for Portainer CE):
|
||||
- `NEXTAUTH_URL=https://tools.beletage.ro`
|
||||
- `NEXTAUTH_SECRET`, `AUTHENTIK_CLIENT_ID`, `AUTHENTIK_CLIENT_SECRET`, `AUTHENTIK_ISSUER`
|
||||
|
||||
---
|
||||
|
||||
### 6.02 `[STANDARD]` Module-Level Access Control
|
||||
|
||||
**What:** Implement `canAccessModule()` with role-based rules. FeatureGate checks flag + permission.
|
||||
**Depends on:** 6.01
|
||||
**Depends on:** 6.01 ✅
|
||||
|
||||
---
|
||||
|
||||
### 6.03 `[STANDARD]` Data Visibility Enforcement
|
||||
|
||||
**What:** Filter storage results by `visibility` and `createdBy` fields (already stored on every entity, never enforced).
|
||||
**Depends on:** 6.01
|
||||
**Depends on:** 6.01 ✅
|
||||
|
||||
---
|
||||
|
||||
### 6.04 `[LIGHT]` Audit Logging
|
||||
|
||||
**What:** Log create/update/delete actions with user ID + timestamp. Console initially, later storage/N8N.
|
||||
**Depends on:** 6.01
|
||||
**Depends on:** 6.01 ✅
|
||||
|
||||
---
|
||||
|
||||
## PHASE 7 — Storage Migration (localStorage → Database)
|
||||
## PHASE 7 — Storage Migration (localStorage → Database) — PARTIALLY DONE
|
||||
|
||||
> Multi-user shared data. Requires PostgreSQL + infrastructure changes.
|
||||
> Multi-user shared data. PostgreSQL + Prisma + MinIO client configured.
|
||||
|
||||
### 7.01 `[HEAVY]` PostgreSQL + Prisma Setup
|
||||
### 7.01 ✅ `[HEAVY]` PostgreSQL + Prisma Setup (2026-02-27)
|
||||
|
||||
**What:** Add PostgreSQL container, create Prisma schema for all entities, run migrations.
|
||||
**Infrastructure:** New `postgres` service in `docker-compose.yml`.
|
||||
**What:** PostgreSQL + Prisma ORM setup.
|
||||
**Status:** ✅ Done. Prisma v6.19.2 with PostgreSQL on 10.10.10.166:5432. `KeyValueStore` model. `npx prisma generate` in Dockerfile. `@prisma/client` in dependencies.
|
||||
|
||||
---
|
||||
|
||||
### 7.02 `[HEAVY]` API Storage Adapter
|
||||
### 7.02 ✅ `[HEAVY]` API Storage Adapter (2026-02-27)
|
||||
|
||||
**What:** Create `ApiStorageAdapter` implementing `StorageService`. Use Next.js API routes + Prisma.
|
||||
**Depends on:** 7.01
|
||||
**What:** `DatabaseStorageAdapter` implementing `StorageService` via `/api/storage` route + Prisma.
|
||||
**Status:** ✅ Done. Set `NEXT_PUBLIC_STORAGE_ADAPTER=database` to activate. All 14 modules instantly get DB persistence.
|
||||
|
||||
---
|
||||
|
||||
### 7.03 `[STANDARD]` Data Migration Tool
|
||||
|
||||
**What:** One-time export from localStorage → import to PostgreSQL. Preserve IDs and timestamps.
|
||||
**Depends on:** 7.02
|
||||
**Depends on:** 7.02 ✅
|
||||
|
||||
---
|
||||
|
||||
### 7.04 `[HEAVY]` MinIO File Storage
|
||||
### 7.04 ✅ `[HEAVY]` MinIO File Storage (2026-02-27)
|
||||
|
||||
**What:** Create `MinioAdapter` for file uploads. Migrate base64 attachments to MinIO objects.
|
||||
**MinIO already running** at http://10.10.10.166:9003.
|
||||
**User action needed:** MinIO access key + secret key.
|
||||
**What:** MinIO client configured and tested.
|
||||
**Status:** ✅ Done. MinIO client installed (`minio` npm package). Connected to 10.10.10.166:9002 (API) / 9003 (UI). Bucket `tools` exists. File upload adapter not yet wired to StorageService (MinioAdapter pending).
|
||||
|
||||
---
|
||||
|
||||
@@ -691,16 +661,16 @@ AI_DEFAULT_MODEL=claude-sonnet-4-6-20261001
|
||||
|
||||
## Infrastructure Credentials Needed
|
||||
|
||||
| Service | What | When Needed |
|
||||
| ------------------------ | --------------------------------------- | ------------------- |
|
||||
| **US/SDT Logos** | SVG/PNG logo files | Phase 1 (task 1.01) |
|
||||
| **US/SDT Addresses** | Office addresses for email signature | Phase 1 (task 1.02) |
|
||||
| **Anthropic API Key** | `sk-ant-...` from console.anthropic.com | Phase 4 (task 4.01) |
|
||||
| **OpenAI API Key** | `sk-...` from platform.openai.com | Phase 4 (task 4.01) |
|
||||
| **Authentik Admin** | Login to create OAuth app at :9100 | Phase 5 (task 5.01) |
|
||||
| **MinIO Credentials** | Access key + secret key for :9003 | Phase 6 (task 6.04) |
|
||||
| **PostgreSQL** | New container + password | Phase 6 (task 6.01) |
|
||||
| **Gitea Actions Runner** | Registration token from Gitea admin | Phase 9 (task 9.01) |
|
||||
| Service | What | When Needed | Status |
|
||||
| ------------------------ | --------------------------------------- | ------------------- | ------ |
|
||||
| **US/SDT Logos** | SVG/PNG logo files | Phase 1 (task 1.01) | ✅ Done |
|
||||
| **US/SDT Addresses** | Office addresses for email signature | Phase 1 (task 1.02) | ✅ Done (placeholder) |
|
||||
| **Anthropic API Key** | `sk-ant-...` from console.anthropic.com | Phase 5 (task 5.01) | Pending |
|
||||
| **OpenAI API Key** | `sk-...` from platform.openai.com | Phase 5 (task 5.01) | Pending |
|
||||
| **Authentik Admin** | Login to create OAuth app at :9100 | Phase 6 (task 6.01) | ✅ Done |
|
||||
| **MinIO Credentials** | Access key + secret key for :9003 | Phase 7 (task 7.04) | ✅ Done |
|
||||
| **PostgreSQL** | Database + password | Phase 7 (task 7.01) | ✅ Done |
|
||||
| **Gitea Actions Runner** | Registration token from Gitea admin | Phase 10 (task 10.01) | Pending |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user