- nas-paths.ts: A:\=Arhiva, O:\=Organizare, P:\=Proiecte, T:\=Transfer - toUncPathByIp() / toFileUrlByIp() helpers for DNS failure fallback - shareLabelFor() returns human-readable share name for badges - UI: 'IP' fallback link on hover, badge shows share label - Validation hints updated to show all 4 drive letters - Docs updated: CLAUDE.md, ROADMAP.md, SESSION-LOG.md
41 KiB
ArchiTools — Session Log
Newest sessions first. Each AI session appends an entry at the top.
Session — 2026-02-28c (GitHub Copilot - Claude Opus 4.6)
Context
Continuation of QA improvements. NAS path enhancement: all 4 drives + DNS→IP fallback.
Completed
-
NAS Network Path Attachments (enhanced):
- 4 drive mappings: A:=Arhiva, O:=Organizare, P:=Proiecte, T:=Transfer
NAS_HOST/NAS_IPconstants used consistently across all UNC templates- New helpers:
toUncPathByIp(),toFileUrlByIp(),shareLabelFor() - IP fallback: every network attachment shows an "IP" button on hover that opens via
\\10.10.10.10\...when DNS fails - Badge now shows share label (Proiecte/Arhiva/Organizare/Transfer) instead of generic "NAS"
- Validation hint updated to show all 4 drive letters
-
Documentation updated:
- CLAUDE.md: Registratura v0.3.0, NAS drives in module table, NAS row in integrations table
- ROADMAP.md: Registratura version bump, new task 3.03b with full feature list
- SESSION-LOG.md: This session entry
Files Changed
- Modified:
src/config/nas-paths.ts(4 drives, IP fallback helpers, shareLabelFor) - Modified:
src/modules/registratura/components/registry-entry-form.tsx(IP fallback link, share badge, validation hints) - Modified:
CLAUDE.md,ROADMAP.md,SESSION-LOG.md
Build
npx next build— zero errors- Pushed to main → Portainer auto-deploy
Session — 2026-02-28b (GitHub Copilot - Claude Opus 4.6)
Context
User-requested improvements from QA testing: Registratura UX enhancements + Password Vault category rework.
Completed
-
Registratura — Thread Explorer ("Fire conversație" tab):
- New
thread-explorer.tsxcomponent with full thread timeline view - Thread building via BFS from threadParentId chains
- Stats cards (total/active/completed/average duration)
- Search + status filter (toate/active/finalizate)
- Expandable timeline with directional nodes (blue=intrat, orange=ieșit)
- Gap day indicators showing "la noi" vs "la instituție" between entries
- Export to text report per thread with downloadReport()
- Integrated as new tab in registratura-module.tsx
- New
-
Registratura — Interactive I/O Toggle:
- Replaced direction dropdown with visual button group (blue Intrat / orange Ieșit)
- Uses ArrowDownToLine/ArrowUpFromLine icons from lucide-react
- Full mutual-exclusive toggle with cn() conditional styling
-
Registratura — Doc Type UX Fix:
- Document types now sorted alphabetically by label
- After adding custom type, it's immediately selected (no manual re-selection needed)
- Uses localCustomTypes state to track session-added types
-
Registratura — AC Validity Tracker:
- New
ACValidityTrackingtype system (phases, execution duration, required docs, reminders) - New
ac-validity-tracker.tsxcomponent (~400 lines) - Full AC lifecycle: issuance → validity (12mo) → execution → extension/abandonment/expiry
- Required documents checklist (CF notation, newspaper, site panel) with progress bar
- Extension request workflow (45 working days before expiry using addWorkingDays)
- Monthly reminders with snooze capability
- Pre-expiry warnings (30/60/90 days)
- Integrated into registry-entry-form.tsx
- New
-
Password Vault → "Parole Uzuale" (v0.3.0):
- Renamed module from "Seif Parole" to "Parole Uzuale" everywhere (config, i18n, flags)
- New categories: WiFi, Portale Primării, Avize Online, PIN Semnătură, Software, Echipament HW (replaced server/database/api)
- Category icons (Globe, Mail, Wifi, Building2, FileCheck2, Fingerprint, Monitor, HardDrive) throughout
- WiFi QR code: real QR generated on canvas via
qrcodelib, scanabil direct cu telefonul, cu butoane Copiază imaginea + Descarcă PNG - Context-aware form: PIN vs password label, hides email for WiFi/PIN, hides URL for WiFi, hides generator for PIN
- Dynamic stat cards showing top 3 categories by entry count
- Removed encryption banner per user request
- Category descriptions as helper text in form
Files Changed
- New:
src/modules/registratura/components/thread-explorer.tsx,src/modules/registratura/components/ac-validity-tracker.tsx - Modified:
src/modules/registratura/types.ts,src/modules/registratura/components/registratura-module.tsx,src/modules/registratura/components/registry-entry-form.tsx - Modified:
src/modules/password-vault/types.ts,src/modules/password-vault/config.ts,src/modules/password-vault/components/password-vault-module.tsx - Modified:
src/config/flags.ts,src/core/i18n/locales/ro.ts
Build
npx next build— zero errors, all 23 routes OK- Commit:
3abf0d1 - Pushed to main → Portainer auto-deploy
Session — 2026-02-28 (GitHub Copilot - Claude Opus 4.6)
Context
Final Phase 3 implementation (tasks 3.03, 3.13, 3.15) + QA preparation + documentation update.
Completed
-
Task 3.03 ✅ Registratura — Termene Legale Îmbunătățiri:
- Deadline audit log (DeadlineAuditEntry) on create/resolve
- Expandable "Istoric modificări" on deadline cards
- Recipient registration fields (nr + date, ieșit only)
- Document expiry tracking (expiryDate + expiryAlertDays)
- Web scraping prep fields (externalStatusUrl, externalTrackingId)
- 6 stat cards + amber/red alert banners
- Alert count badge on tab header
- New deadline type: prelungire-cu (15 calendar days, tacit approval)
- Commit:
99fbddd
-
Task 3.13 ✅ Tag Manager — ManicTime Sync:
manictime-service.ts: Parser/serializer for Tags.txt format, line classifier, sync planner/api/manictimeroute: GET (read + sync plan), POST (pull/push/both), Prisma integrationmanictime-sync-panel.tsx: Connection check, stats grid, import/export/full sync buttons with confirmation- Docker: MANICTIME_TAGS_PATH env var,
/mnt/manictimevolume mount - Tag Manager v0.2.0
- Commit:
11b35c7
-
Task 3.15 ✅ AI Tools — Extindere și Integrare:
- Prompt Generator v0.2.0: search bar + target type filter + 4 new image templates (18 total)
/api/ai-chatroute: multi-provider (OpenAI/Claude/Ollama/demo), Romanian arch office system promptuse-chat.ts: sendMessage() with real API, sending state, providerConfig, updateSession()- AI Chat UI: provider badge (Wifi/WifiOff), Bot icon, spinner, config banner
- AI Chat + Tag Manager: project selector via useTags('project'), session linking
- Docker: AI_PROVIDER, AI_API_KEY, AI_MODEL, AI_BASE_URL, AI_MAX_TOKENS env vars
- AI Chat v0.2.0, Prompt Generator v0.2.0
- Commit:
d34c722
-
QA Preparation:
- Created
QA-CHECKLIST.md— comprehensive testing checklist for all Phase 3 features (~120 items) - Covers: Registratura, Tag Manager, IT Inventory, Address Book, Password Vault, Prompt Generator, AI Chat, Hot Desk, Email Signature, Dashboard, cross-cutting (auth, performance, theme)
- Created
-
Documentation Update:
- CLAUDE.md: updated module table (versions, new features), updated integrations table (AI Chat, Vault encryption, ManicTime)
- ROADMAP.md: updated status table (all 14 modules COMPLETE), marked 3.03/3.13/3.15 done, updated Phase 5 to reflect 3.15 overlap
- SESSION-LOG.md: this entry
- SESSION-GUIDE.md: added QA/Bug Fix session prompt
Commits
99fbdddfeat(3.03): Registratura Termene Legale improvements11b35c7feat(3.13): Tag Manager ManicTime bidirectional syncd34c722feat(3.15): AI Tools — extindere si integrarea25cc40docs: update ROADMAP.md — mark 3.15 complete- (this session) docs: QA checklist + full documentation update
Phase Status
- Phase 1: 13/13 ✅
- Phase 2: 1/1 ✅ (Hot Desk)
- Phase 3: 15/15 ✅ (all requirements implemented)
- Phase 6: 1/4 done (Authentik SSO)
- Phase 7: 3/4 done (PostgreSQL + Prisma + MinIO client)
- Next: User QA testing → bug fixes → Phase 4 (Quality & Testing)
Session — 2026-02-27 late night #2 (GitHub Copilot - Claude Opus 4.6)
Context
Performance investigation: Registratura loading extremely slowly with only 6 entries. Rack numbering inverted.
Root Cause Analysis — Findings
CRITICAL BUG: N+1 Query Pattern in ALL Storage Hooks
The DatabaseStorageAdapter.list() method fetches ALL items (keys + values) from PostgreSQL in one HTTP request, but discards the values and returns only the key names. Then every hook calls storage.get(key) for EACH key individually — making a separate HTTP request + DB query per item.
With 6 registry entries + ~10 contacts + ~20 tags, the Registratura page fired ~40 sequential HTTP requests on load (1 list + N gets per hook × 3 hooks). Each request goes through: browser → Next.js API route → Prisma → PostgreSQL → back. This is a textbook N+1 query problem.
Additional issues found:
addEntry()calledgetAllEntries()for number generation, thenrefresh()calledgetAllEntries()again → double-fetchcloseEntry()calledupdateEntry()(which refreshes), then manually calledrefresh()again → double-refresh- Every single module hook had the same pattern (11 hooks total)
- Rack visualization rendered U1 at top instead of bottom
Fix Applied
Strategy: Replace list() + N × get() with a single exportAll() call that fetches all items in one HTTP request and filters client-side.
Files fixed (13 total):
src/modules/registratura/services/registry-service.ts— addedexportAlltoRegistryStorageinterface, rewrotegetAllEntriessrc/modules/registratura/hooks/use-registry.ts—addEntryuses optimistic local state update instead of double-refresh;closeEntrybatches saves withPromise.all+ single refreshsrc/modules/address-book/hooks/use-contacts.ts—exportAllbatch loadsrc/modules/it-inventory/hooks/use-inventory.ts—exportAllbatch loadsrc/modules/password-vault/hooks/use-vault.ts—exportAllbatch loadsrc/modules/word-templates/hooks/use-templates.ts—exportAllbatch loadsrc/modules/prompt-generator/hooks/use-prompt-generator.ts—exportAllbatch loadsrc/modules/hot-desk/hooks/use-reservations.ts—exportAllbatch loadsrc/modules/email-signature/hooks/use-saved-signatures.ts—exportAllbatch loadsrc/modules/digital-signatures/hooks/use-signatures.ts—exportAllbatch loadsrc/modules/ai-chat/hooks/use-chat.ts—exportAllbatch loadsrc/core/tagging/tag-service.ts— usesstorage.export()instead of N+1src/modules/it-inventory/components/server-rack.tsx— reversed slot rendering (U1 at bottom)
Performance impact: ~90% reduction in HTTP requests on page load. Registratura: from ~40 requests to 3 (one per namespace: registratura, address-book, tags).
Prevention Rules (for future development)
NEVER use the
storage.list()+ loopstorage.get()pattern. Always usestorage.exportAll()to load all items in a namespace, then filter client-side. This is the #1 performance pitfall in the storage layer.
Commits
c45a30eperf: fix N+1 query pattern across all modules + rack numberingc22848bperf(registratura): lightweight API mode strips base64 attachments from list
Second Root Cause — Base64 Attachment Payloads (found after first fix)
After deploying the N+1 fix, Registratura STILL loaded in 2+ minutes. Deeper investigation revealed:
Root cause: RegistryAttachment.data stores full base64-encoded files directly in JSON. A 5MB PDF = ~6.7MB base64. With 6 entries having attachments, /api/storage?namespace=registratura returned 30-60MB of JSON on every page load.
Fix: Added ?lightweight=true parameter to the API route. Server-side stripHeavyFields() recursively strips large data and fileData string fields (>1KB) from JSON, replacing with "__stripped__". List loading now transfers ~100KB. Full entry data loaded on-demand only when editing (single entry = manageable).
Additional files:
src/app/api/storage/route.ts—stripHeavyFields()+ lightweight paramsrc/core/storage/types.ts—export()accepts{ lightweight?: boolean }src/core/storage/adapters/database-adapter.ts— passes flag to APIsrc/modules/registratura/services/registry-service.ts—getAllEntries()useslightweight: true, newgetFullEntry()src/modules/registratura/hooks/use-registry.ts— exportsloadFullEntry()src/modules/registratura/components/registratura-module.tsx—handleEditloads full entry on demand
Session — 2026-02-27 late night (GitHub Copilot - Claude Opus 4.6)
Context
Continued Phase 3. Fixed critical Registratura bugs reported by user + implemented task 3.08 IT Inventory improvements.
Completed
-
Registratura Bug Fixes (6 issues):
- File upload loading feedback — Added
uploadingCountstate tracking FileReader progress. Shows spinner + "Se încarcă X fișiere…" next to Atașamente label. Submit button shows "Se încarcă fișiere…" and is disabled while files load. - Duplicate registration numbers — Root cause:
generateRegistryNumbercounted entries instead of parsing max existing number. Fix: parse actual number from regexPREFIX-NNNN/YYYY, find max, +1. Also:addEntrynow fetches fresh entries from storage before generating number (eliminates race condition from stale state). - Form submission lock — Added
isSubmittingstate. Submit button disabled + shows Loader2 spinner during save. Prevents double-click creating multiple entries. - Unified close/resolve flow — Added
ClosureResolutiontype (finalizat/aprobat-tacit/respins/retras/altele) toClosureInfo. CloseGuardDialog now has resolution selector matching deadline resolve options. ClosureBanner shows resolution badge. - Backdating support — Date field renamed "Data document" with tooltip explaining retroactive registration. Added
registrationDatefield on RegistryEntry (auto = today). Registry table shows "(înr. DATE)" when registrationDate differs from document date. Numbers remain sequential regardless of document date. - "Actualizează" button feedback — Submit button now shows loading spinner when saving, disabled during upload.
onSubmitprop acceptsPromise<void>for proper async tracking.
- File upload loading feedback — Added
-
Task 3.08 — IT Inventory Improvements:
- Rewrote
types.ts: dynamicInventoryItemType(string-based),DEFAULT_EQUIPMENT_TYPESwith server/switch/ups/patch-panel,RACK_MOUNTABLE_TYPESset, new "rented" status,STATUS_LABELSexport - Removed deprecated fields: assignedTo, assignedToContactId, purchaseDate, purchaseCost, warrantyExpiry
- Added rack fields:
rackPosition(1–42),rackSize(1–4U) - New
server-rack.tsx: 42U rack visualization with color-coded status slots, tooltips, occupied/empty rendering - Rewrote
it-inventory-module.tsx: tabbed UI (Inventar + Rack 42U), 5 stat cards with purple pulse for rented, inline custom type creation ("Tip nou" input), conditional rack position fields for RACK_MOUNTABLE_TYPES, simplified form - Fixed search filter in
use-inventory.ts: removedassignedToreference, added rackLocation/location
- Rewrote
Files Modified
src/modules/registratura/types.ts— AddedClosureResolutiontype,registrationDatefield on RegistryEntry,resolutionfield on ClosureInfosrc/modules/registratura/services/registry-service.ts— RewrotegenerateRegistryNumberto parse max existing number via regexsrc/modules/registratura/hooks/use-registry.ts—addEntryfetches fresh entries before generating numbersrc/modules/registratura/components/registry-entry-form.tsx— Upload progress tracking, submission lock, date tooltip, async submitsrc/modules/registratura/components/registry-table.tsx— "Data doc." header, shows registrationDate when differentsrc/modules/registratura/components/close-guard-dialog.tsx— Resolution selector addedsrc/modules/registratura/components/closure-banner.tsx— Resolution badge displaysrc/modules/it-inventory/types.ts— Complete rewrite: dynamic types, rented status, rack fieldssrc/modules/it-inventory/hooks/use-inventory.ts— Updated imports, fixed search filtersrc/modules/it-inventory/components/it-inventory-module.tsx— Complete rewrite: tabbed UI, dynamic types, rack fieldssrc/modules/it-inventory/components/server-rack.tsx— NEW: 42U rack visualization
Commits
8042df4fix(registratura): prevent duplicate numbers, add upload progress, submission lock, unified close/resolve, backdating support346e40dfeat(it-inventory): dynamic types, rented status, rack visualization, simplified form
Session — 2026-02-27 night (GitHub Copilot - Claude Opus 4.6)
Context
Continued Phase 3 refinements. Picked task 3.02 (HEAVY) — Registratura bidirectional integration and UX improvements.
Completed
- 3.02 ✅ Registratura — Integrare și UX:
- Dynamic document types: DocumentType changed from enum to string-based. Default types include "Apel telefonic" and "Videoconferință". Inline "Tip nou" input with Plus button auto-creates Tag Manager tags under category "document-type". Form select pulls from both defaults and Tag Manager.
- Bidirectional Address Book: Sender/Recipient/Assignee autocomplete shows "Creează contact" button when typed name doesn't match any existing contact. QuickContactDialog popup creates contact in Address Book with Name (required), Phone (optional), Email (optional).
- Simplified status: Removed Status dropdown. Replaced with Switch toggle — default is "Deschis" (open). Toggle to "Închis" when done. No "deschis" option in UI, everything is implicitly open.
- Internal deadline tooltip: Added Info icon tooltips on "Termen limită intern" (explaining it's not a legal deadline), "Închis" (explaining default behavior), and "Responsabil" (explaining ERP prep).
- Responsabil (Assignee) field: New field with contact autocomplete + quick-create. Separate
assigneeandassigneeContactIdon RegistryEntry type. Shown in registry table as "Resp." column with User icon. - Entry threads & branching: New
threadParentIdfield on RegistryEntry. Thread parent selector with search. ThreadView component showing parent → current → children tree with direction badges, siblings (branches), and click-to-navigate. Thread icon (GitBranch) in registry table. Supports one-to-many branching (one entry generates multiple outgoing replies).
Files Created
src/modules/registratura/components/quick-contact-dialog.tsx— Rapid contact creation popup from Registraturasrc/modules/registratura/components/thread-view.tsx— Thread tree visualization (parent, current, siblings, children)
Files Modified
src/modules/registratura/types.ts— Dynamic DocumentType, DEFAULT_DOC_TYPE_LABELS, new fields (assignee, assigneeContactId, threadParentId)src/modules/registratura/index.ts— Export new constantssrc/modules/registratura/components/registry-entry-form.tsx— Complete rewrite: dynamic doc types, contact quick-create, Switch status, Responsabil field, thread parent selector, tooltipssrc/modules/registratura/components/registratura-module.tsx— Wired useTags + useContacts, handleCreateContact + handleCreateDocType callbacks, thread navigationsrc/modules/registratura/components/registry-table.tsx— Dynamic doc type labels, Resp. column, thread iconsrc/modules/registratura/components/registry-filters.tsx— Uses DEFAULT_DOC_TYPE_LABELS from types.tsROADMAP.md— Marked 3.02 as done
Notes
- Existing data is backward-compatible: old entries without
assignee,threadParentIdrender fine (fields are optional) - Quick contact creation sets type to "collaborator" and adds note "Creat automat din Registratură"
- DocumentType is now
stringbut retains defaults viaDEFAULT_DOCUMENT_TYPESarray
Session — 2026-02-27 evening (GitHub Copilot - Claude Opus 4.6)
Context
Continued from earlier session (Gemini 3.1 Pro got stuck on Authentik testing). This session focused on fixing deployment pipeline, then implementing Phase 3 visual/UX tasks + infrastructure documentation.
Completed
-
Deployment Pipeline Fixes:
- Fixed Dockerfile: added
npx prisma generatebefore build step - Fixed docker-compose.yml: hardcoded all env vars (Portainer CE can't inject env vars)
- Moved
@prisma/clientfrom devDependencies to dependencies (runtime requirement) - Created
stack.env(later abandoned — Portainer CE doesn't parse it reliably) - Confirmed auth flow works end-to-end on production (tools.beletage.ro)
- Fixed Dockerfile: added
-
3.01 ✅ Header & Navigation:
- Added 3 company logos (BTG, US, SDT) with theme-aware variants (light/dark)
- Interactive mini-game: click animations (spin/bounce/ping), secret combo BTG→US→SDT triggers confetti
- Logo layout: flex-1 centered row with dual-render (both light+dark images, CSS toggle) to fix SSR hydration
- "ArchiTools" text centered below logos, links to Dashboard
- Created animated theme toggle: Sun/Moon lucide icons in sliding knob, gradient sky background, stars (dark), clouds (light)
-
3.04 ✅ Authentik Integration:
- Already done by previous session (Gemini) — confirmed working. Marked as done.
-
3.09 ✅ Address Book Dynamic Types:
CreatableTypeSelectcomponent (dropdown + text input + "+" button)ContactTypeunion type extended with| stringfor custom types- Dynamic
allTypesderived from existing contacts' types
-
3.10 ✅ Hot Desk Window:
- Window on left wall (sky-blue, "Fereastră"), door on right wall (amber, "Ușă")
-
3.11 ✅ Password Vault Email + Link:
- Added
email: stringfield to VaultEntry type + form - URLs rendered as clickable
<a>links withtarget="_blank"
- Added
-
Documentation Updated:
- CLAUDE.md: stack table (Prisma/PG/NextAuth/MinIO), 14 modules, infra ports, deployment pipeline, integration status
- ROADMAP.md: marked Phase 2, 3.01, 3.04, 3.09, 3.10, 3.11, Phase 6 (6.01), Phase 7 (7.01, 7.02, 7.04) as done
- SESSION-LOG.md: this entry
Files Created
src/shared/components/common/theme-toggle.tsx— Animated sun/moon theme toggle
Files Modified
Dockerfile— Addednpx prisma generatedocker-compose.yml— All env vars hardcodedpackage.json— @prisma/client moved to dependenciessrc/config/companies.ts— BTG logo paths + fixed US/SDT dark variantssrc/shared/components/layout/sidebar.tsx— Logo redesign + mini-gamesrc/shared/components/layout/header.tsx— Theme toggle replacementsrc/modules/password-vault/types.ts— Added email fieldsrc/modules/password-vault/components/password-vault-module.tsx— Email + clickable URLssrc/modules/address-book/types.ts— Dynamic ContactTypesrc/modules/address-book/components/address-book-module.tsx— CreatableTypeSelectsrc/modules/hot-desk/components/desk-room-layout.tsx— Window + door landmarks
Notes
- Portainer CE requires manual "Pull and redeploy" — no auto-rebuild on webhook
- "Re-pull image" checkbox only needed for base image updates (node:20-alpine), not for code changes
- Logo SVGs have very different aspect ratios (BTG ~7:1, US ~6:1, SDT ~3:1) — using flex-1 min-w-0 to handle this
- Theme toggle:
resolvedThemefrom next-themes isundefinedon SSR first render — must usemountedstate guard
Session — 2026-02-27 (GitHub Copilot - Gemini 3.1 Pro)
Completed
-
Etapa 2: Autentificare (Authentik / Active Directory)
- Instalat
next-authpentru gestionarea sesiunilor în Next.js. - Configurat provider-ul OIDC pentru Authentik (
src/app/api/auth/[...nextauth]/route.ts). - Mapare automată a grupurilor din Authentik către rolurile interne (
admin,manager,user) și companii (beletage,urban-switch,studii-de-teren). - Actualizat
AuthProviderpentru a folosiSessionProviderdinnext-auth, cu fallback pe un user de test în modul development. - Adăugat meniu de utilizator în Header (colțul dreapta-sus) cu opțiuni de Login/Logout și afișarea numelui/email-ului.
- Adăugat variabilele de mediu necesare în
.env(AUTHENTIK_CLIENT_ID,AUTHENTIK_CLIENT_SECRET,AUTHENTIK_ISSUER).
- Instalat
-
Etapa 1: Fundația (Baza de date & Storage)
- Instalat și configurat Prisma ORM (v6) pentru conectarea la PostgreSQL.
- Creat schema de bază de date
KeyValueStorepentru a înlocuilocalStoragecu o soluție persistentă și partajată. - Rulat prima migrare (
npx prisma db push) pe serverul de producție (10.10.10.166:5432). - Creat
DatabaseStorageAdaptercare implementează interfațaStorageServiceși comunică cu baza de date printr-un nou API route (/api/storage). - Instalat și configurat clientul MinIO pentru stocarea viitoare a fișierelor (conectat cu succes la bucket-ul
toolspe portul9002). - Actualizat
StorageProviderpentru a folosi automat baza de date cândNEXT_PUBLIC_STORAGE_ADAPTER="database". - Verificat build-ul aplicației (
npx next builda trecut cu succes, zero erori).
Notes
- Toate cele 14 module beneficiază acum instantaneu de persistență reală în baza de date PostgreSQL, fără a fi necesară rescrierea logicii lor interne.
- Autentificarea este pregătită. Urmează configurarea aplicației în interfața de admin Authentik.
Session — 2026-02-26 (GitHub Copilot - Gemini 3.1 Pro)
Completed
- Phase 3: Replanificare Detaliată (Ideation & Requirements)
- Added a new Phase 3 in
ROADMAP.mdto track detailed requirements before implementation. - Shifted subsequent phases (Quality & Testing became Phase 4, etc.).
- Documented new requirements for Header/Logos (mini-game, larger size, dashboard link).
- Documented new requirements for Registratura (bidirectional Tag Manager & Address Book links, simplified status, internal deadline clarification).
- Documented noile cerințe pentru Termene Legale (deadline starts from recipient registration date, new fields, alerts, tacit approval).
- Rafinat cerințele: salvarea tipurilor noi în categoria "Registratura" (pentru a include apeluri/video), pregătire câmp "Responsabil" pentru integrare viitoare cu ERP, generare declarație prin integrare cu Word Templates, adăugare "Thread-uri" (legături intrare-ieșire) și istoric modificări termene. - Adăugat conceptul de "Branching" la thread-uri (o intrare generează mai multe ieșiri) cu UI simplificat.
- Adăugat secțiunea 3.04 pentru a devansa prioritatea integrării Authentik (AD/Domain Controller), necesară pentru Audit Log și câmpul "Responsabil".
- Adăugat sistem de urmărire a valabilității documentelor (ex: expirare CU/AC) cu alerte de reamintire.
- Adăugat pregătire arhitecturală (câmpuri URL/ID) pentru viitoare integrări de web scraping/verificare automată a statusului pe portaluri externe.
- Documentat cerințe noi pentru Email Signature: sincronizare AD (precompletare date), bannere promoționale gestionate centralizat, slider pentru dimensiunea logo-ului și elemente grafice personalizate (icoane adresă/telefon) distincte pentru Urban Switch și Studii de Teren.
- Documentat cerințe noi pentru Word Templates: redenumire în "Template Library" (suport pentru Excel, Archicad, DWG), versionare automată (buton "Revizie Nouă" cu istoric), și clarificare UX (ascunderea secțiunii de placeholders pentru fișiere non-Word, rularea automată a extracției în fundal pentru Word, separare clară între upload fișier și link extern).
- Documentat cerințe noi pentru Digital Signatures: eliminare câmpuri inutile (inițiale, expirare, statut, note), suport nativ pentru încărcare
.tiff(cu preview client-side), organizare pe subcategorii (ex: experți, verificatori) și opțiuni noi de descărcare (original, Word gol cu imagine, PDF gol cu imagine). - Documentat cerințe noi pentru IT Inventory: eliminare câmpuri financiare/atribuire (atribuit, data/cost achiziție, garanție), adăugare tipuri dinamice direct din formular, adăugare status "Închiriat" cu animație vizuală (puls/glow), și adăugare vizualizare grafică interactivă pentru un Rack de servere (42U) cu mapare automată a echipamentelor și detalii la hover.
- Documentat cerințe noi pentru Address Book: transformarea câmpului "Tip" într-un dropdown permisiv (creatable select) care permite adăugarea și salvarea de tipuri noi direct din formular.
- Documentat cerințe noi pentru Hot Desk: adăugarea unui punct de reper vizual (o fereastră pe peretele din stânga) în schema camerei pentru a facilita orientarea utilizatorilor.
- Documentat cerințe noi pentru Password Vault: adăugarea unui câmp distinct pentru "Email" (separat de Username) și transformarea URL-ului salvat într-un link clickabil direct din listă.
- Documentat cerințe noi pentru Mini Utilities: transformare numere în litere (pentru contracte/facturi), convertoare bidirecționale (Suprafețe, U-R), fix pentru iframe-ul MDLPA, îmbunătățiri majore la PDF Reducer (drag&drop, compresie extremă tip iLovePDF, remove protection, PDF/A), și tool nou pentru conversie DWG în DXF.
- Documentat cerințe noi pentru Tag Manager: sincronizare bidirecțională cu fișierul
Tags.txtde pe serverul ManicTime (\\time\tags\) și creare automată de backup-uri versionate la fiecare modificare. - Documentat cerințe noi pentru Password Vault: criptare reală a parolelor în baza de date, eliminarea warning-ului de securitate, și studierea integrării cu Passbolt (API).
- Documentat cerințe noi pentru Prompt Generator: adăugare bară de căutare (Search) și șabloane noi pentru generare de imagini (Midjourney/Stable Diffusion).
- Documentat cerințe noi pentru AI Chat & Media: activarea modulului de chat cu un API real (OpenAI/Anthropic/Ollama), integrare cu Tag Manager pentru context pe proiect, interfață node-based (infinite canvas) pentru generatoare media, și un nod avansat de interpretare 3D a imaginilor 2D (tip viewport interactiv).
- Documentat cerințe noi pentru Storage & Arhitectură (Prioritate 0): devansarea migrării de la
localStoragela o soluție robustă (MinIO pentru fișiere + PostgreSQL/Prisma pentru date) pentru a asigura persistența, securitatea și partajarea datelor între toți utilizatorii.
- Added a new Phase 3 in
Notes
- No code changes made. Only documentation updated.
- Faza 3 (Ideation & Requirements) este complet documentată. Urmează planificarea concretă a execuției.
Session — 2026-02-19 (GitHub Copilot - Claude Sonnet 4.6) [continued 2]
Completed
-
Task 1.12: Registratura — Linked-Entry Selector Search ✅
- Added search input (by number, subject, sender) to
registry-entry-form.tsx - Removed
.slice(0, 20)cap — all entries now searchable - Chip labels now show truncated subject alongside entry number
- Commit:
cd4b0de
- Added search input (by number, subject, sender) to
-
Task 1.13: Word XML — Remove POT/CUT Auto-Calculation ✅
- Removed
computeMetricsfromXmlGeneratorConfigtype,generateCategoryXml,generateAllCategories,downloadZipAll,useXmlConfig,XmlSettings,WordXmlModule - Removed POT/CUT auto-injection logic entirely; fields can still be added manually
- Removed unused
Switchimport fromxml-settings.tsx - Commit:
eaca24a
- Removed
Notes
- Phase 1 (13 tasks) now fully complete ✅
- Next: Phase 2 — Hot Desk module (new module from scratch)
Completed
- Task 1.11: Dashboard — Activity Feed + KPI Panels ✅
- Created
src/modules/dashboard/hooks/use-dashboard-data.ts - Scans all
architools:*localStorage keys directly (no per-module hooks needed) - Activity feed: last 20 items sorted by
updatedAt, detects creat/actualizat, picks best label field - KPI grid: registratura this week, open dosare, deadlines this week, overdue (red if >0), new contacts this month, active IT equipment
- Replaced static Quick Stats with live KPI panels in
src/app/page.tsx - Relative timestamps in Romanian via
Intl.RelativeTimeFormat - Build passes zero errors
- Created
Commits
- (this session) feat(dashboard): activity feed and KPI panels
Notes
- Build verified:
npx next build→ ✓ Compiled successfully - Next task: 1.12 — Registratura linked-entry selector fix
Session — 2026-02-19 (GitHub Copilot - Claude Sonnet 4.6)
Completed
-
Task 1.09: Address Book — vCard Export + Registratura Reverse Lookup ✅
- Created
src/modules/address-book/services/vcard-export.ts— generates vCard 3.0 with all contact fields - Download icon button on card hover → triggers
.vcffile download - FileText icon button → opens
ContactDetailDialogwith full info + Registratura table - Registratura reverse lookup uses
allEntries(bypasses active filters) - Build passes zero errors
- Created
-
Task 1.10: Word Templates — Placeholder Auto-Detection ✅
- Created
src/modules/word-templates/services/placeholder-parser.ts - Reads
.docx(ZIP) via JSZip, scans allword/*.xmlfiles for{{placeholder}}patterns - Handles Word’s split-run encoding by checking both raw XML and tag-stripped text
- Form: “Alege fișier .docx” button (local file picker, CORS-free) auto-populates placeholders field
- Form: Wand icon next to URL field tries URL-based fetch detection
- Spinner during parsing, error message if detection fails
- Build passes zero errors
- Created
Commits
da33dc9feat(address-book): vCard export and Registratura reverse lookup67fd888docs: mark task 1.09 complete- (this session) feat(word-templates): placeholder auto-detection from .docx via JSZip
Notes
- Build verified:
npx next build→ ✓ Compiled successfully - Next task: 1.11 — Dashboard Activity Feed + KPI Panels
Session — 2026-02-19 (GitHub Copilot - Claude Sonnet 4.6) [earlier]
Completed
- Task 1.09: Address Book — vCard Export + Registratura Reverse Lookup ✅
- Created
src/modules/address-book/services/vcard-export.ts— generates vCard 3.0 (.vcf) with all contact fields - Added Download icon button on contact card hover → triggers
.vcffile download - Added FileText (detail) icon button → opens
ContactDetailDialog ContactDetailDialogshows full contact info, contact persons, notes, and scrollable Registratura table- Registratura reverse lookup uses
allEntries(bypasses active filters) and matchessenderContactIdorrecipientContactId - Build passes zero errors
- Created
Commits
da33dc9feat(address-book): vCard export and Registratura reverse lookup
Notes
- Build verified:
npx next build→ ✓ Compiled successfully - Push pending — see below
- Next task: 1.10 — Word Templates Placeholder Auto-Detection
Session — 2026-02-19 (GitHub Copilot - Haiku 4.5)
Completed
-
Task 1.07: Password Vault — Company Scope + Strength Meter ✅
- Added
company: CompanyIdfield to VaultEntry type - Implemented password strength indicator (4 levels: weak/medium/strong/very strong) with visual progress bar
- Strength calculation based on length + character diversity (uppercase/lowercase/digits/symbols)
- Updated form with company selector dropdown (Beletage/Urban Switch/Studii de Teren/Grup)
- Meter updates live as password is typed
- Build passes zero errors
- Added
-
Task 1.08: IT Inventory — Link assignedTo to Address Book ✅
- Added
assignedToContactId?: stringfield to InventoryItem type - Implemented contact autocomplete in assignment field (searches Address Book)
- Shows up to 5 matching contacts with name and company
- Clicking a contact fills both display name and ID reference
- Search filters by contact name and company
- Placeholder text "Caută după nume..." guides users
- Build passes zero errors
- Added
Commits
b96b004feat(password-vault): add company scope and password strength metera49dbb2feat(it-inventory): link assignedTo to Address Book contacts with autocomplete
Notes
- Build verified:
npx next build→ ✓ Compiled successfully - Push completed: Changes deployed to main via Gitea webhook → Portainer auto-redeploy triggering
- Ready to test on production: http://10.10.10.166:3000/password-vault and http://10.10.10.166:3000/it-inventory
Session — 2026-02-18 (GitHub Copilot - Haiku 4.5)
Completed
- Task 1.01: Email Signature Logo Files ✅
- Verified all 4 logo files exist with valid SVG content: logo-us-dark.svg, logo-us-light.svg, logo-sdt-dark.svg, logo-sdt-light.svg
- No action needed — logos are already present and valid
- Task 1.02: Email Signature Address Toggle for US/SDT ✅
- Added address toggle UI for Urban Switch and Studii de Teren companies (like Beletage already has)
- Created US_ADDRESSES and SDT_ADDRESSES constants in
company-branding.ts - Updated
signature-configurator.tsxto show address selector for US and SDT - Both companies currently configured with Str. Unirii address; user can update when confirmed
- Build passes zero errors
Commits
1db61d8feat(email-signature): add address toggles for Urban Switch and Studii de Teren
Notes
- Full npm install and build verification completed
- Ready to move to task 1.03 (Prompt Generator architecture templates) after user approval
- Set up git with AI Assistant user for commits
Session — 2026-02-18 (Claude Opus 4.6)
Completed
- Registratura Legal Deadline Tracking — Full implementation:
- 9 new files: working-days.ts (Romanian holidays + Orthodox Easter), deadline-catalog.ts (16 deadline types), deadline-service.ts, use-deadline-filters.ts, deadline-card.tsx, deadline-add-dialog.tsx, deadline-resolve-dialog.tsx, deadline-table.tsx, deadline-dashboard.tsx
- 6 modified files: types.ts, use-registry.ts, registratura-module.tsx (tabbed), registry-entry-form.tsx (inline deadlines), registry-table.tsx (clock badge), index.ts
- Features: calendar/working days, backward deadlines, chain deadlines, tacit approval, color-coded status
- CLAUDE.md — Created with full project context, architecture, conventions, model recommendations
- ROADMAP.md — Created with 9 phases, 35+ tasks from xlsx gap analysis, multi-provider model table
- SESSION-GUIDE.md — Created with start/resume prompts, git workflow, file update rules
Commits
bb01268feat(registratura): add legal deadline tracking system (Termene Legale)d6a5852docs: add ROADMAP.md with detailed future task planb1df15bdocs: rewrite ROADMAP.md with complete xlsx gap analysis + multi-model recommendations- (this session) docs: add SESSION-GUIDE.md + SESSION-LOG.md
Notes
- Build passes with zero errors
- Dev server on localhost:3000 shows tabs correctly
- Production at 10.10.10.166:3000 requires Portainer redeploy after push
- The
app_modules_overview.xlsxis in the repo root but not committed (it's a reference file) - No tasks from ROADMAP.md Phase 1+ have been started yet — next session should begin with task 1.01
Completed
- Registratura Legal Deadline Tracking — Full implementation:
- 9 new files: working-days.ts (Romanian holidays + Orthodox Easter), deadline-catalog.ts (16 deadline types), deadline-service.ts, use-deadline-filters.ts, deadline-card.tsx, deadline-add-dialog.tsx, deadline-resolve-dialog.tsx, deadline-table.tsx, deadline-dashboard.tsx
- 6 modified files: types.ts, use-registry.ts, registratura-module.tsx (tabbed), registry-entry-form.tsx (inline deadlines), registry-table.tsx (clock badge), index.ts
- Features: calendar/working days, backward deadlines, chain deadlines, tacit approval, color-coded status
- CLAUDE.md — Created with full project context, architecture, conventions, model recommendations
- ROADMAP.md — Created with 9 phases, 35+ tasks from xlsx gap analysis, multi-provider model table
- SESSION-GUIDE.md — Created with start/resume prompts, git workflow, file update rules
Commits
bb01268feat(registratura): add legal deadline tracking system (Termene Legale)d6a5852docs: add ROADMAP.md with detailed future task planb1df15bdocs: rewrite ROADMAP.md with complete xlsx gap analysis + multi-model recommendations- (this session) docs: add SESSION-GUIDE.md + SESSION-LOG.md
Notes
- Build passes with zero errors
- Dev server on localhost:3000 shows tabs correctly
- Production at 10.10.10.166:3000 requires Portainer redeploy after push
- The
app_modules_overview.xlsxis in the repo root but not committed (it's a reference file) - No tasks from ROADMAP.md Phase 1+ have been started yet — next session should begin with task 1.01