PLG engine: Find where new workspaces stall before choosing an intervention.
Workspace-level activation, product-qualified accounts, usage limits and the MRR bridge, with a nudge you can send to the exact workspaces stuck on one step. Shown as the workspace for Cadenza, a scheduling API for product teams.
The problem
Individual signups are a poor proxy for product adoption when value is created by a workspace. One user’s activity can hide an inactive team, and lifecycle messages can continue after activation or payment. This system is designed to connect product events, workspace identity, activation rules, intervention eligibility and recurring-revenue movements.
How the system is built
- SourcesPostHog events, Segment identity, Customer.io delivery events and Stripe.
- IngestionDesigned event consumers, billing webhooks and daily reconciliation workers.
- NormalizationCanonical user/workspace IDs, event contracts and billing mappings.
- StoragePostgres event ledger, workspace aggregates, rule versions and MRR movements.
- DecisionsActivation, product-qualified accounts and intervention suppression.
- DashboardWorkspace adoption, activation evidence, interventions and revenue bridge.
- Write-backsApproved Customer.io audience changes and lifecycle attributes.
The dashboard
13 views: Today, Growth summary, Product-qualified leads, Support handoffs, Signup funnel, Activation cohorts, Workspaces, Usage limits, Upgrades, Sales assist, Revenue, Experiments, Event stream.
The activation ladder: five milestones as bars to scale, each with the stack of workspaces currently stuck there and how long they have been waiting.
State lives in the URL (view, filters, date range), records open in drawers with their history, and every action that changes something is written to an activity log and is safe to repeat.
Data model
workspaces(id, created_at, plan, stripe_customer_id)users(id, workspace_id, segment_id, consent_state)product_events(id, event_id, workspace_id, user_id, name, occurred_at)activation_states(id, workspace_id, rule_version, achieved_at)pqa_states(id, workspace_id, rule_version, state, evidence)interventions(id, workspace_id, campaign_id, state, sent_at)subscriptions(id, stripe_id, workspace_id, mrr_cents, status)mrr_movements(id, subscription_id, type, delta_cents, effective_at).
Rules in the backend
- Proposed activation: within 14 days, a workspace imports data, completes a core action and records participation by two distinct members.
- Proposed PQA: activated workspace with three weekly active members and five core actions in the trailing seven days.
- Recompute affected aggregates when late events arrive; never count duplicate
event_idvalues. - Suppress activation nudges after activation, opt-out or account closure; cap designed interventions at one per workspace per 72 hours.
- MRR bridge: opening MRR plus new, expansion and reactivation, minus contraction and churn, equals closing MRR. Exclude one-time charges.
Storage
Recommend Supabase Postgres with tenant/workspace RLS. Retain raw application events for 90 days and aggregates for 24 months, subject to consent and contractual requirements. Minimize event properties and prohibit secrets or sensitive free text.
Reliability
Handle out-of-order events, webhook redelivery and billing reconciliation. Use an intervention outbox, bounded retries and a dead-letter queue. Display “Synced” timestamps, incomplete event windows, identity failures and provisional revenue calculations.
Security and access
Workspace-scoped authentication separates product analysts, lifecycle operators and approvers. Clients receive read-only views. Billing and messaging keys remain server-side; identity merges require review and audit evidence.
Cost
PostHog event volume, Segment usage, Customer.io profiles/messages, database processing and Stripe fees vary by plan and usage. Adoption or revenue gains are not established.
Use it
The window above runs the full workspace. Pause the tour and click through it, or open it full screen.
Technology stack
PostHogSegment
Customer.io
Stripe
Intercom
HubSpot
Source & context
Designed and built by Ahmad Bukhari in November 2026.
The working interface represents workspace activation and revenue logic; production event contracts, messaging and billing integrations remain designed connections.
Built: 2026-11-03
Map a workflow like this
Start with the handoffs your team already runs and where they break.