Intentflow: Open-Source UX Flow Engine for Product-Led Growth Teams

Intentflow is an open-source UX engine to trigger modals, tooltips, and banners using YAML, flags, and LLMs—built for growth teams.
Intentflow: Open-Source UX Flow Engine for Product-Led Growth Teams

At Mixpeek, we track a lot: homepage interactions, docs exploration, demo CTAs, SDK installs. Like most growth-minded teams we're rich in hypotheses—and poor in implementation bandwidth.

We needed a way to ship contextual UX flows fast without hard-coding logic into every page or paying for heavyweight onboarding suites.

So we built Intentflow—an open-source engine that lets anyone define banners, tooltips, and modals in YAML and render them dynamically with React.


Quick Install

npm install intentflow
import { IntentflowProvider } from 'intentflow';

<IntentflowProvider>
  <App />
</IntentflowProvider>

What Is Intentflow?

Think of Intentflow as feature flags for UX flows. You describe a journey declaratively and Intentflow handles flag tracking and component rendering.

# schedule_meeting.yaml

goals:
  schedule_meeting:
    steps:
      - id: viewed_pricing
        event: page_view
        path: "/pricing"
        set_flag: viewed_pricing
      - id: clicked_cta
        event: click
        selector: ".cta-button"
        requires_flags: [viewed_pricing]
        set_flag: interested_user

Wrap components with hooks like useUXFlag, useUXStep, or drop in <Modal> / <Tooltip> and let the flow engine do the rest.


Why Existing Tools Fell Short

Tool Why It Didn't Work
Appcues / Pendo Too heavy, rigid, and pricey
PostHog / Segment Great tracking, no UI control
Custom JS Hard to maintain across 20+ pages

We wanted:

  • Version-controlled YAML
  • Full control over rendering
  • Built-in flag tracking
  • No vendor lock-in / minimal JS

Intentflow gave us that—and nothing else did.


How We Use Intentflow at Mixpeek

  • Homepage Engagement – set flags like viewed_pricing, hovered_demo
  • Contextual Onboarding – trigger tooltips on docs & dashboards
  • Demo & Lead Capture – show modals when a user signals intent but hasn't converted
  • Dynamic Banners – guide sign-ups based on scroll-depth & exits

All defined in YAML, reviewed in PRs, and shipped in minutes.


Analytics Integrations

Intentflow broadcasts every captureEvent to any provider you initialise.

Provider Focus OSS? Init Example
PostHog Product analytics + feature flags Yes initPostHog('PH_KEY')
Amplitude Growth analytics & cohorts No initAmplitude('AMP_KEY')
Heap Auto-captured events No initHeap('HEAP_APP_ID')
RudderStack CDP / data pipeline Partial initRudderStack('WRITE_KEY','https://rs.acme.com')
Snowplow Behavioural data platform Yes initSnowplow('https://collector.acme.com')
Matomo GDPR-focused analytics Yes initMatomo('SITE_ID','https://matomo.acme.com')

LLM-Driven Decisioning

Need smarter targeting? Evaluator lets you ask your favourite model which component to render.

Provider Model Family Init Example
OpenAI ChatGPT GPT-3.5 / GPT-4 new Evaluator('openai', OPENAI_KEY)
Google Gemini Gemini-Pro new Evaluator('gemini', GEMINI_KEY)
Anthropic Claude Claude 3 new Evaluator('claude', ANTHROPIC_KEY)
const decision = await evaluator.evaluate({
  flags: { viewed_pricing: true },
  components: [{ id: 'modal1', type: 'modal' }],
  goal: 'schedule_meeting',
  page: '/pricing'
});

Supercharge with Mixpeek

Pair Intentflow with Mixpeek's retrieval engine to:

  1. Retrieve the best YAML flow for a session
  2. Cluster historical sessions to surface winning patterns
  3. Personalise without cookies using multimodal vectors
import { retrieveFlow } from 'intentflow/mixpeek';
const flow = await retrieveFlow("User hovered CTA, watched demo");

Roadmap

  • Devtools overlay to inspect flags live
  • LLM prompt builder playground
  • Component A/B testing with clustering insights
  • Vue, Svelte & Solid bindings

Open Source & Contributing

Intentflow is free & open-source under the permissive Apache-2.0 license.

We welcome pull requests for:

  • New analytics adapters
  • Additional framework bindings
  • Docs & examples
  • Bug fixes / performance tweaks

→ Fork the repo, open a PR, and build the composable UX engine growth teams deserve.


Ready to Try?

npm install intentflow

Ship contextual UX in minutes—not days. Built for devs. Designed for growth. Powered by Mixpeek.

About the author
Ethan Steininger

Ethan Steininger

Former lead of MongoDB's Search Team, Ethan noticed the most common problem customers faced was building indexing and search infrastructure on their S3 buckets. Mixpeek was born.

Mixpeek Engineering Blog

Deep dive into multimodal AI, data processing, and best practices from our engineering team.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to Mixpeek Engineering Blog.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.