-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New pricing updates #980
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New pricing updates #980
Conversation
WalkthroughCap Pro pricing updated across desktop and web: monthly from $9 to $12 and annual-equivalent from $6 to $8.16. FAQ, marketing pages, and copy adjusted. Stripe plan IDs for production updated in desktop and shared utils. One type declaration file reformatted for quoting; no logic changes. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
apps/web/data/homepage-copy.ts (2)
245-248: Fix discount label: 33% → 32%.$12 → $8.16 is a 32% savings, not 33%. Correct the label to avoid misleading pricing.
Apply this diff:
- annually: "Annual (save 33%)", + annually: "Annual (save 32%)",
290-293: Typo in user-facing copy (“linkes”).Correct spelling to “links”.
Apply this diff:
- "Native desktop apps for macOS (Apple Silicon & Intel) and Windows. View your shareable linkes from anywhere.", + "Native desktop apps for macOS (Apple Silicon & Intel) and Windows. View your shareable links from anywhere.",
🧹 Nitpick comments (7)
apps/web/components/UpgradeModal.tsx (2)
67-70: Avoid hard-coded prices; derive from shared source.Use homepageCopy (or a shared constants module) to prevent drift from ProCard and marketing copy.
Apply this diff:
@@ -import { buildEnv } from "@cap/env"; +import { buildEnv } from "@cap/env"; +import { homepageCopy } from "../data/homepage-copy"; @@ - const pricePerUser = isAnnual ? 8.16 : 12; + const CAP_PRO_ANNUAL_PRICE_PER_USER = + homepageCopy.pricing.pro.pricing.annual; + const CAP_PRO_MONTHLY_PRICE_PER_USER = + homepageCopy.pricing.pro.pricing.monthly; + const pricePerUser = isAnnual + ? CAP_PRO_ANNUAL_PRICE_PER_USER + : CAP_PRO_MONTHLY_PRICE_PER_USER;
59-61: Return null from React component guard.Prefer
return null;over barereturn;for clarity.Apply this diff:
- if (buildEnv.NEXT_PUBLIC_IS_CAP !== "true") return; + if (buildEnv.NEXT_PUBLIC_IS_CAP !== "true") return null;apps/web/components/pages/FaqPage.tsx (1)
12-13: Consider adding monthly price for clarity.Optionally include “or $12/month billed monthly” to preempt questions.
packages/utils/src/constants/plans.ts (1)
9-10: Stripe price IDs updated—consider DRY refactor
Old IDs are fully removed ✅ and the new IDs only appear in:
- packages/utils/src/constants/plans.ts
- apps/desktop/src/utils/plans.ts
Optional: centralize/export plan IDs (e.g. from utils) so both desktop and web share one source and avoid future drift.
apps/web/components/pages/seo/LoomAlternativePage.tsx (1)
30-30: Avoid hard-coded prices; import and interpolate from shared pricing data
- In apps/web/components/pages/seo/LoomAlternativePage.tsx, replace the literal “$8.16/month” with a template literal using homepageCopy.pricing.pro.pricing.annual (e.g.
starts from ${formatMoney(homepageCopy.pricing.pro.pricing.annual)}/month per user).- In FreeScreenRecorderPage.tsx and ScreenRecordingSoftwarePage.tsx, replace “$6/month” with
${formatMoney(homepageCopy.pricing.pro.pricing.monthly)}.- Use a consistent money formatter (e.g. Intl.NumberFormat or existing formatMoney) when interpolating numeric values.
- Repo-wide search for “$6” to catch any remaining hard-coded pricing.
packages/ui-solid/src/auto-imports.d.ts (1)
9-9: Generated file shows mixed quoting styleNo functional impact, but confirm this file is generator-owned and not manually edited. If style changed, re-run the generator or align its config for consistency.
Also applies to: 16-16, 55-55, 81-81
apps/desktop/src/utils/plans.ts (1)
9-10: Use the shared plan‐ID util instead of duplicating values
In apps/desktop/src/utils/plans.ts (lines 9–10), import and call the existing getProPlanId (or directly reference planIds) from packages/utils/src/constants/plans.ts rather than hardcoding “price_…” strings.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (10)
apps/desktop/src/routes/(window-chrome)/upgrade.tsx(2 hunks)apps/desktop/src/utils/plans.ts(1 hunks)apps/web/components/UpgradeModal.tsx(1 hunks)apps/web/components/pages/FaqPage.tsx(1 hunks)apps/web/components/pages/HomePage/Pricing/ProCard.tsx(2 hunks)apps/web/components/pages/seo/LoomAlternativePage.tsx(3 hunks)apps/web/data/homepage-copy.ts(1 hunks)apps/web/public/llms.txt(1 hunks)packages/ui-solid/src/auto-imports.d.ts(3 hunks)packages/utils/src/constants/plans.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
apps/web/**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
apps/web/**/*.{ts,tsx}: Use TanStack Query v5 for client-side server state and data fetching in the web app
Mutations should call Server Actions and perform precise cache updates with setQueryData/setQueriesData, avoiding broad invalidations
Prefer Server Components for initial data and pass initialData to client components for React Query hydration
Files:
apps/web/components/UpgradeModal.tsxapps/web/components/pages/FaqPage.tsxapps/web/data/homepage-copy.tsapps/web/components/pages/seo/LoomAlternativePage.tsxapps/web/components/pages/HomePage/Pricing/ProCard.tsx
{apps/web,packages/ui}/**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
{apps/web,packages/ui}/**/*.{ts,tsx}: Use Tailwind CSS exclusively for styling in the web app and shared React UI components
Component naming: React components in PascalCase; hooks in camelCase starting with 'use'
Files:
apps/web/components/UpgradeModal.tsxapps/web/components/pages/FaqPage.tsxapps/web/data/homepage-copy.tsapps/web/components/pages/seo/LoomAlternativePage.tsxapps/web/components/pages/HomePage/Pricing/ProCard.tsx
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Use strict TypeScript and avoid any; prefer shared types from packages
Files:
apps/web/components/UpgradeModal.tsxpackages/utils/src/constants/plans.tsapps/desktop/src/routes/(window-chrome)/upgrade.tsxapps/web/components/pages/FaqPage.tsxapps/web/data/homepage-copy.tsapps/web/components/pages/seo/LoomAlternativePage.tsxapps/desktop/src/utils/plans.tsapps/web/components/pages/HomePage/Pricing/ProCard.tsxpackages/ui-solid/src/auto-imports.d.ts
apps/desktop/**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
apps/desktop/**/*.{ts,tsx}: In the desktop app, rely on unplugin-icons auto-imports; do not manually import icon modules
Use generated tauri_specta commands/events (commands, events) in the desktop frontend; listen to generated events directly
Use @tanstack/solid-query for server state in the desktop app
Files:
apps/desktop/src/routes/(window-chrome)/upgrade.tsxapps/desktop/src/utils/plans.ts
{apps/desktop,packages/ui-solid}/**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Component naming (Solid): components in PascalCase; hooks/utilities in camelCase starting with 'use' where applicable
Files:
apps/desktop/src/routes/(window-chrome)/upgrade.tsxapps/desktop/src/utils/plans.tspackages/ui-solid/src/auto-imports.d.ts
🧠 Learnings (1)
📚 Learning: 2025-08-25T10:58:06.142Z
Learnt from: CR
PR: CapSoftware/Cap#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-25T10:58:06.142Z
Learning: Applies to apps/desktop/**/*.{ts,tsx} : In the desktop app, rely on unplugin-icons auto-imports; do not manually import icon modules
Applied to files:
packages/ui-solid/src/auto-imports.d.ts
🪛 LanguageTool
apps/web/public/llms.txt
[grammar] ~81-~81: There might be a mistake here.
Context: ...- includes cloud storage and AI features - Teams: Custom pricing for organization...
(QB_NEW_EN)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Build Desktop (x86_64-pc-windows-msvc, windows-latest)
- GitHub Check: Build Desktop (aarch64-apple-darwin, macos-latest)
- GitHub Check: Analyze (rust)
🔇 Additional comments (6)
apps/web/data/homepage-copy.ts (1)
241-243: Prices updated correctly.Annual and monthly per-user values align with the PR objective.
apps/web/public/llms.txt (1)
81-82: Pricing line updated — looks good.Matches $12 monthly / $8.16 when billed annually.
apps/web/components/pages/FaqPage.tsx (1)
12-13: FAQ pricing copy aligned.$8.16/month (when billed annually) matches the new pricing.
apps/web/components/pages/HomePage/Pricing/ProCard.tsx (1)
134-142: LGTM: totals now computed from centralized per-user prices.Using homepageCopy-derived constants removes duplicated literals.
Also applies to: 158-166
apps/web/components/pages/seo/LoomAlternativePage.tsx (1)
109-109: LGTM: pricing FAQ copy update is clear and accurateReads well and correctly notes “when billed annually.”
apps/desktop/src/routes/(window-chrome)/upgrade.tsx (1)
497-499: LGTM: toggle hint prices/billing text align with new pricingMonthly shows $12; annual shows $8.16 when billed annually. Consistent with the PR objective.
| {isProAnnual() ? "$8.16" : "$12"} | ||
| <span class="text-gray-10 text-[16px]">.00 /</span> | ||
| </h3> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Price formatting bug: renders “$8.16.00 /” for annual
Use currency formatting and drop the hard-coded “.00”.
- {isProAnnual() ? "$8.16" : "$12"}
- <span class="text-gray-10 text-[16px]">.00 /</span>
+ {(isProAnnual() ? 8.16 : 12).toLocaleString(undefined, {
+ style: "currency",
+ currency: "USD",
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2,
+ })}
+ <span class="text-gray-10 text-[16px]">/</span>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| {isProAnnual() ? "$8.16" : "$12"} | |
| <span class="text-gray-10 text-[16px]">.00 /</span> | |
| </h3> | |
| {(isProAnnual() ? 8.16 : 12).toLocaleString(undefined, { | |
| style: "currency", | |
| currency: "USD", | |
| minimumFractionDigits: 2, | |
| maximumFractionDigits: 2, | |
| })} | |
| <span class="text-gray-10 text-[16px]">/</span> | |
| </h3> |
🤖 Prompt for AI Agents
In apps/desktop/src/routes/(window-chrome)/upgrade.tsx around lines 475-477, the
markup currently concatenates a hard-coded “.00” span after a literal price
string which causes outputs like “$8.16.00 /”; replace this with a single
formatted currency value: compute the numeric price as a number (e.g. dollars as
8.16 or cents converted to dollars), use Intl.NumberFormat('en-US', { style:
'currency', currency: 'USD' }) to produce the full formatted string (no extra
“.00” span), and render that formatted string conditionally for isProAnnual() vs
monthly pricing, removing the separate span entirely so the output reads
correctly like "$8.16 /" or "$12.00 /" depending on the value.
| title: "Half the Price of Loom", | ||
| description: | ||
| "Cap is just $9/month per user, compared to Loom's $18/month per user. Plus, Cap offers a generous free plan that includes Studio mode for personal use.", | ||
| "Cap stars from just $8.16/month per user, compared to Loom's $18/month per user. Plus, Cap offers a generous free plan that includes Studio mode for personal use.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo: “stars” → “starts” and clarify annual billing
Fix the copy to read naturally and disclose billing basis.
- "Cap stars from just $8.16/month per user, compared to Loom's $18/month per user. Plus, Cap offers a generous free plan that includes Studio mode for personal use.",
+ "Cap starts from just $8.16/month per user when billed annually, compared to Loom's $18/month per user. Plus, Cap offers a generous free plan that includes Studio mode for personal use.",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "Cap stars from just $8.16/month per user, compared to Loom's $18/month per user. Plus, Cap offers a generous free plan that includes Studio mode for personal use.", | |
| "Cap starts from just $8.16/month per user when billed annually, compared to Loom's $18/month per user. Plus, Cap offers a generous free plan that includes Studio mode for personal use.", |
🤖 Prompt for AI Agents
In apps/web/components/pages/seo/LoomAlternativePage.tsx around line 30, fix the
typo "stars" → "starts" and clarify the billing basis by changing the copy to
state that the $8.16/month price is when billed annually; e.g., update the
sentence to read naturally like "Cap starts from $8.16/month per user when
billed annually, compared to Loom's $18/month per user. Plus, Cap offers a
generous free plan that includes Studio mode for personal use." Ensure
punctuation and spacing remain correct.
| rows: [ | ||
| ["Open Source", "✅ Yes", "❌ No"], | ||
| ["Pricing", "✅ $9/month per user", "⚠️ $18/month per user"], | ||
| ["Pricing", "✅ $from 8.16/month per user", "⚠️ $18/month per user"], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copy bug: stray “$from” and missing dollar before amount
Render “from $8.16/month per user”.
- ["Pricing", "✅ $from 8.16/month per user", "⚠️ $18/month per user"],
+ ["Pricing", "✅ from $8.16/month per user", "⚠️ $18/month per user"],📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ["Pricing", "✅ $from 8.16/month per user", "⚠️ $18/month per user"], | |
| ["Pricing", "✅ from $8.16/month per user", "⚠️ $18/month per user"], |
🤖 Prompt for AI Agents
In apps/web/components/pages/seo/LoomAlternativePage.tsx around line 128, the
pricing string currently contains a stray " $from" and is missing a dollar sign
before the amount; update the array entry to render "from $8.16/month per user"
by replacing the string "✅ $from 8.16/month per user" with "✅ from $8.16/month
per user" (ensure spacing and punctuation match surrounding items).
Summary by CodeRabbit
Chores
Documentation
Style