browser

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package browser provides browser automation for Aha! using w3pilot.

Index

Constants

This section is empty.

Variables

View Source
var PredefinedTemplates = map[TemplateType]TemplateConfig{
	TemplateCapabilityStack: {
		Name:        "Capability Stack",
		Type:        TemplateCapabilityStack,
		Description: "Map capabilities across layers of your technology or business stack",
		Rows: []RowConfig{
			{Title: "Customer Experience", Columns: []CellConfig{
				{Title: "Web Portal"}, {Title: "Mobile App"}, {Title: "API Gateway"},
			}},
			{Title: "Business Logic", Columns: []CellConfig{
				{Title: "Order Management"}, {Title: "Inventory"}, {Title: "Pricing"},
			}},
			{Title: "Data Layer", Columns: []CellConfig{
				{Title: "Customer Data"}, {Title: "Product Catalog"}, {Title: "Analytics"},
			}},
			{Title: "Infrastructure", Columns: []CellConfig{
				{Title: "Cloud Services"}, {Title: "Security"}, {Title: "Monitoring"},
			}},
		},
	},
	TemplateMaturityModel: {
		Name:        "Maturity Model",
		Type:        TemplateMaturityModel,
		Description: "Assess maturity levels across capability dimensions",
		Rows: []RowConfig{
			{Title: "Dimensions", Columns: []CellConfig{
				{Title: "Level 1: Initial"}, {Title: "Level 2: Developing"}, {Title: "Level 3: Defined"},
				{Title: "Level 4: Managed"}, {Title: "Level 5: Optimizing"},
			}},
			{Title: "Process", Columns: []CellConfig{
				{Title: "Ad-hoc"}, {Title: "Repeatable"}, {Title: "Documented"},
				{Title: "Measured"}, {Title: "Continuous"},
			}},
			{Title: "Technology", Columns: []CellConfig{
				{Title: "Manual"}, {Title: "Assisted"}, {Title: "Automated"},
				{Title: "Integrated"}, {Title: "Intelligent"},
			}},
			{Title: "People", Columns: []CellConfig{
				{Title: "Aware"}, {Title: "Learning"}, {Title: "Competent"},
				{Title: "Proficient"}, {Title: "Expert"},
			}},
		},
	},
	TemplateOpportunityPatton: {
		Name:        "Opportunity Canvas (Patton)",
		Type:        TemplateOpportunityPatton,
		Description: "Jeff Patton's Opportunity Canvas for validating product opportunities",
		Rows: []RowConfig{
			{Title: "Problem Space", Columns: []CellConfig{
				{Title: "Problems", Description: "What problems do users have?"},
				{Title: "Users & Customers", Description: "Who has these problems?"},
				{Title: "Solutions Today", Description: "How do they solve it now?"},
			}},
			{Title: "Solution Space", Columns: []CellConfig{
				{Title: "Value Proposition", Description: "What's your unique value?"},
				{Title: "User Value", Description: "Why will users adopt this?"},
				{Title: "Business Value", Description: "Why does the business care?"},
			}},
			{Title: "Validation", Columns: []CellConfig{
				{Title: "Assumptions", Description: "What must be true?"},
				{Title: "Risks", Description: "What could go wrong?"},
				{Title: "Budget & Timeline", Description: "Resources needed?"},
			}},
		},
	},
	TemplateFeatureCanvas: {
		Name:        "Feature Canvas",
		Type:        TemplateFeatureCanvas,
		Description: "Nikita Efimov's Feature Canvas for feature definition (CC BY-SA 4.0)",
		Rows: []RowConfig{
			{Title: "Idea Statement", Columns: []CellConfig{
				{Title: "Feature Idea", Description: "What is the feature?", ColSpan: 4},
			}},
			{Title: "Problem Area", Columns: []CellConfig{
				{Title: "Situations", Description: "When/where does the problem occur?"},
				{Title: "Problems", Description: "What are the user pain points?"},
				{Title: "Value", Description: "What value does solving this create?"},
				{Title: "Capabilities", Description: "What must the solution do?"},
			}},
			{Title: "Constraints", Columns: []CellConfig{
				{Title: "Restrictions", Description: "What can't we do?", ColSpan: 2},
				{Title: "Limitations", Description: "What resources are limited?", ColSpan: 2},
			}},
		},
	},
	TemplateBusinessModel: {
		Name:        "Business Model Canvas",
		Type:        TemplateBusinessModel,
		Description: "Osterwalder's Business Model Canvas for business design",
		Rows: []RowConfig{
			{Title: "Partners & Activities", Columns: []CellConfig{
				{Title: "Key Partners"},
				{Title: "Key Activities"},
				{Title: "Value Propositions", ColSpan: 2},
				{Title: "Customer Relationships"},
				{Title: "Customer Segments"},
			}},
			{Title: "Resources & Channels", Columns: []CellConfig{
				{Title: "", ColSpan: 1},
				{Title: "Key Resources"},
				{Title: "", ColSpan: 2},
				{Title: "Channels"},
				{Title: "", ColSpan: 1},
			}},
			{Title: "Finances", Columns: []CellConfig{
				{Title: "Cost Structure", ColSpan: 3},
				{Title: "Revenue Streams", ColSpan: 3},
			}},
		},
	},
	TemplateLeanCanvas: {
		Name:        "Lean Canvas",
		Type:        TemplateLeanCanvas,
		Description: "Ash Maurya's Lean Canvas for startup/product validation",
		Rows: []RowConfig{
			{Title: "Problem & Solution", Columns: []CellConfig{
				{Title: "Problem", Description: "Top 3 problems"},
				{Title: "Solution", Description: "Top 3 features"},
				{Title: "Unique Value Proposition", ColSpan: 2},
				{Title: "Unfair Advantage"},
				{Title: "Customer Segments"},
			}},
			{Title: "Channels & Metrics", Columns: []CellConfig{
				{Title: "Existing Alternatives"},
				{Title: "Key Metrics"},
				{Title: "High-Level Concept", ColSpan: 2},
				{Title: "Channels"},
				{Title: "Early Adopters"},
			}},
			{Title: "Finances", Columns: []CellConfig{
				{Title: "Cost Structure", ColSpan: 3},
				{Title: "Revenue Streams", ColSpan: 3},
			}},
		},
	},
	TemplateValueProposition: {
		Name:        "Value Proposition Canvas",
		Type:        TemplateValueProposition,
		Description: "Osterwalder's Value Proposition Canvas for product-market fit",
		Rows: []RowConfig{
			{Title: "Customer Profile", Columns: []CellConfig{
				{Title: "Customer Jobs", Description: "What are they trying to get done?"},
				{Title: "Pains", Description: "What frustrates them?"},
				{Title: "Gains", Description: "What outcomes do they want?"},
			}},
			{Title: "Value Map", Columns: []CellConfig{
				{Title: "Products & Services", Description: "What do you offer?"},
				{Title: "Pain Relievers", Description: "How do you address pains?"},
				{Title: "Gain Creators", Description: "How do you create gains?"},
			}},
		},
	},
	TemplateOST: {
		Name:        "Opportunity Solution Tree",
		Type:        TemplateOST,
		Description: "Teresa Torres's OST for continuous discovery",
		Rows: []RowConfig{
			{Title: "Outcome", Columns: []CellConfig{
				{Title: "Desired Outcome", Description: "What metric are we trying to move?", ColSpan: 4},
			}},
			{Title: "Opportunities", Columns: []CellConfig{
				{Title: "Opportunity 1"}, {Title: "Opportunity 2"}, {Title: "Opportunity 3"}, {Title: "Opportunity 4"},
			}},
			{Title: "Solutions", Columns: []CellConfig{
				{Title: "Solution A"}, {Title: "Solution B"}, {Title: "Solution C"}, {Title: "Solution D"},
			}},
			{Title: "Experiments", Columns: []CellConfig{
				{Title: "Experiment 1"}, {Title: "Experiment 2"}, {Title: "Experiment 3"}, {Title: "Experiment 4"},
			}},
		},
	},
}

PredefinedTemplates contains ready-to-use template configurations.

Functions

This section is empty.

Types

type CellConfig

type CellConfig struct {
	Title       string `json:"title"`
	Description string `json:"description,omitempty"`
	ColSpan     int    `json:"colSpan,omitempty"`
	Color       string `json:"color,omitempty"`
}

CellConfig defines a cell in a strategic model row.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client wraps w3pilot for Aha! browser automation.

func NewClient

func NewClient(cfg Config) *Client

NewClient creates a new browser automation client.

func (*Client) BaseURL

func (c *Client) BaseURL() string

BaseURL returns the Aha base URL for this subdomain.

func (*Client) Close

func (c *Client) Close(ctx context.Context) error

Close closes the browser.

func (*Client) CreateStrategicModelTemplate

func (c *Client) CreateStrategicModelTemplate(ctx context.Context, productKey string, config TemplateConfig) (*CreateTemplateResult, error)

CreateStrategicModelTemplate creates a strategic model template in Aha! via browser automation.

func (*Client) IsLoggedIn

func (c *Client) IsLoggedIn() bool

IsLoggedIn returns whether the client is logged in.

func (*Client) Launch

func (c *Client) Launch(ctx context.Context) error

Launch starts the browser.

func (*Client) Login

func (c *Client) Login(ctx context.Context) error

Login authenticates with Aha! using email and password.

func (*Client) NavigateTo

func (c *Client) NavigateTo(ctx context.Context, path string) error

NavigateTo navigates to a specific URL path within Aha.

func (*Client) Pilot

func (c *Client) Pilot() *w3pilot.Pilot

Pilot returns the underlying w3pilot instance for advanced operations.

func (*Client) Screenshot

func (c *Client) Screenshot(ctx context.Context) ([]byte, error)

Screenshot takes a screenshot and returns PNG bytes.

func (*Client) Title

func (c *Client) Title(ctx context.Context) (string, error)

Title returns the current page title.

func (*Client) URL

func (c *Client) URL(ctx context.Context) (string, error)

URL returns the current page URL.

type Config

type Config struct {
	Subdomain string
	Email     string
	Password  string
	Headless  bool
	Timeout   time.Duration
}

Config holds browser client configuration.

type CreateTemplateResult

type CreateTemplateResult struct {
	Success    bool   `json:"success"`
	TemplateID string `json:"template_id,omitempty"`
	URL        string `json:"url,omitempty"`
	Error      string `json:"error,omitempty"`
	Screenshot []byte `json:"screenshot,omitempty"`
}

CreateTemplateResult contains the result of creating a template.

type RowConfig

type RowConfig struct {
	Title   string       `json:"title"`
	Columns []CellConfig `json:"columns"`
}

RowConfig defines a row in a strategic model.

type TemplateConfig

type TemplateConfig struct {
	Name        string       `json:"name"`
	Type        TemplateType `json:"type"`
	Description string       `json:"description"`
	Rows        []RowConfig  `json:"rows"`
}

TemplateConfig defines a strategic model template configuration.

func GetPredefinedTemplate

func GetPredefinedTemplate(templateType TemplateType) (TemplateConfig, bool)

GetPredefinedTemplate returns a predefined template by type.

func ListPredefinedTemplates

func ListPredefinedTemplates() []TemplateConfig

ListPredefinedTemplates returns all available predefined templates.

type TemplateType

type TemplateType string

TemplateType represents the type of strategic model template.

const (
	TemplateCapabilityStack   TemplateType = "capability-stack"
	TemplateMaturityModel     TemplateType = "maturity-model"
	TemplateOpportunityPatton TemplateType = "opportunity-patton"
	TemplateFeatureCanvas     TemplateType = "feature-canvas"
	TemplateBusinessModel     TemplateType = "business-model"
	TemplateLeanCanvas        TemplateType = "lean-canvas"
	TemplateValueProposition  TemplateType = "value-proposition"
	TemplateOST               TemplateType = "opportunity-solution-tree"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL