- Aggiunto unsplash_api_key a interface Settings
- Aggiunto unsplash_api_key_configured a interface SettingsStatus
- Aggiunta sezione 'Immagini' in Settings con campo API Key Unsplash
- Toggle visibilita' showUnsplashKey separato da showApiKey
- Helper text condizionale: messaggio diverso se key configurata o no
- Logica submit: unsplash_api_key vuota non sovrascrive quella esistente
- Reset campo dopo salvataggio come per api_key Claude
- CalendarRequest in types.ts: aggiunto topic_overrides?: Record<number, string>
- hooks.ts: aggiunto useMarkSwipeUsed hook (POST /swipe/{id}/mark-used)
- GenerateCalendar.tsx: sezione Topic Override con griglia 13 slot
- Bottone "Da Swipe File" per aprire picker inline per ogni slot
- Picker mostra lista idee con nicchia badge e badge Usato
- Selezione assegna topic allo slot e chiama mark-used
- Bottone X per rimuovere override da uno slot
- Override inclusi in CalendarRequest.topic_overrides al submit
- Riepilogo counter override selezionati
- Add regeneratedSlots Set to track regenerated post indices
- Add summary counter showing: N post, X generati, Y rigenerati, Z modificati
- Counter updates in real-time after each regeneration or inline edit
- Pass isRegenerated prop to PostCard for visual badge
- Update info box to mention regen feature with RefreshCw icon
- Use JSON.stringify comparison for manual edit detection
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add handleRegen function with topic/notes override support
- Add inline popover form with optional topic and notes fields
- Add isRegenerated prop with amber RefreshCw badge for regenerated posts
- Regen button positioned in card header next to expand/collapse chevron
- Form appears below header with Rigenera/Annulla actions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GenerateResponse now includes calendar field from backend.
OutputReview merges CalendarSlot into PostResult via slot_index,
enabling BadgePN, BadgeSchwartz rendering and Retry button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GenerateCalendar.tsx: form con obiettivo+settimane+brand+tono+nicchie
- Pulsante Genera disabilitato senza API key con banner link a Impostazioni
- Async submit: mutation ritorna job_id, mostra ProgressIndicator
- Auto-navigate a /risultati/:jobId quando job completato
- OutputReview.tsx: carica job results via useJobResults(jobId)
- Griglia PostCard responsive con conteggio success/failed
- Stato locale per edit inline (aggiornato da PostCard.onEdit)
- Download CSV via useDownloadEditedCsv (POST con edits) con due pulsanti (header + footer)
- GenerateSingle.tsx: form con tipo PN, livello Schwartz, nicchia, formato narrativo
- Topic opzionale (altrimenti generato dall'AI)
- Anteprima risultato con PostCard+SlideViewer e download CSV singolo
- SlideViewer.tsx: navigazione frecce sinistra/destra tra 8 slide (Cover + 6 centrali + CTA)
- EditableField component: click-to-edit per ogni campo (input/textarea)
- Dot indicators + keyboard navigation (frecce sinistra/destra)
- Caption Instagram editabile con contatore caratteri
- Callback onEdit propaga modifiche al parent
- ProgressIndicator.tsx: polling real-time via useJobStatus(jobId)
- Barra progresso visuale con percentuale
- Lista post con icone stato: pending/running/success/failed
- onComplete(jobId) chiamato quando status diventa 'completed'
- Poll ogni 2s (condizionale nel hook, si ferma quando completed/failed)