Skip to contentVibraUI
8 pagesopens at /saas

SaaS

The numbers a subscription business watches: revenue, usage, retention, where the users are and what is happening right now.

Preview
/saas

Install

The whole dashboard — every page under one sidebar, the sample data they read — is one command. Or take a page at a time: each one brings the sidebar with it.

npx shadcn@latest add @vibra/saas

Widgets

Single cards cut from these pages, each installed on its own.

  • The Headline numbers card
    npx shadcn@latest add @vibra/widget-saas-overview-overview-stats
    From Analytics overview

    Headline numbers

    Visitors, signups, signup rate and median session over the range, each with its change and a sparkline, as tiles that pick what the traffic chart plots; reads overviewStatsByRange().

  • The Traffic over time card
    npx shadcn@latest add @vibra/widget-saas-overview-traffic-chart
    From Analytics overview

    Traffic over time

    The chosen measure a day at a time, the launch post marked and the period before drawn dashed on request, with CSV, PNG and print exports; reads trafficByRange().

  • The Traffic sources card
    npx shadcn@latest add @vibra/widget-saas-overview-traffic-sources
    From Analytics overview

    Traffic sources

    Visitors by where they arrived from, as a donut with the total in its centre; reads trafficSourcesByRange().

  • The Top pages card
    npx shadcn@latest add @vibra/widget-saas-overview-top-pages
    From Analytics overview

    Top pages

    The six most-read pages ranked by views, and how many pages saw any traffic; reads topPagesByRange().

  • The Team activity card
    npx shadcn@latest add @vibra/widget-saas-overview-recent-activity
    From Analytics overview

    Team activity

    What the team changed, newest first and grouped by day, from the workspace's audit trail; reads recentActivity().

  • The Recent signups card
    npx shadcn@latest add @vibra/widget-saas-overview-recent-signups
    From Analytics overview

    Recent signups

    The newest workspaces with their plan, status and join date, sortable, paged and with row actions; reads recentSignups().

  • The Monthly recurring revenue card
    npx shadcn@latest add @vibra/widget-saas-revenue-revenue-hero
    From Revenue dashboard

    Monthly recurring revenue

    The closing book counted up, its change on the month and on the year, the customer count, and ARPU, gross churn, lifetime value and gross retention beside it; reads revenueHeadline().

  • The Movement card
    npx shadcn@latest add @vibra/widget-saas-revenue-revenue-rollups
    From Revenue dashboard

    Movement

    New, churned and net new MRR and the growth rate over a month, a quarter or a year, each figure rolling to its new reading when the window changes; reads revenueWindows().

  • The Revenue by plan card
    npx shadcn@latest add @vibra/widget-saas-revenue-revenue-by-plan
    From Revenue dashboard

    Revenue by plan

    Twelve closed months of MRR stacked by plan, with the quarter's target drawn across them; reads revenueByPlan().

  • The Quarter to date card
    npx shadcn@latest add @vibra/widget-saas-revenue-quarter-goal
    From Revenue dashboard

    Quarter to date

    Net new MRR booked this quarter against the board's target, the months gone marked on the track and the days left under it; reads quarterGoal().

  • The Net new MRR card
    npx shadcn@latest add @vibra/widget-saas-revenue-mrr-movements
    From Revenue dashboard

    Net new MRR

    The year's walk from the opening book — what started paying, what stopped, and the net between — as a waterfall; reads mrrMovements().

  • The Revenue mix card
    npx shadcn@latest add @vibra/widget-saas-revenue-revenue-mix
    From Revenue dashboard

    Revenue mix

    The closing book split by plan in one bar, and Enterprise's share of it now against a year ago; reads revenueMix().

  • The Top customers card
    npx shadcn@latest add @vibra/widget-saas-revenue-top-customers
    From Revenue dashboard

    Top customers

    The accounts paying the most, with their plan, owner, MRR and change on the month, and what share of the book they are together; reads topCustomers().

  • The Committed usage card
    npx shadcn@latest add @vibra/widget-saas-revenue-committed-usage
    From Revenue dashboard

    Committed usage

    How much of each allowance customers pay for they actually use, one meter an allowance; reads committedUsage().

  • The Usage headline card
    npx shadcn@latest add @vibra/widget-saas-usage-usage-stats
    From Product usage dashboard

    Usage headline

    Monthly, weekly and daily active users and stickiness, each against the same day a week earlier; reads usageStats().

  • The Active users card
    npx shadcn@latest add @vibra/widget-saas-usage-active-users-chart
    From Product usage dashboard

    Active users

    Daily and weekly active users drawn against the monthly population over the window, and how many used the product on the last full day; reads activeUsers().

  • The Top accounts card
    npx shadcn@latest add @vibra/widget-saas-usage-top-accounts
    From Product usage dashboard

    Top accounts

    The accounts with the most people in the product this month, ranked; reads topAccounts().

  • The Feature adoption card
    npx shadcn@latest add @vibra/widget-saas-usage-feature-adoption
    From Product usage dashboard

    Feature adoption

    The share of live accounts that touched each surface, week by week, as a heatmap, and the surface used most widely this week; reads adoptionGrid().

  • The Retention card
    npx shadcn@latest add @vibra/widget-saas-usage-retention-curve
    From Product usage dashboard

    Retention

    How much of a signup cohort is still here week by week, down to the floor the curve settles on; reads retention().

  • The Event stream card
    npx shadcn@latest add @vibra/widget-saas-usage-event-stream
    From Product usage dashboard

    Event stream

    What accounts changed in the product, newest first and grouped by day; reads eventStream().

  • The Retention headline card
    npx shadcn@latest add @vibra/widget-saas-retention-retention-stats
    From Retention dashboard

    Retention headline

    How many signed up, and how many of them were still here a week, four weeks and eight weeks on; reads retentionStats().

  • The Retention by weekly cohort card
    npx shadcn@latest add @vibra/widget-saas-retention-cohort-heatmap
    From Retention dashboard

    Retention by weekly cohort

    Each week's signups down the side and each week of their life along the top, the share still active in every cell; reads cohortGrid().

  • The Who stayed card
    npx shadcn@latest add @vibra/widget-saas-retention-segment-bubbles
    From Retention dashboard

    Who stayed

    The live accounts by plan, one bubble a plan, sized by how many; reads segments().

  • The Retention curves card
    npx shadcn@latest add @vibra/widget-saas-retention-retention-curves
    From Retention dashboard

    Retention curves

    The oldest cohorts as lines against the average of every cohort, week by week; reads retentionCurves().

  • The Signups a week card
    npx shadcn@latest add @vibra/widget-saas-retention-weekly-signups
    From Retention dashboard

    Signups a week

    Every cohort at the size it opened, with the weekly target drawn across; reads signupsByWeek().

  • The Global headline card
    npx shadcn@latest add @vibra/widget-saas-global-global-stats
    From Global analytics dashboard

    Global headline

    Sessions over the last day, the countries they came from, p95 response weighted by where the traffic was, and booked revenue across the paid orders; reads globalStats().

  • The Where today came from card
    npx shadcn@latest add @vibra/widget-saas-global-sessions-map
    From Global analytics dashboard

    Where today came from

    A world map of the last day's sessions, a marker a country sized by its traffic; reads mapMarkers().

  • The Sessions by country, last 24 hours card
    npx shadcn@latest add @vibra/widget-saas-global-country-sessions
    From Global analytics dashboard

    Sessions by country, last 24 hours

    The busiest countries of the last day, ranked, out of every country with traffic; reads countryTraffic().

  • The Revenue by region card
    npx shadcn@latest add @vibra/widget-saas-global-revenue-by-region
    From Global analytics dashboard

    Revenue by region

    Booked value by the region the account is in; reads revenueByRegion().

  • The Recent orders card
    npx shadcn@latest add @vibra/widget-saas-global-recent-orders
    From Global analytics dashboard

    Recent orders

    The eight newest orders from anywhere, with their account, country, status and total; reads recentOrders().

  • The Live headline card
    npx shadcn@latest add @vibra/widget-saas-live-live-stats
    From Live traffic dashboard

    Live headline

    Active sessions, events a minute, p95 response and error rate, each rolling to the newest reading with its change and a sparkline of the ones before; reads liveFrames().

  • The Country ticker card
    npx shadcn@latest add @vibra/widget-saas-live-live-ticker
    From Live traffic dashboard

    Country ticker

    The busiest countries scrolling past, each with its sessions and its change since the last reading, and whether the clock is running; reads countriesNow().

  • The Live events card
    npx shadcn@latest add @vibra/widget-saas-live-live-events
    From Live traffic dashboard

    Live events

    Everything the platform did in the last few minutes, a row landing every few seconds; reads liveRows().

  • The Sessions by country, last hour card
    npx shadcn@latest add @vibra/widget-saas-live-sessions-by-country
    From Live traffic dashboard

    Sessions by country, last hour

    The hour just gone, busiest country first; reads countriesNow().

  • The p95 by country card
    npx shadcn@latest add @vibra/widget-saas-live-latency-by-country
    From Live traffic dashboard

    p95 by country

    Each busy country's p95 response over the hour just gone, against the objective drawn across; reads countriesNow().

  • The Subscriptions headline card
    npx shadcn@latest add @vibra/widget-saas-subscriptions-subscription-stats
    From Subscriptions dashboard

    Subscriptions headline

    MRR across the paying subscriptions, live subscriptions of every one ever opened, trials not billing yet, and the average paying account; reads subscriptionStats().

  • The MRR bridge card
    npx shadcn@latest add @vibra/widget-saas-subscriptions-mrr-movements
    From Subscriptions dashboard

    MRR bridge

    Opening book, new, churn and closing book over the window, as a waterfall that closes to the cent; reads mrrMovements().

  • The Plan mix card
    npx shadcn@latest add @vibra/widget-saas-subscriptions-plan-mix
    From Subscriptions dashboard

    Plan mix

    The live subscriptions by tier as a donut, with the live total in its centre; reads planMix().

  • The Retention by monthly cohort card
    npx shadcn@latest add @vibra/widget-saas-subscriptions-churn-cohorts
    From Subscriptions dashboard

    Retention by monthly cohort

    Each month's signups and the share of them still on the book, month by month, as a heatmap; reads churnCohorts().

  • The Trials expiring card
    npx shadcn@latest add @vibra/widget-saas-subscriptions-trials-expiring
    From Subscriptions dashboard

    Trials expiring

    The trials closest to running out, soonest first, each with its contact, plan, seats and days left; reads trialsExpiring().

  • The Subscriptions card
    npx shadcn@latest add @vibra/widget-saas-subscriptions-subscription-table
    From Subscriptions dashboard

    Subscriptions

    Every subscription ever opened, newest first — searchable, filterable, sortable and paged; reads subscriptionRows().

  • The Customers headline card
    npx shadcn@latest add @vibra/widget-saas-customers-customer-stats
    From Customers dashboard

    Customers headline

    Live workspaces of every one created, new last month against the month before, paying accounts and churned ones; reads customerStats().

  • The Growth by month card
    npx shadcn@latest add @vibra/widget-saas-customers-growth-by-month
    From Customers dashboard

    Growth by month

    New workspaces a month, the month in progress projected to its end at the trailing daily rate; reads growthByMonth().

  • The Acquisition funnel card
    npx shadcn@latest add @vibra/widget-saas-customers-acquisition-funnel
    From Customers dashboard

    Acquisition funnel

    Every workspace ever opened, down through the live, the paid and the billing ones to Team or Enterprise, with the clicks and leads that brought them in; reads acquisitionFunnel().

  • The Campaign goals card
    npx shadcn@latest add @vibra/widget-saas-customers-campaign-goals
    From Customers dashboard

    Campaign goals

    Conversions against target for the five campaigns that bought the most clicks, each with its state and dates; reads campaignGoals().

  • The Directory card
    npx shadcn@latest add @vibra/widget-saas-customers-customer-directory
    From Customers dashboard

    Directory

    Every workspace, newest first — searchable, filterable by plan and status, sortable and paged; reads directory().

Reads from db

Every figure on these pages is read from these repositories of the sample store. Swap one for your own API and each page that reads it follows.

  • db.auditEvents
  • db.campaigns
  • db.cohorts
  • db.customers
  • db.members
  • db.notifications
  • db.orders
  • db.plans
  • db.sessions
  • db.subscriptions