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>
4.8 KiB
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:
- 01-01: Infrastructure setup — FastAPI skeleton + React SPA + Docker multi-stage build + subpath /postgenerator/ (19 files, 6 min)
- 01-02: Core services — CalendarService + FormatSelector + PromptService + costanti dominio + 7 prompt italiani (16 files, 9 min)
- 01-03: LLM pipeline — LLMService + CSVBuilder + GenerationPipeline + API routers (9 files, 8 min)
- 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:
- 02-01: Prompt Editor — backend prompts router CRUD + frontend pagina PromptEditor con lista, textarea, variabili, badge modificato/default (7 files, 5 min)
- 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:
- 03-01: SwipeService CRUD — backend + Pydantic schemas + FastAPI router + pagina SwipeFile UI (9 files, 5 min)
- 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:
- 04-01: UnsplashService backend — cache disco + traduzione IT->EN + integrazione pipeline/CSV (6 files, 5 min)
- 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