Files
postgenerator/.planning/milestones/v1-ROADMAP.md
Michele 1c9199bf38 chore: complete v1 milestone
Archived:
- milestones/v1-ROADMAP.md (full phase details)
- milestones/v1-REQUIREMENTS.md (46/46 shipped)
- milestones/v1-MILESTONE-AUDIT.md (audit report)

Created:
- MILESTONES.md (project milestone history)

Deleted:
- REQUIREMENTS.md (fresh one for next milestone)

Updated:
- PROJECT.md (requirements → Validated, decisions with outcomes)
- ROADMAP.md (collapsed to one-line v1 summary)
- STATE.md (reset for next milestone)

v1 MVP: 4 phases, 10 plans, 46 requirements, 8080 LOC
Timeline: 2 days (2026-03-07 → 2026-03-09)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 11:59:07 +01:00

104 lines
4.8 KiB
Markdown

# Milestone v1: MVP Content Marketing Automation
**Status:** SHIPPED 2026-03-09
**Phases:** 1-4
**Total Plans:** 10
## Overview
PostGenerator trasforma framework strategici di content marketing (Persuasion Nurturing + livelli Schwartz) in caroselli Instagram pronti per Canva Bulk Create. Il percorso di sviluppo segue una logica precisa: prima costruire la pipeline di generazione end-to-end funzionante (Fase 1), poi dare il controllo sulla qualita' dell'output tramite editor di prompt e anteprima (Fase 2), poi aggiungere gli strumenti organizzativi per un workflow sostenibile (Fase 3), infine arricchire con integrazioni opzionali (Fase 4). Ogni fase consegna un sistema verificabile e utilizzabile indipendentemente dalla successiva.
## Phases
### Phase 1: Core Generation Pipeline
**Goal**: L'utente puo' generare un calendario di 13 caroselli completi e scaricare un CSV valido per Canva Bulk Create con un click dalla Web UI deployata su VPS.
**Depends on**: Nothing (first phase)
**Requirements**: INF-01..06, CAL-01..07, FMT-01..02, LLM-01..06, PRM-01..04, CSV-01..04, IMG-01, IMG-04, UI-01..04, UI-07, UI-08
**Plans**: 4 plans
Plans:
- [x] 01-01: Infrastructure setup — FastAPI skeleton + React SPA + Docker multi-stage build + subpath /postgenerator/ (19 files, 6 min)
- [x] 01-02: Core services — CalendarService + FormatSelector + PromptService + costanti dominio + 7 prompt italiani (16 files, 9 min)
- [x] 01-03: LLM pipeline — LLMService + CSVBuilder + GenerationPipeline + API routers (9 files, 8 min)
- [x] 01-04: Web UI — Dashboard + Genera Calendario + Output Review + Genera Singolo + Settings (16 files, 10 min)
**Completed**: 2026-03-08
---
### Phase 2: Prompt Control + Output Review
**Goal**: L'utente puo' modificare i prompt direttamente dalla Web UI senza toccare il codice, rigenerare singoli post insoddisfacenti, e rivedere l'anteprima completa di ogni carosello prima di esportare il CSV.
**Depends on**: Phase 1
**Requirements**: PRM-05, UI-05
**Plans**: 2 plans
Plans:
- [x] 02-01: Prompt Editor — backend prompts router CRUD + frontend pagina PromptEditor con lista, textarea, variabili, badge modificato/default (7 files, 5 min)
- [x] 02-02: Per-item regeneration — bottone Rigenera con popover inline, badge rigenerato, summary counter (2 files, 4 min)
**Completed**: 2026-03-08
---
### Phase 3: Organization Layer
**Goal**: L'utente puo' salvare rapidamente idee e topic interessanti in un Swipe File consultabile, e ritrovare e ri-scaricare calendari generati in sessioni precedenti.
**Depends on**: Phase 1
**Requirements**: SWP-01..04, UI-06
**Plans**: 2 plans
Plans:
- [x] 03-01: SwipeService CRUD — backend + Pydantic schemas + FastAPI router + pagina SwipeFile UI (9 files, 5 min)
- [x] 03-02: Swipe-to-calendar integration — topic_overrides in CalendarRequest + picker Swipe File nel form Genera Calendario (5 files, 3 min)
**Completed**: 2026-03-09
---
### Phase 4: Enrichment
**Goal**: L'utente con API key Unsplash configurata vede URL immagini reali nel CSV invece di placeholder; l'utente puo' passare voci dello Swipe File come contesto durante la generazione topic per risultati piu' aderenti alle proprie osservazioni.
**Depends on**: Phase 3
**Requirements**: IMG-02, IMG-03
**Plans**: 2 plans
Plans:
- [x] 04-01: UnsplashService backend — cache disco + traduzione IT->EN + integrazione pipeline/CSV (6 files, 5 min)
- [x] 04-02: Frontend Unsplash UI — campo API key in Settings, thumbnail cover in PostCard, hint OutputReview (4 files, 3 min)
**Completed**: 2026-03-09
---
## Milestone Summary
**Key Decisions:**
- Claude API come LLM provider (familiarita' ecosistema, qualita' output italiano)
- FastAPI + React (separazione, UI ricca, coerenza con VPS echosystem)
- File system storage senza DB (semplicita' MVP, prompt e config editabili)
- root_path SOLO via Uvicorn --root-path (mai nel costruttore FastAPI)
- CSV encoding utf-8-sig (BOM) per compatibilita' Excel/Windows
- CANVA_FIELDS 33 colonne locked con assert a load-time
- Pipeline singleton con fallback da disco per persistenza job
- Design stone/amber B2B (non gradienti viola generici)
- Risoluzione Unsplash UNA SOLA VOLTA dopo batch LLM
- Dizionario statico IT->EN (~30 keyword B2B) per traduzione keyword Unsplash
**Issues Resolved:**
- Slot-merge gap (result.slot undefined in PostCard) risolto in Phase 2
- PromptService lazy init per sincronizzazione con lifespan FastAPI
- Import mancante apiFetch in hooks.ts
- .gitignore troppo aggressivo su backend/data/
**Technical Debt Incurred:**
- Pipeline singleton non invalidato quando API key cambia (routers/generate.py)
- Campo campagna inviato nel POST /export ma ignorato dal backend (hooks.ts)
- brand_name hardcoded in generation_pipeline.py
- Job interrotti durante restart container non recuperabili
---
_For current project status, see .planning/ROADMAP.md_