Story 6-4 — Chat with PDF: - Feature déjà implémentée (document-qa-overlay.tsx, ingestion, search) - Marquée done dans sprint-status Story 6-5 — PPTX Export Watermark (PLG viral loop): - lib/brainstorm/export-pptx.ts: addWatermark + withWatermark helpers - lib/ai/tools/pptx.tool.ts: même pattern monkey-patch addSlide - Watermark 'memento-note.com' 7pt gris bas-droite sur chaque slide - Zéro modification des 14+ fonctions de slides existantes - 174 tests passent, aucune erreur TS Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2.1 KiB
2.1 KiB
Story 6-5 — PPTX Export Watermark (PLG Viral Loop)
Epic: 6 — Croissance & Activation (PLG) Status: done
User Story
En tant qu' utilisateur qui partage une présentation exportée depuis Memento, Je veux que chaque slide porte discrètement la mention "memento-note.com", Afin que les destinataires découvrent l'outil et s'inscrivent (boucle virale PLG).
Acceptance Criteria
- AC-1 : Chaque slide du PPTX brainstorm contient "memento-note.com" en bas-droite
- AC-2 : Chaque slide du PPTX IA (generate_pptx) contient "memento-note.com" en bas-droite
- AC-3 : Le watermark est subtil (7pt, gris clair
#B8B0A8, italique) — visible mais non intrusif - AC-4 : Zéro régression sur la mise en page existante des slides
Tasks
- T1 — Ajouter helper
addWatermark(slide)+withWatermark(pres)danslib/brainstorm/export-pptx.ts - T2 — Appliquer
withWatermarkdansgenerateBrainstormPptx(monkey-patchpres.addSlide) - T3 — Ajouter helper
addWatermark(slide)+withWatermark(pres)danslib/ai/tools/pptx.tool.ts - T4 — Appliquer
withWatermarkdansbuildPresentation(monkey-patchpres.addSlide) - T5 — Vérifier TypeScript + 174 tests unitaires passent
Files Modified
memento-note/lib/brainstorm/export-pptx.ts— helpersaddWatermark+withWatermark, monkey-patch dansgenerateBrainstormPptxmemento-note/lib/ai/tools/pptx.tool.ts— helpersaddWatermark+withWatermark, monkey-patch dansbuildPresentation
Technical Notes
Pattern monkey-patch :
function withWatermark(pres: PptxGenJSModule): PptxGenJSModule {
const original = pres.addSlide.bind(pres)
;(pres as any).addSlide = (...args: any[]) => {
const slide = original(...args)
addWatermark(slide)
return slide
}
return pres
}
Ce pattern garantit que le watermark est ajouté sur toutes les slides sans modifier les 14+ fonctions de construction de slides.
Design watermark :
- Position :
x: 7.0, y: 5.35, w: 2.7, h: 0.2(bas-droite, slide 10"×5.63") - Style : 7pt Arial, couleur
B8B0A8, italique, alignement droite