Files
clienthub/.planning/STATE.md
T
simone bbc89136f5 docs(state): record phase 7 plan 1 execution completion
Phase 7 Plan 1 (Unified Service Catalog) complete:
- Status: executing (was: planning)
- Progress: 1/5 phases, 1/8 plans completed (12%)
- Current position: Phase 07-unified-service-catalog, Plan 07-01 complete → 07-02 planning
- Last activity: 2026-06-11T04:21:50Z

Phase 7 Plan 1 summary:
- Schema definition with audit trail (migrated_from/migrated_id)
- Idempotent backfill script (56 rows: 21 from service_catalog + 35 from offer_services)
- Zero-data-loss validation suite (5-check verification)
- Database migration pending external connectivity

Next steps: Apply migration when DB reachable, or plan Phase 7-02.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-11 06:23:12 +02:00

99 lines
4.3 KiB
Markdown

---
gsd_state_version: 1.0
milestone: v2.0
milestone_name: Business Operations Suite
status: executing
last_updated: "2026-06-11T04:21:50Z"
last_activity: 2026-06-11
progress:
total_phases: 5
completed_phases: 1
total_plans: 8
completed_plans: 1
percent: 12
---
# Project State
## Project Reference
See: .planning/PROJECT.md (updated 2026-05-09)
**Core value:** Il cliente apre il link e vede esattamente a che punto è il suo progetto, cosa deve ancora succedere e cosa ha già approvato — senza dover scrivere email per chiedere aggiornamenti.
## Current Position
Phase: 07-unified-service-catalog (Wave 1/2)
Plan: 07-01 (Complete) → 07-02 (Planning)
Status: Executing Phase 7 — Database schema unification
Last activity: 2026-06-11T04:21:50Z — Phase 7 Plan 1 execution complete
## What Was Built (Phase 7 — v2.0)
### 07-01: Unified Service Catalog (Expand Phase)
- **Schema:** `services` table with migrated_from/migrated_id audit trail for rollback safety
- **TypeScript:** Service and NewService types exported
- **Backfill:** Idempotent migration script (21 service_catalog rows + 35 offer_services rows → services table)
- **Collision Resolution:** ' (Offer)' suffix prevents silent overwrites of duplicate names
- **Validation:** 5-check suite proves zero data loss (row counts, FK integrity, orphaned references)
- **Status:** Code complete; database migration pending connectivity (schema, scripts ready to apply)
- **Data Safety:** Legacy tables (service_catalog, offer_services) untouched — rollback possible by not using services table
## What Was Built (Phase 5)
- **05-01**: Schema migration — 5 nuove tabelle offer in DB + tipi TypeScript
- **05-02**: `/admin/offers` CRUD — macro, micro, servizi + assegnazione checkbox
- **05-03**: OffersTab nel workspace progetto + `getClientActiveOffers()` + sezione Offerte Attive nel dettaglio cliente
- **05-04**: `OffersSection` nella dashboard cliente (solo `public_name`) + `/admin/forecast` 12 mesi
## What Was Built (Phase 4)
- **04-00**: Infra — route /c/ → /client/, Dockerfile, deploy Gitea → Coolify
- **04-01**: DB schema migration — projects, settings, FK pivot
- **04-02**: Admin projects list + client detail project cards
- **04-03**: Project workspace + timer analytics + settings page
- **04-04**: Slug resolution + multi-project client dashboard + slug edit
- **04-05/06**: Post-deploy bug fixes
- **04-07**: Debug code removed, public page restored
- **security**: Full hardening — auth guards, rate limiting, security headers
- **payments**: Init payments + split payment in project workspace
## Production State
- App: hub.iamcavalli.net (Coolify, Hetzner)
- DB: Postgres self-hosted on Coolify
- Auth: Auth.js (admin) + token middleware (clients)
- Routes: /admin/* (admin), /client/[token]/* (clients)
## Decisions (All Phases)
- `clients.token` è campo separato (non la PK) — rotazionabile via single UPDATE
- `clients.accepted_total` denormalizzato — client API non tocca mai `quote_items`
- `deliverables.approved_at` immutabile — audit trail dal giorno uno
- Edge middleware (`proxy.ts`) usa fetch() a route interna — postgres-js non può girare nell'Edge runtime
- Tailwind v4 auto-detection allargata — aggiunto `@source not` per escludere `.01_projects/` e `.claude/`
- Authelia va solo davanti ad /admin — /client/[token] deve bypassare per accesso via link token
## Deferred Items
| Category | Item | Status |
|----------|------|--------|
| v2 | Claude AI onboarding (CLAUDE-01, CLAUDE-02, CLAUDE-03) | Backlog |
| Infrastructure | Authelia SSO davanti ad /admin | After Phase 4 (now ready) |
| Infrastructure | Higgsfield clone deploy (nuovo progetto Coolify) | Pending |
| SEO | WordPress auto-publish articoli | Mentioned, not planned |
## Session Continuity
Last session: 2026-06-11T04:21:50Z
Phase 7 Plan 1 execution complete (Unified Service Catalog schema + backfill scripts).
Database migration ready but pending external connectivity.
Next: Phase 7 Plan 2 planning or database migration when connectivity restored.
## Operator Next Steps
- Run database migration when Postgres is reachable: `scripts/push-services-migration.ts`, `scripts/migrate-services.ts`, `scripts/validate-services-migration.ts`
- Plan Phase 7 Plan 2 (Offer Phases & Quote Templates) or proceed to Phase 8
- Monitor database connectivity to apply pending migration