Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/desktop/src/routes/(window-chrome)/upgrade.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ export default function Page() {
</div>
<div class="flex flex-col justify-center items-center">
<h3 class="text-4xl leading-6 text-gray-1">
{isProAnnual() ? "$6" : "$9"}
{isProAnnual() ? "$8.16" : "$12"}
<span class="text-gray-10 text-[16px]">.00 /</span>
</h3>
Comment on lines +475 to 477
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
{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.

{isProAnnual() && (
Expand All @@ -494,8 +494,8 @@ export default function Page() {
Switch to {isProAnnual() ? "monthly" : "yearly"}:{" "}
<span class="font-medium">
{isProAnnual()
? "$9 per user, billed monthly"
: "$6 per user, billed annually"}
? "$12 per user, billed monthly"
: "$8.16 per user, billed annually"}
</span>
</p>
</div>
Expand Down
4 changes: 2 additions & 2 deletions apps/desktop/src/utils/plans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const planIds = {
monthly: "price_1P9C1DFJxA1XpeSsTwwuddnq",
},
production: {
yearly: "price_1Q29mcFJxA1XpeSsbti0xJpZ",
monthly: "price_1OtBMeFJxA1XpeSsfOu2SKp1",
yearly: "price_1S2al7FJxA1XpeSsJCI5Z2UD",
monthly: "price_1S2akxFJxA1XpeSsfoAUUbpJ",
},
};

Expand Down
2 changes: 1 addition & 1 deletion apps/web/components/UpgradeModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export const UpgradeModal = ({ open, onOpenChange }: UpgradeModalProps) => {
const [proQuantity, setProQuantity] = useState(1);
const { push } = useRouter();

const pricePerUser = isAnnual ? 6 : 9;
const pricePerUser = isAnnual ? 8.16 : 12;
const totalPrice = pricePerUser * proQuantity;
const billingText = isAnnual ? "billed annually" : "billed monthly";

Expand Down
2 changes: 1 addition & 1 deletion apps/web/components/pages/FaqPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const faqContent = [
{
title: "How much does it cost?",
answer:
"Cap offers a free version for personal use. You can upgrade to Cap Pro for just $9/month to unlock unlimited cloud storage, unlimited recording length, custom domain support, advanced team features, password-protected videos, analytics, and priority support. We also offer commercial licenses and self-hosted options for businesses.",
"Cap offers a free version for personal use. You can upgrade to Cap Pro for just $8.16/month (when billed annually) to unlock unlimited cloud storage, unlimited recording length, custom domain support, advanced team features, password-protected videos, analytics, and priority support. We also offer commercial licenses and self-hosted options for businesses.",
},
{
title: "Which platforms does Cap support?",
Expand Down
4 changes: 2 additions & 2 deletions apps/web/components/pages/HomePage/Pricing/ProCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ export const ProCard = () => {
<p className="text-lg text-gray-8">
or,{" "}
<NumberFlow
value={9 * users}
value={CAP_PRO_MONTHLY_PRICE_PER_USER * users}
className="text-lg tabular-nums"
format={{
notation: "compact",
Expand All @@ -155,7 +155,7 @@ export const ProCard = () => {
<p className="text-lg text-gray-8">
or,{" "}
<NumberFlow
value={6 * users}
value={CAP_PRO_ANNUAL_PRICE_PER_USER * users}
className="text-lg tabular-nums"
format={{
notation: "compact",
Expand Down
6 changes: 3 additions & 3 deletions apps/web/components/pages/seo/LoomAlternativePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const loomAlternativeContent = {
{
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.",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
"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.

},
{
title: "High-Quality Recordings",
Expand Down Expand Up @@ -106,7 +106,7 @@ export const loomAlternativeContent = {
{
question: "How does Cap compare in pricing with Loom?",
answer:
"Cap is significantly more affordable at just $9/month per user, compared to Loom's $18/month per user. Cap also has a more generous free plan that includes Studio mode for personal use and the ability to record shareable links up to 5 minutes in 4K quality.",
"Cap is significantly more affordable at just $8.16/month per user when billed annually, compared to Loom's $18/month per user. Cap also has a more generous free plan that includes Studio mode for personal use and the ability to record shareable links up to 5 minutes in 4K quality.",
},
{
question: "Can I keep full ownership of my recordings with Cap?",
Expand All @@ -125,7 +125,7 @@ export const loomAlternativeContent = {
headers: ["Feature", "Cap", "Loom"],
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"],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
["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).

[
"Free Plan",
"✅ Studio mode + 5 min shareable links",
Expand Down
4 changes: 2 additions & 2 deletions apps/web/data/homepage-copy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,8 @@ export const homepageCopy: HomePageCopy = {
],
cta: "Get started",
pricing: {
annual: 6,
monthly: 9,
annual: 8.16,
monthly: 12,
},
labels: {
users: "Per user",
Expand Down
2 changes: 1 addition & 1 deletion apps/web/public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Provide visual answers to support tickets. Create help videos and documentation.

- **Personal Use**: Free forever (5-minute recording limit)
- **Desktop License**: $29/year or $58 lifetime (unlimited recording)
- **Cap Pro**: $9/month ($6/month when billed annually) - includes cloud storage and AI features
- **Cap Pro**: $12/month ($8.16/month when billed annually) - includes cloud storage and AI features
- **Teams**: Custom pricing for organizations

## Privacy & Security
Expand Down
8 changes: 4 additions & 4 deletions packages/ui-solid/src/auto-imports.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
// biome-ignore lint: disable
export {}
declare global {
const IconCapArrows: typeof import("~icons/cap/arrows.jsx")["default"]
const IconCapArrows: typeof import('~icons/cap/arrows.jsx')['default']
const IconCapAudioOn: typeof import('~icons/cap/audio-on.jsx')['default']
const IconCapBgBlur: typeof import('~icons/cap/bg-blur.jsx')['default']
const IconCapCamera: typeof import('~icons/cap/camera.jsx')['default']
const IconCapCaptions: typeof import('~icons/cap/captions.jsx')['default']
const IconCapCaretDown: typeof import('~icons/cap/caret-down.jsx')['default']
const IconCapChevronDown: typeof import('~icons/cap/chevron-down.jsx')['default']
const IconCapCircle: typeof import("~icons/cap/circle.jsx")["default"]
const IconCapCircle: typeof import('~icons/cap/circle.jsx')['default']
const IconCapCircleCheck: typeof import('~icons/cap/circle-check.jsx')['default']
const IconCapCirclePlus: typeof import('~icons/cap/circle-plus.jsx')['default']
const IconCapCircleX: typeof import('~icons/cap/circle-x.jsx')['default']
Expand Down Expand Up @@ -52,7 +52,7 @@ declare global {
const IconCapScissors: typeof import('~icons/cap/scissors.jsx')['default']
const IconCapSettings: typeof import('~icons/cap/settings.jsx')['default']
const IconCapShadow: typeof import('~icons/cap/shadow.jsx')['default']
const IconCapSquare: typeof import("~icons/cap/square.jsx")["default"]
const IconCapSquare: typeof import('~icons/cap/square.jsx')['default']
const IconCapStopCircle: typeof import("~icons/cap/stop-circle.jsx")["default"]
const IconCapTrash: typeof import('~icons/cap/trash.jsx')['default']
const IconCapUndo: typeof import('~icons/cap/undo.jsx')['default']
Expand All @@ -78,7 +78,7 @@ declare global {
const IconLucideMessageSquarePlus: typeof import('~icons/lucide/message-square-plus.jsx')['default']
const IconLucideMicOff: typeof import("~icons/lucide/mic-off.jsx")["default"]
const IconLucideMonitor: typeof import('~icons/lucide/monitor.jsx')['default']
const IconLucideRectangleHorizontal: typeof import("~icons/lucide/rectangle-horizontal.jsx")["default"]
const IconLucideRectangleHorizontal: typeof import('~icons/lucide/rectangle-horizontal.jsx')['default']
const IconLucideRotateCcw: typeof import('~icons/lucide/rotate-ccw.jsx')['default']
const IconLucideSearch: typeof import('~icons/lucide/search.jsx')['default']
const IconLucideSquarePlay: typeof import('~icons/lucide/square-play.jsx')['default']
Expand Down
4 changes: 2 additions & 2 deletions packages/utils/src/constants/plans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const planIds = {
monthly: "price_1P9C1DFJxA1XpeSsTwwuddnq",
},
production: {
yearly: "price_1Q29mcFJxA1XpeSsbti0xJpZ",
monthly: "price_1OtBMeFJxA1XpeSsfOu2SKp1",
yearly: "price_1S2al7FJxA1XpeSsJCI5Z2UD",
monthly: "price_1S2akxFJxA1XpeSsfoAUUbpJ",
},
};

Expand Down
Loading