Forge your plan.
A pricing page is usually a React app in disguise — toggles, steppers, a total that recomputes, upsell logic, the works. This one is a single Markdown file. Pick a tier, set your seats, switch features on, and watch the price move.
1 · Choose a tier
Starter
$12/mo base
For solo builders and side projects finding their footing.
Current tier
Team
$20/mo base
The popular pick — for small teams shipping every week.
Current tier
Current tier
Business
$40/mo base
Scale, controls, and the headroom growing orgs need.
Current tier
2 · Set your seats
Every plan includes a generous base; each additional seat is a flat $8/mo. The stepper is just :button actions on a :state number.
3 seats
At 25+ seats, talk to us — volume pricing kicks in.
3 · Add features
Toggle the capabilities you need. Each card lights up when it's on and folds straight into the total.
Advanced analytics
+$25/mo
Funnels, retention cohorts, and a real-time dashboard your whole team can read.
On — counted in your total
SSO & SAML
+$50/mo
One-click sign-in with Okta, Google Workspace, or Entra — plus SCIM provisioning.
On — counted in your total
Priority support
+$40/mo
A private channel, a named engineer, and a one-hour first-response SLA.
On — counted in your total
Teams that turn on SSO almost always add Priority support — fewer locked-out admins at 2am.
Nice stack. With analytics on a plan this size, most teams see ROI inside the first month.
You've unlocked the annual discount — pay yearly and two months are on us.
Just the essentials so far. Add a feature above to see how the total moves.
Just the essentials so far. Add a feature above to see how the total moves.
Your plan
$44
per month
Base plan · $20/mo
3 seats · $24/mo
Add-ons · $0/mo
Billed annually: $440/yr — you save $88 vs. monthly.
A month-to-month list price would run $528/yr. Choose yearly at checkout to lock the discount.
4 · Start your trial
Drop in your details and we'll spin up your $44/mo workspace — no charge for 14 days.
You're in 🎉
We've reserved your plan at $44/mo (3 seats). Confirmation sent at — check your inbox to finish setup.
Your plan today: $44/mo · billed annually at $440/yr. You can change tiers or seats any time.
Your plan today: $44/mo · billed annually at $440/yr. You can change tiers or seats any time.
Something went wrong:
It's just Markdown
No JSX, no useState, no pricing library. The tier buttons, the seat stepper, the feature toggles, the live total, the upsell hints, and the checkout are all directives in one .wd file. The pricing engine is a single :computed line:
View source — it's Markdown
:state base = 20
:state seats = 3
:state analytics = false
:state sso = false
:state priority = false
:computed total = base + seats*8 + analytics*25 + sso*50 + priority*40
:computed annualBill = total*10
:computed annualSaved = total*2
The price is ${ total }/mo.
::: card .tier .on when base == 20
:button "Select Team" -> base = 20
:::
:button "–" -> seats -= 1
:button "+" -> seats++
::: card .feature .on when analytics
:if analytics
:button "Remove" -> analytics toggle
:else
:button "Add analytics" -> analytics toggle
:endif
:::
:if sso and not priority
Teams that turn on SSO almost always add Priority support.
:endif
:if total > 150
You've unlocked the annual discount.
:endif
:button "Reset everything" -> base reset; seats reset; analytics reset; sso reset; priority reset
Booleans coerce in arithmetic, so analytics*25 is 25 when the toggle is on and 0 when it's off — that one rule is the whole pricing engine. Read the docs or see the reactive page.