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>
This commit is contained in:
103
.planning/milestones/v1-ROADMAP.md
Normal file
103
.planning/milestones/v1-ROADMAP.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# 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_
|
||||
Reference in New Issue
Block a user