1898dc5ccc
- Update progress: 3/8 plans complete (37.5%) - Update current position: Phase 8 executed, Phase 9 ready for execution - Add Phase 8 build summary (4 new tables, 7 columns, 5 query functions) - Update session info with Phase 8 completion - Update operator next steps: Phase 8 database migration when Postgres ready Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
156 lines
7.5 KiB
Markdown
156 lines
7.5 KiB
Markdown
---
|
|
gsd_state_version: 1.0
|
|
milestone: v2.0
|
|
milestone_name: Business Operations Suite
|
|
status: executing
|
|
last_updated: "2026-06-11T07:20:00Z"
|
|
last_activity: 2026-06-11
|
|
progress:
|
|
total_phases: 5
|
|
completed_phases: 1
|
|
total_plans: 8
|
|
completed_plans: 3
|
|
percent: 37.5
|
|
---
|
|
|
|
# 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: 09-quote-builder-client-acceptance (Planning complete, ready for execution)
|
|
Plans: 07 (complete) | 08 (complete) | 09 (planned, ready exec)
|
|
Status: Phase 7 executed ✓ | Phase 8 executed ✓ | Phase 9 ready for execution
|
|
Last activity: 2026-06-11T07:20:00Z — Phase 8 Plan 1 execution complete (schema foundation)
|
|
|
|
## What Was Built (Phase 8 — Quote Builder Schema Foundation) ✓
|
|
|
|
### 08-01: Offer Phases & Quote Tables Schema ✓
|
|
|
|
- **Schema:** 4 new tables (offer_phases, offer_phase_services, quotes, leads) + 7 columns added to existing tables
|
|
- **offer_phases:** Hierarchical breakdown of offer_micros (Discovery → Strategy → Execution phases)
|
|
- **offer_phase_services:** Junction linking phases to unified services table (Phase 7)
|
|
- **quotes:** Separate quote headers from line items with token-based public access
|
|
- **Extensions:** quote_items (quote_id, offer_micro_id, offer_phase_id), projects (offer_id, created_from_lead_id), phases (offer_phase_id)
|
|
- **TypeScript:** OfferPhase, OfferPhaseService, Quote, Lead types exported
|
|
- **Drizzle Relations:** 6 new relations for proper ORM traversal
|
|
- **Status:** Schema complete, migration script ready, validation checks implemented
|
|
- **Data Safety:** Additive-only migration (no drops, no truncates) — fully reversible
|
|
|
|
### 08-02: Migration & Validation Scripts ✓
|
|
|
|
- **Migration:** src/db/migrations/0003_offer_phases_quote_templates.sql (89 lines, additive-only)
|
|
- **Indexes:** 11 created for performance (micro_id, service_id, token, client_id, status, etc.)
|
|
- **Validation:** scripts/validate-phase8-migration.ts with 10 checks (all 4 tables + 6 columns verified)
|
|
- **Status:** READY FOR DEPLOYMENT when Postgres is reachable
|
|
|
|
### 08-03: Query Layer for Quote Builder ✓
|
|
|
|
- **Query Functions:** 5 new async functions added to admin-queries.ts
|
|
- getOfferPhases(microId) — get all phases for an offer micro
|
|
- getOfferPhaseServices(phaseId) — get all services assigned to a phase
|
|
- getQuoteById(quoteId) — full quote header by ID
|
|
- getQuoteByToken(token) — quote by public token (for /quote/[token])
|
|
- getQuotesByClient(clientId) — all quotes for a client
|
|
- **Build Status:** npm run build passes with zero TypeScript errors
|
|
- **Ready for:** Phase 9 quote builder UI, public quote pages
|
|
|
|
## 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:** 6-check suite proves zero data loss (row counts, FK integrity, orphaned references, net-new services count)
|
|
- **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
|
|
|
|
### 07-02: Admin Catalog CRUD + Quote Builder Rewire ✓
|
|
|
|
- **Query Layer:** getAllServices() and activeServices queries updated to read from unified `services` table
|
|
- **Admin CRUD:** `/admin/catalog` list/add/edit/soft-delete fully operational on `services` table with category field
|
|
- **Service Form:** Added optional category input field for new/edited services
|
|
- **Service Table:** Category column rendering; net-new services tracked with migrated_from=null
|
|
- **Quote Builder:** QuoteTab service picker reads from `services` via activeServices
|
|
- **Backward Compatibility:** Historical quote_items → service_catalog join preserved for existing quote item labels
|
|
- **Type Safety:** All components (ServiceTable, ServiceForm, QuoteTab) typed against Service instead of ServiceCatalog
|
|
- **Status:** Code complete, TypeScript verified (npm run build passes), manual testing documented
|
|
- **ROADMAP Success Criteria:** #3 (/admin/catalog operational on services) and #4 (old catalog queries explicit) satisfied
|
|
|
|
## 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-11T07:20:00Z
|
|
Phase 8 Plan 1 execution complete (Offer Phases & Quote Builder Schema Foundation).
|
|
All schema, migration, validation, and query layers ready.
|
|
Migration pending Postgres connectivity.
|
|
|
|
## Operator Next Steps
|
|
|
|
### Immediate (Phase 8 Database Sync)
|
|
|
|
- Run database migration when Postgres is reachable:
|
|
|
|
```bash
|
|
npx tsx scripts/validate-phase8-migration.ts # Verify before applying
|
|
# Apply migration using Drizzle CLI or direct SQL
|
|
```
|
|
|
|
- Verify validation script exits 0
|
|
|
|
### Next Phase (Phase 9 Quote Builder UI)
|
|
|
|
- Phase 9 focus: Quote builder UI components + public quote pages
|
|
- Dependencies on Phase 8: ✓ offer_phases schema ready, ✓ quote headers ready, ✓ query layer implemented
|
|
- Ready to execute: Phase 9 Plan 1 (Quote Builder Components)
|