Repository navigation
Ship paid billing (Dodo) on main matching revised pricing (#60); pricing page 404 #66
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or requestseverity: highMajor gap or broken flow for many usersMajor gap or broken flow for many users
Description
Background
Updated 19 Oct 2026 after the platform migration (#81) landed on main.
Billing is now on main: PR #16 was merged, and billing runs on @codelitdev/billing 0.4.1 with the Platform Dodo adapters. These parts are already in place:
- Org-wide monthly send accounting:
reserveSendruns on marketing (apps/api/src/mail/worker.ts), transactional (apps/api/src/transactional/queries.ts) and outbound sends (apps/api/src/delivery-feedback/outbound-send.ts), and enforcesmonthlySendsLimit. - Per-org limit overrides live in
organization_plan_policies(ADR 0002), not in the billing tables. - The "Sent with SendLit" footer is driven by
marketingBranding.
What is still wrong:
apps/api/src/billing/policies.tsstill has the old ladder:PlanId = "oss" | "free" | "pro" | "business", with nostarter- Free: 1,000 subscribed contacts, 3,000 sends
- Pro: 5 teams, 10,000 contacts, no send cap (
fairUse) - Business: 25 teams, no send cap (
fairUse)
- That contradicts the revised pricing in Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60 (Starter $10 / Pro $29 or $39 / Business $99, priced on sends and teams, unlimited contacts). Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60's open decisions 1-4 are still unanswered.
- Plan lists in other places only know
proandbusiness:billing.config.ts(planIds,requiredOfferKeys),billing/catalog.ts(catalog keys,BillingPlan,BILLING_*env vars),paidPlan()inpolicies.ts,packages/api-contractbilling schemas, the MCPteamstool, the SDK types and the web Organizations page. - Overage is not built. Only
teamsLimitOverrideandcontactsLimitOverrideexist; there is noextraSendBlocksorextraTeams. apps/docs/content/docs/workspace/pricing.mdxshows the old table. It also says SendLit "does not sell add-on packs" and that Pro and Business have no send charge.https://sendlit.app/pricingreturns 404. The nav links to/#pricing. The marketing site is not in this repo.
Related: #56 (upgrade vs new-org checkout dialog), #57 (Free plan badge), #22 (Dodo webhook quarantine).
This blocks inviting beehiiv switchers: they need to be able to pay for a plan that matches what we advertise.
Proposed fix
- Resolve Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60's open decisions (Pro $29 vs $39, Starter footer, Business tier, migration of existing Pro).
- Update
policies.tsto the Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60 table:- add
starter - set
subscribedContactsLimit: nullon every plan - set org-wide monthly send limits on every cloud plan
- drop
fairUseif every paid plan has a hard cap - extend
paidPlan()to includestarter - make the
monthly_sendslimit error report the next plan up instead of always"pro"
- add
- Add
startereverywhere plans are listed:billing.config.ts, then runcodelit-billing generate, add a drizzle migration and keepcheck:driftgreen- the catalog keys and
BILLING_STARTER_*env vars - the API contract, REST docs, MCP tools, SDK and dashboard
- Grandfather existing orgs before the new limits take effect. Limits come from code, so existing Pro (5 teams down to 3) and Business (25 teams down to 15) orgs over the new team limit need a
teamsLimitOverrideset in a data migration. - Overage: either ship hard caps that ask users to upgrade and track overage separately, or add a send-limit override and Dodo add-on products now. Hard caps first is recommended.
- Remove or keep the now-unused contact-limit enforcement in
billing/entitlements.ts. Keep thecontacts_limit_overridecolumn so the schema stays compatible with the previous release. - Create the Dodo products (monthly and annual) for Starter, Pro and Business. Wire checkout, upgrade (Difference in upgrade and new org checkout dialog #56) and webhooks (Ignore other brands' Dodo webhooks and quarantine unknown products with operation_quarantined #22).
- Update
apps/docs/content/docs/workspace/pricing.mdx. Publish a pricing page atsendlit.app/pricing, or make the/#pricingsection complete, and keep both in sync with the policies.
Acceptance criteria
- Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60 decisions recorded on Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60
- Billing code merged to
main; PR Subscriptions #16 closed or superseded -
policies.tsmatches Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60, includingstarterand unlimited contacts -
starteris supported by the billing config, catalog, API contract, MCP, SDK and dashboard - Existing Pro/Business orgs over the new team limits are grandfathered via overrides
- Checkout and upgrade work end to end on app.sendlit.app for every paid plan (tested with a real Dodo test-mode purchase)
- Docs pricing page matches
policies.ts -
sendlit.app/pricingreturns 200, or the nav points to a working pricing section with the same numbers aspolicies.ts - Tests cover the plan limits (teams, sends, footer)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestseverity: highMajor gap or broken flow for many usersMajor gap or broken flow for many users
Type
Projects
- StatusShow more project fieldsDone
Activity
zekfer38-netizen commentedon Oct 19, 2026
clbotdev commentedon Oct 25, 2026
Closing: paid billing is live on production and matches #60.
policies.tshas Starter, Pro and Business with unlimited contacts. Starter is supported in the billing config, catalog, API contract, MCP, SDK (sendlit@0.2.0) and dashboard. Existing organizations keep their teams via0016_grandfather_team_limits. Tests inpolicies.test.tscover each plan.api.sendlit.app/billing/catalogserves revision 2 with the Revise hosted pricing plans: Starter, Pro and Business priced on sends and teams, unlimited contacts #60 prices (Starter $10/$100, Pro $29/$290, Business $99/$990), and checkout is available.sendlit.app/pricingreturns 200 with the same prices and limits, and the homepage navigation links to it. The docs pricing page matchespolicies.ts.