From 2ff447be4a74ea4d1e99c456eb24076b4f49d866 Mon Sep 17 00:00:00 2001 From: Hassan Arslan Date: Mon, 3 Aug 2026 14:52:28 +0300 Subject: [PATCH 1/2] feat(site): add /pricing and /get-started fallback landing page EPIC 24 - Pricing Page + GTM Surface. Two slices, one PR: - #5824: knowcap.ai/pricing - the locked 4-tier ladder (Free/Pro/Business/ Enterprise), wired into the shared editorial nav + footer + sitemap. - #7670: knowcap.ai/get-started - a plain, self-owned ad-landing fallback in case the agency's campaign page slips before the 16 Aug launch. Prices verified live against the public.plans table (Supabase), not copied from the Odoo card: free=$0, pro=$20/seat, business=$40/seat, enterprise= custom. No annual toggle on either page - #6953 (sibling ticket, same epic) found the app currently mischarges anyone who picks annual and is removing the annual offer everywhere before launch; showing it here would be the same false promise on the marketing site. Both pages forward utm_source/utm_medium/utm_campaign/utm_content/utm_term/ gclid/fbclid into the app.knowcap.ai/register link (app/lib/campaign.ts) so a paid-ad tag survives the click into signup - including the shared header/ footer's generic "Get Started Free" button (shell.tsx gains an optional registerHref override, backward-compatible, verified against all 20 existing callers). Built on the shared EditorialShell design system (matches /for/saudi-arabia) rather than the two dead components named in the ticket (hero-section.tsx, beta-hero-section.tsx - confirmed zero importers). Agent: pm-manager / pm-coder - run 11 Odoo: https://smetools.odoo.com/odoo/project.task/7670 Odoo: https://smetools.odoo.com/odoo/project.task/5824 --- app/app/get-started/page.tsx | 123 +++++++++++++++++++++++++++++ app/app/pricing/page.tsx | 108 +++++++++++++++++++++++++ app/app/sitemap.ts | 4 + app/components/editorial/shell.tsx | 25 ++++-- app/lib/campaign.ts | 42 ++++++++++ app/lib/pricing.ts | 93 ++++++++++++++++++++++ 6 files changed, 388 insertions(+), 7 deletions(-) create mode 100644 app/app/get-started/page.tsx create mode 100644 app/app/pricing/page.tsx create mode 100644 app/lib/campaign.ts create mode 100644 app/lib/pricing.ts diff --git a/app/app/get-started/page.tsx b/app/app/get-started/page.tsx new file mode 100644 index 0000000..a183614 --- /dev/null +++ b/app/app/get-started/page.tsx @@ -0,0 +1,123 @@ +import type { Metadata } from 'next' +import Link from 'next/link' +import EditorialShell, { PageHero } from '@/components/editorial/shell' +import { COMPARE_CSS } from '../compare/compare-styles' +import { PRICING_TIERS } from '@/lib/pricing' +import { withCampaignParams } from '@/lib/campaign' + +// /get-started — Odoo EPIC 24 (#6071) / [feature] #7670, "Fallback landing page". +// +// Insurance for the 16 Aug paid-ad launch: an outside agency (StratDev) is building +// the real campaign page. If it slips, ads still need somewhere to point. This page +// is deliberately plain — what Knowcap is, who it's for, what it costs, and a +// working signup link that survives the click. It does not replace the agency page; +// both can exist (switching ads later is a destination change, not a delete). +export const metadata: Metadata = { + title: 'Get Started — Knowcap', + description: + 'Knowcap turns meetings into confirmed, agent-ready evidence. A named human confirms every claim before any AI agent acts. Free to start.', + robots: { index: false }, // not an SEO surface — an ad destination, kept out of search results like /beta + openGraph: { + title: 'Knowcap — The Trust Layer for AI Agents', + description: 'Capture meetings and messages, confirm every decision with a human, and let agents act only on what was confirmed. Free to start.', + url: 'https://knowcap.ai/get-started', + type: 'website', + images: [{ url: '/og/default.jpg', width: 1376, height: 768, alt: 'Knowcap — The Trust Layer for AI Agents' }], + }, + twitter: { + card: 'summary_large_image', + images: ['/og/default.jpg'], + }, +} + +const GS_CSS = ` +.gs-body{padding:24px 0 110px} +.gs-section{padding:clamp(36px,5vw,56px) 0} +.gs-section + .gs-section{border-top:1px solid var(--border)} +.gs-h2{font-family:var(--disp);font-size:clamp(1.35rem,2.6vw,1.75rem);font-weight:460; + letter-spacing:-.02em;font-variation-settings:'SOFT' 55,'WONK' 0;margin-bottom:14px} +.gs-prose{color:var(--sec);font-size:16px;line-height:1.75;max-width:64ch} +.gs-for{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:12px;max-width:64ch} +.gs-for li{display:flex;gap:10px;font-size:15px;line-height:1.55;color:var(--ink-soft)} +.gs-for .gs-dot{flex-shrink:0;color:var(--green);font-weight:700} +.gs-price-strip{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px} +.gs-price-card{flex:1 1 200px;background:var(--white);border:1px solid var(--border); + border-radius:10px;padding:16px 18px} +.gs-price-name{font-family:var(--disp);font-weight:560;font-size:15px;color:var(--ink)} +.gs-price-amt{font-family:var(--disp);font-weight:500;font-size:1.4rem;color:var(--ink);margin-top:4px} +.gs-price-note{font-size:12px;color:var(--sec)} +.gs-price-link{margin-top:16px;font-size:13.5px} +.gs-price-link a{color:var(--green);text-decoration:underline;text-underline-offset:3px} +.gs-cta-row{margin-top:10px} +` + +export default function GetStartedPage({ + searchParams, +}: { + searchParams?: { [key: string]: string | string[] | undefined } +}) { + const registerUrl = withCampaignParams('https://app.knowcap.ai/register', searchParams, 'get_started_fallback') + + return ( + +