Product Discovery Canvas is an interactive framework designed to guide the product discovery process, from defining goals to validating assumptions through concrete experiments.
Designed for Product Managers, Product Owners, AI Product Leaders and Innovation Teams who want a structured, experiment-driven discovery workflow.
Version 2.0 โ Redesigned UI (Notion/Linear-style), bug fixes on the Impact/Effort matrix, new export options (PNG, URL sharing), presentation mode, and 6 pre-filled templates.
๐ Live demo: https://surfab.github.io/product-discovery-canvas/
- Italian and English with instant switch
- Elegant selector in the top right corner (๐ฎ๐น ITA / ๐ฌ๐ง ENG)
- All labels, placeholders, and messages translated
- Language automatically saved in the browser
- Neutral warm palette โ off-white
#fafaf9, texts#1a1a18, warm grays - Single accent: indigo
#5b5fc7(Linear-style), used only for active states and focus - Typography: Manrope (UI) + JetBrains Mono (micro-labels and numbers)
- Sections as individual cards with thin border, numbered
01โ08 - Buttons unified in 3 variants: ghost (default), dark solid (primary), ghost-red (destructive)
- Recalibrated dark mode โ background
#0d0d0c, surface#161614
- New "Share" button in the toolbar
- Canvas state compressed with gzip + base64-url, stored in the page hash (
#share=g.xxxxxโฆ) - ~60% compression vs plain JSON
- On open, if a share hash is detected: state loads, schema is validated, confirmation toast appears
- New "Present" button โ triggers browser Fullscreen API
- Hides all editing UI: toolbar, template selector, drag handles, add/delete controls
- Inputs become read-only with no chrome โ looks like native text
- Floating "Exit" button top-right with Esc hint
| # | Section | Description |
|---|---|---|
| 01 | Outcome (Goal) | Measurable objective the product must achieve |
| 02 | Users & Personas | User profiles with segment and pain points |
| 03 | Opportunities | Problems and needs identified through research |
| 04 | User Benefits (JTBD) | Jobs To Be Done framework |
| 05 | Solutions | Feature ideas with Effort/Impact evaluation |
| 06 | Assumptions | Hypotheses to validate (Desirability/Feasibility/Viability) |
| 07 | Experiments | Concrete tests with method, duration, and success criteria |
| 08 | Success Metrics | KPIs and evaluation metrics |
- Graphical visualization of solutions on a quadrant grid
- Auto-positioning based on Effort (S/M/L) and Impact (Low/Medium/High)
- Fixed in v2 โ quadrant labels and colors now match the standard convention:
| Low Effort | High Effort | |
|---|---|---|
| High Impact | ๐ข Quick Wins | ๐ก Major Projects |
| Low Impact | โซ Fill-ins | ๐ด Avoid |
- New in v2 โ Export as PNG (1600ร1100px, Canvas2D-based, no CORS issues)
- Links between Opportunities โ Solutions โ Experiments
- Dropdown to connect elements
- Full traceability of the decision-making process
| Action | Description |
|---|---|
| Auto-save | Browser localStorage, triggers on every change |
| Restore | Load last saved canvas |
| Export JSON | Structured and shareable backup |
| Import JSON | Reload canvas from file |
| Export CSV | Table for Excel/Sheets analysis |
| Export PDF | Native window.print() โ no CDN required (v2) |
| Export PNG | Matrix snapshot, 1600ร1100px (new in v2) |
| Share URL | Compressed state in page hash (new in v2) |
Each template includes: measurable outcome, 1โ2 detailed personas, prioritized opportunities, solutions pre-positioned on the matrix, typed assumptions (desirability/feasibility/viability) with risk level, and an experiment with success criteria.
- Use case: KYC automation for fintech
- Goal: Increase signup โ payment conversion by 25%
- Solution: Automatic ID document OCR
- Use case: AI for contract analysis
- Goal: Reduce contract review time from 45 to 15 minutes
- Solution: AI clause analyzer with risk scoring
- Use case: Upsell from basic to premium plan
- Goal: Increase MRR by 30%
- Solution: Contextual in-app upgrade prompts
- Use case: Cart abandonment + mobile checkout
- Persona: Giulia, 28 years old
- Use case: Therapy adherence for chronic patients
- Personas: Carlo (patient) + Marta (caregiver)
- Use case: Internal AI assistant with RAG + source citations
- Persona: Sara, Sales Manager
- Clean neutral header โ warm off-white background, indigo accent (replaces purple/blue gradient)
- Always-visible status indicator: colored dot + label (โ Ready / Savingโฆ / Error)
- Toast notifications for action confirmation with undo support
- Buttons: ghost (default), dark solid (primary), ghost-red (destructive)
- Colored priority badges with mono font labels
- Drag handle hidden until hover, indigo focus ring on items
- Modal with blur backdrop
- Custom SVG chevron on selects
- Subtle scrollbar matching the active theme
- Responsive mobile-first design
# No installation required โ it is a standalone HTML file
# Download index.html (or the fully offline standalone version)
Offline version: Product Discovery Canvas (standalone).html (~328 KB) โ fonts embedded, zero external dependencies.
- Open
index.htmlin your browser - Choose language (ITA/ENG)
- Load a template to get started OR
- Start from scratch by clicking "+ Add" in each section
- Define the Outcome โ What do you want to achieve?
- Add Personas โ Who are you building for?
- Identify Opportunities โ What problems are you solving?
- Write JTBD โ What do users want to accomplish?
- Propose Solutions โ Feature ideas, evaluate Effort/Impact
- View the Matrix โ Prioritize solutions, export as PNG if needed
- List Assumptions โ What needs validation?
- Plan Experiments โ How will you validate assumptions?
- Define Metrics โ How will you measure success?
- Create Connections โ Trace Opportunity โ Solution โ Experiment
- Share or Present โ Use URL sharing or presentation mode
- Name: e.g. "Laura, 32-year-old Freelancer"
- Segment: e.g. "Millennial with VAT number, tech-savvy"
- Pain Points: e.g. "Paper documents, long processing times"
- Description: The specific problem
- Priority: High (HIGH) / Medium (MEDIUM) / Low (LOW)
- Name: Solution title
- Description: Short explanation
- Effort: S (Small) / M (Medium) / L (Large)
- Impact: Low / Medium / High
- Text: The hypothesis to validate
- Type: Desirability / Feasibility / Viability
- Risk: Critical / High / Medium / Low
- Name: Experiment title
- Method: e.g. "A/B test", "Interview", "Prototype test"
- Duration: e.g. "2 weeks", "1 month"
- Success Criteria: e.g. ">80% completion rate"
{
"outcome": "string",
"stakeholders": "string",
"jtbd": "string",
"metrics": "string",
"personas": [
{ "id": 123456789, "name": "string", "segment": "string", "painpoints": "string" }
],
"opportunities": [
{ "id": 123456790, "text": "string", "priority": "high|medium|low" }
],
"solutions": [
{ "id": 123456791, "name": "string", "description": "string", "effort": "S|M|L", "impact": "low|medium|high", "matrixX": 50, "matrixY": 50 }
],
"assumptions": [
{ "id": 123456792, "text": "string", "type": "desirability|feasibility|viability", "risk": "critical|high|medium|low" }
],
"experiments": [
{ "id": 123456793, "name": "string", "method": "string", "duration": "string", "success": "string" }
],
"connections": [
{ "id": 123456794, "opportunityId": 123456790, "solutionId": 123456791, "experimentId": 123456793 }
]
}- โ Chrome/Edge 90+
- โ Firefox 88+
- โ Safari 14+
- โ Mobile browsers (iOS Safari, Chrome Mobile)
localStorageAPI โ Required for data persistenceCompressionStreamAPI โ Used for URL sharing (Chrome 80+, Firefox 113+, Safari 16.4+)html2pdf.js (CDN)โ Removed in v2, replaced by nativewindow.print()- No server required โ zero configuration โ works offline
- Define product roadmap
- Prioritize features with 2ร2 matrix
- Present canvas to stakeholders (PDF export or presentation mode)
- Document user research insights
- Map pain points and opportunities
- Share personas with the team
- Validate product-market fit
- Plan MVP with effort/impact evaluation
- Track critical assumptions to validate
- Product discovery workshops
- Collaborative solution brainstorming
- Export for project documentation (JSON, CSV, PDF, PNG)
- Involve the team in filling out the canvas
- Validate high-risk assumptions first
- Use templates as a starting point
- Export regularly in JSON for backup
- Always connect Opportunity โ Solution โ Experiment
- Do not skip defining a clear Outcome
- Do not underestimate Solution Effort
- Do not ignore critical assumptions
- Do not forget to define Success Metrics
- Do not overload with too many solutions (max 5โ7)
- Local data: Everything saved in the browser (localStorage)
- Zero server: No data sent online
- Full privacy: No tracking or analytics
- Portability: JSON export to migrate data
- URL sharing: State is compressed client-side โ no server involved
- Check that localStorage is enabled
- Make sure you are not in private browsing mode
- Reload the page (F5)
- Check that JavaScript is enabled
- Check browser console for errors
- Use the browser's "Print" dialog โ "Save as PDF"
- No external CDN is required in v2
- Requires Chrome 80+, Firefox 88+, or Safari 14+
- Check browser console for errors
- Requires
CompressionStreamAPI: Chrome 80+, Firefox 113+, Safari 16.4+ - The link includes the full canvas state in the hash โ it can be long
- Click the language button (๐ฎ๐น ITA / ๐ฌ๐ง ENG)
- Reload the page if the issue persists
- โ
Drag & drop to reorder items(drag handles added in v2) - โ
Dark mode(recalibrated in v2) - โ
Additional templates (eCommerce, HealthTech, AI/ML)(added in v2) - Undo/Redo (Ctrl+Z)
- Periodic auto-backup
- Canvas versioning
- Real-time collaboration (cloud sync)
- Mobile app wrapper
- ๐จ Full UI redesign: neutral warm palette, indigo accent, Manrope + JetBrains Mono typography
- ๐ Fixed inverted quadrant labels on Impact/Effort matrix
- ๐ Fixed PDF export โ removed html2pdf.js CDN, replaced with native
window.print() - ๐ธ New: PNG export for the matrix (Canvas2D, 1600ร1100px)
- ๐ New: URL sharing (gzip + base64 in page hash)
- ๐ค New: Presentation mode (fullscreen, read-only)
- ๐ Matrix pills widened to 220px max
- ๐ฆ New templates: E-commerce / Retail, Healthcare / Medtech, AI / ML Product
- ๐ Recalibrated dark mode (
#0d0d0cbackground,#161614surface)
- Initial release
GPL-3.0 โ Free for personal and commercial use. See LICENSE.
The canvas is a standalone file. To contribute:
- Edit
index.html - Test locally in your browser
- Open a PR with a short description of the change
For questions or issues:
- Open the file in a text editor for customization
- Inspect browser console (F12) for debugging
- All data is stored in browser localStorage
Version: 2.0.0 Last update: May 2026 Author: Fabrizio Quaglio Cotti
๐ Enjoy! Suggestions are always welcome!