From e543ca4b2096cb8f532111950c53012688e64ea3 Mon Sep 17 00:00:00 2001 From: modphoenix Date: Fri, 27 Feb 2026 17:07:36 +0200 Subject: [PATCH 01/14] Prepare site for Paddle domain review --- src/app/features/features-content.tsx | 6 +- src/app/layout.tsx | 15 +- src/app/pricing/page.tsx | 8 +- src/app/pricing/pricing-content.tsx | 101 +++++-- src/app/privacy/page.tsx | 4 +- src/app/privacy/privacy-content.tsx | 278 +++++++----------- src/app/refund-policy/page.tsx | 199 +++++++++++++ src/app/terms/page.tsx | 4 +- src/app/terms/terms-content.tsx | 302 +++++++------------- src/components/footer.tsx | 4 +- src/components/homepage/pricing-section.tsx | 129 +++++++-- src/components/legal/analytics-consent.tsx | 101 +++++++ src/components/room/join-room-dialog.tsx | 19 ++ 13 files changed, 720 insertions(+), 450 deletions(-) create mode 100644 src/app/refund-policy/page.tsx create mode 100644 src/components/legal/analytics-consent.tsx diff --git a/src/app/features/features-content.tsx b/src/app/features/features-content.tsx index 188ddf3..6d22c03 100644 --- a/src/app/features/features-content.tsx +++ b/src/app/features/features-content.tsx @@ -463,11 +463,11 @@ export function FeaturesContent() {

- Zero Tracking + Privacy Controls

- No analytics, no cookies, no data collection. Your privacy is - our priority. + Essential cookies keep sign-in and preferences working. + Optional analytics stay off unless you opt in.

diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 63a59cb..0dda5c9 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,11 +1,13 @@ import type { Metadata } from "next"; import { SpeedInsights } from "@vercel/speed-insights/next"; import { GoogleAnalytics } from "@next/third-parties/google"; +import { cookies } from "next/headers"; import { Geist, Geist_Mono, Outfit } from "next/font/google"; import { Providers } from "@/components/providers"; import { Toaster } from "sonner"; import { getToken } from "@/lib/auth-server"; +import { AnalyticsConsentBanner } from "@/components/legal/analytics-consent"; import "./globals.css"; @@ -95,7 +97,15 @@ export default async function RootLayout({ }: Readonly<{ children: React.ReactNode; }>) { + const cookieStore = await cookies(); const initialToken = await getToken(); + const analyticsConsentValue = cookieStore.get("analytics_consent")?.value; + const analyticsConsent = + analyticsConsentValue === "granted" + ? "granted" + : analyticsConsentValue === "denied" + ? "denied" + : null; return ( @@ -104,10 +114,11 @@ export default async function RootLayout({ > {children} - + + {analyticsConsent === "granted" && } - {process.env.NEXT_PUBLIC_GA_ID && ( + {analyticsConsent === "granted" && process.env.NEXT_PUBLIC_GA_ID && ( )} diff --git a/src/app/pricing/page.tsx b/src/app/pricing/page.tsx index 6e7f453..4b2aeaa 100644 --- a/src/app/pricing/page.tsx +++ b/src/app/pricing/page.tsx @@ -2,13 +2,13 @@ import { Metadata } from "next"; import { PricingContent } from "./pricing-content"; export const metadata: Metadata = { - title: "Pricing - Support the Project with Pro", + title: "Pricing and Launch Status", description: - "AgileKit is free forever. Subscribe to Pro to unlock extra features and support ongoing development. No credit card required, cancel anytime.", + "AgileKit core features are free today. Pro is in development, and launch pricing will be published here before checkout goes live.", openGraph: { - title: "Support the Project with Pro | AgileKit", + title: "Pricing and Launch Status | AgileKit", description: - "AgileKit is free forever. Subscribe to Pro to unlock extra features and support ongoing development.", + "AgileKit core features are free today. Pro is in development, and launch pricing will be published here before checkout goes live.", url: "https://agilekit.app/pricing", }, alternates: { diff --git a/src/app/pricing/pricing-content.tsx b/src/app/pricing/pricing-content.tsx index dbe5486..63fbe9c 100644 --- a/src/app/pricing/pricing-content.tsx +++ b/src/app/pricing/pricing-content.tsx @@ -16,42 +16,34 @@ const comparisonFeatures = [ { name: "Team members", free: "Unlimited", pro: "Unlimited" }, { name: "Planning sessions", free: "Unlimited", pro: "Unlimited" }, { name: "Real-time collaboration", free: true, pro: true }, - { name: "Session history", free: "Unlimited (for now)", pro: "Full history" }, - { name: "Analytics dashboard", free: false, pro: true }, + { name: "Session history", free: "5-day rolling", pro: "Unlimited history" }, + { name: "Basic analytics", free: true, pro: true }, + { name: "Advanced actionable insights", free: false, pro: true }, { name: "Export reports", free: "CSV only", pro: "CSV + JSON + Analytics" }, { name: "Jira & GitHub integrations", free: false, pro: true }, + { name: "Automated session summaries", free: false, pro: true }, ]; const faqs = [ { question: "Do all team members need a Pro account?", answer: - "No. Only the room owner needs Pro to enable advanced features for that room. Other participants can join and use those features for free.", + "No! Only the room owner will need Pro to enable advanced features for that room. Other participants will still be able to join and use those features for free.", }, { - question: "What happens when Pro launches?", + question: "What happens to my past sessions on the Free tier?", answer: - "Right now everything is free with no limits. When Pro launches, free rooms will keep a rolling 5-day history. If your Pro subscription ends, you get a 14-day grace period before the free retention policy kicks in.", + "Until paid plans launch, current retention rules stay as they are today. If we introduce a shorter free-tier history window in the future, we will publish that change on this page before it takes effect.", }, { question: "Can I cancel my Pro subscription anytime?", answer: - "Yes. You can cancel anytime from your dashboard. If you cancel, your rooms enter a 14-day grace period before free retention rules apply.", + "Paid checkout is not live yet. Before Pro launches, we will publish the final cancellation flow, billing cadence, and any downgrade rules on this page and at checkout.", }, { - question: "What payment methods do you accept?", + question: "Is there a free trial for Pro?", answer: - "All major credit cards, PayPal, and local payment methods via Paddle. Paddle handles secure payments in 29 currencies.", - }, - { - question: "Is there a free trial?", - answer: - "The Free tier has unlimited usage. When Pro launches, existing accounts will receive 6 months of free Pro access to evaluate the new features.", - }, - { - question: "How does billing work?", - answer: - "Payments are processed by Paddle, our Merchant of Record. They handle all billing, invoices, and tax compliance globally.", + "The Free tier has unlimited usage for core features. When Pro fully launches, existing active accounts will receive early access to evaluate the new features.", }, ]; @@ -105,17 +97,17 @@ export function PricingContent() {

- Better planning, forever free + Simple pricing for teams of all sizes

- AgileKit is 100% free for teams of any size. Upgrade to Pro to - unlock full history, analytics, integrations, and support the - project you love. + AgileKit is completely free for core planning sessions today. + Pro is in development and is planned to add deeper insights, + longer retention, and workflow integrations.

- No credit card required + No credit card required for Free - Cancel anytime + Pro checkout not live yet Open source
@@ -123,6 +115,53 @@ export function PricingContent() {
+
+
+
+
+
+

+ Launch status +

+

+ Paid checkout is not live yet +

+

+ We are preparing the site for payment-provider approval + before enabling any live checkout. Exact launch pricing, + final billing terms, and any Pro-specific retention rules + will be published here before checkout goes live. +

+
+
+

Custom or enterprise pricing is not currently offered.

+
+
+ +
+ + Review refund policy + + + Review terms + + + Contact billing owner + +
+
+
+
+ {/* Pricing Cards */} @@ -134,7 +173,7 @@ export function PricingContent() { Compare plans

- See exactly what you get with each plan + See what is available now and what is planned for Pro

@@ -163,10 +202,10 @@ export function PricingContent() { : "bg-gray-50 dark:bg-zinc-950/50" }`} > -
+
{feature.name}
-
+
{typeof feature.free === "boolean" ? ( feature.free ? ( @@ -179,7 +218,7 @@ export function PricingContent() { )}
-
+
{typeof feature.pro === "boolean" ? ( feature.pro ? ( @@ -207,7 +246,7 @@ export function PricingContent() { Frequently asked questions

- Everything you need to know about pricing + Everything you need to know about AgileKit pricing and plans.

@@ -275,8 +314,8 @@ export function PricingContent() { Ready to plan better?

- Start using AgileKit for faster, more accurate sprint - estimation — completely free. + Start using AgileKit for faster, more accurate sprint estimation + — jump right in, completely free.

+
-
- {/* Hero section */} -
-