Skip to content

Surfab/product-discovery-canvas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“˜ Product Discovery Canvas - README

๐ŸŽฏ Overview

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/

product_discovery_canvas

โœจ Key Features

๐ŸŒ Multilingual

  • 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

๐ŸŽจ Redesigned UI (v2)

  • 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

๐Ÿ”— URL Sharing

  • 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

๐ŸŽค Presentation Mode

  • 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

๐Ÿ“Š Canvas Sections

# 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

๐Ÿ› ๏ธ Advanced Features

๐Ÿ“ˆ Impact vs Effort Matrix (2ร—2)

  • 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)

๐Ÿ”— Visual Connections

  • Links between Opportunities โ†’ Solutions โ†’ Experiments
  • Dropdown to connect elements
  • Full traceability of the decision-making process

๐Ÿ’พ Data Management

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)

๐Ÿ“ฆ Pre-filled Templates

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.

๐Ÿ’ณ Fintech

  • Use case: KYC automation for fintech
  • Goal: Increase signup โ†’ payment conversion by 25%
  • Solution: Automatic ID document OCR

โš–๏ธ Legal Tech

  • Use case: AI for contract analysis
  • Goal: Reduce contract review time from 45 to 15 minutes
  • Solution: AI clause analyzer with risk scoring

โ˜๏ธ SaaS B2B

  • Use case: Upsell from basic to premium plan
  • Goal: Increase MRR by 30%
  • Solution: Contextual in-app upgrade prompts

๐Ÿ›’ E-commerce / Retail (new in v2)

  • Use case: Cart abandonment + mobile checkout
  • Persona: Giulia, 28 years old

โค๏ธ Healthcare / Medtech (new in v2)

  • Use case: Therapy adherence for chronic patients
  • Personas: Carlo (patient) + Marta (caregiver)

๐Ÿค– AI / ML Product (new in v2)

  • Use case: Internal AI assistant with RAG + source citations
  • Persona: Sara, Sales Manager

๐ŸŽจ Design and UX

  • 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

๐Ÿš€ Quick Start

Installation

# 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.

Basic Usage

  1. Open index.html in your browser
  2. Choose language (ITA/ENG)
  3. Load a template to get started OR
  4. Start from scratch by clicking "+ Add" in each section

๐Ÿ”„ Recommended Workflow

  1. Define the Outcome โ€“ What do you want to achieve?
  2. Add Personas โ€“ Who are you building for?
  3. Identify Opportunities โ€“ What problems are you solving?
  4. Write JTBD โ€“ What do users want to accomplish?
  5. Propose Solutions โ€“ Feature ideas, evaluate Effort/Impact
  6. View the Matrix โ€“ Prioritize solutions, export as PNG if needed
  7. List Assumptions โ€“ What needs validation?
  8. Plan Experiments โ€“ How will you validate assumptions?
  9. Define Metrics โ€“ How will you measure success?
  10. Create Connections โ€“ Trace Opportunity โ†’ Solution โ†’ Experiment
  11. Share or Present โ€“ Use URL sharing or presentation mode

๐Ÿ“ Field Details

Personas (3 fields)

  • 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"

Opportunities (2 fields)

  • Description: The specific problem
  • Priority: High (HIGH) / Medium (MEDIUM) / Low (LOW)

Solutions (4 fields)

  • Name: Solution title
  • Description: Short explanation
  • Effort: S (Small) / M (Medium) / L (Large)
  • Impact: Low / Medium / High

Assumptions (3 fields)

  • Text: The hypothesis to validate
  • Type: Desirability / Feasibility / Viability
  • Risk: Critical / High / Medium / Low

Experiments (4 fields)

  • 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"

๐Ÿ’พ Data Format

JSON Structure

{
  "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 }
  ]
}

๐Ÿ”ง Technical Requirements

Supported Browsers

  • โœ… Chrome/Edge 90+
  • โœ… Firefox 88+
  • โœ… Safari 14+
  • โœ… Mobile browsers (iOS Safari, Chrome Mobile)

Dependencies

  • localStorage API โ€“ Required for data persistence
  • CompressionStream API โ€“ Used for URL sharing (Chrome 80+, Firefox 113+, Safari 16.4+)
  • html2pdf.js (CDN) โ€“ Removed in v2, replaced by native window.print()
  • No server required โ€” zero configuration โ€” works offline

๐Ÿ“š Use Cases

1. Product Manager

  • Define product roadmap
  • Prioritize features with 2ร—2 matrix
  • Present canvas to stakeholders (PDF export or presentation mode)

2. UX Researcher

  • Document user research insights
  • Map pain points and opportunities
  • Share personas with the team

3. Startup Founder

  • Validate product-market fit
  • Plan MVP with effort/impact evaluation
  • Track critical assumptions to validate

4. Innovation Team

  • Product discovery workshops
  • Collaborative solution brainstorming
  • Export for project documentation (JSON, CSV, PDF, PNG)

๐ŸŽ“ Best Practices

โœ… DO

  • 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

โŒ DON'T

  • 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)

๐Ÿ” Privacy and Security

  • 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

๐Ÿ› Troubleshooting

Canvas does not save data

  • Check that localStorage is enabled
  • Make sure you are not in private browsing mode

Templates do not load

  • Reload the page (F5)
  • Check that JavaScript is enabled
  • Check browser console for errors

PDF export does not work

  • Use the browser's "Print" dialog โ†’ "Save as PDF"
  • No external CDN is required in v2

PNG export does not work

  • Requires Chrome 80+, Firefox 88+, or Safari 14+
  • Check browser console for errors

URL sharing does not work

  • Requires CompressionStream API: Chrome 80+, Firefox 113+, Safari 16.4+
  • The link includes the full canvas state in the hash โ€” it can be long

Language does not change

  • Click the language button (๐Ÿ‡ฎ๐Ÿ‡น ITA / ๐Ÿ‡ฌ๐Ÿ‡ง ENG)
  • Reload the page if the issue persists

๐Ÿ“ˆ Future Roadmap

  • โœ… 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

๐Ÿ“‹ Changelog

v2.0.0 โ€” May 2026

  • ๐ŸŽจ 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 (#0d0d0c background, #161614 surface)

v1.0.0 โ€” February 2026

  • Initial release

๐Ÿ“„ License

GPL-3.0 โ€“ Free for personal and commercial use. See LICENSE.


๐Ÿค Contributions

The canvas is a standalone file. To contribute:

  1. Edit index.html
  2. Test locally in your browser
  3. Open a PR with a short description of the change

๐Ÿ“ž Support

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!

About

Interactive Product Discovery Canvas with Impact/Effort Matrix, Assumption Validation, Experiment Tracking and Visual Traceability. Offline-first. Multilingual.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages