diff --git a/docs/CRAWLERX_PRD.md b/docs/CRAWLERX_PRD.md new file mode 100644 index 0000000..42e28e7 --- /dev/null +++ b/docs/CRAWLERX_PRD.md @@ -0,0 +1,102 @@ +# CrawlerX — Product Requirements & Implementation Plan + +**Date:** Oct 17, 2026 +**Company:** Metatroncube Solutions +**Positioning:** *"Semrush tells you what's wrong. CrawlerX fixes it — 10 sites for about a fifth of one Semrush seat."* + +--- + +## Executive Summary & Financial Viability + +- **Core Proposition:** A "10 sites for about $30" SEO tool is financially viable. At **₹2,499/month (≈$28) for 10 sites**, rented data plus our own crawler costs about $6 per account at typical usage and about $10 at full usage, yielding a **60–76% gross margin**. +- **Break-Even Target:** Roughly **380 paying accounts** with a ₹6.4 lakh/month team (reachable in 7–13 months post-launch at 30–60 paying accounts/month). +- **Lean Option (Recommended):** Running lean on the existing Metatroncube team (~₹3 lakh/month) cuts break-even to **under 200 accounts** with ₹15–20 lakh peak runway. + +### Four Non-Negotiable Conditions +1. **Don't fight Semrush on raw data size:** Rent keyword, SERP, and backlink data from wholesale APIs (DataForSEO) and win on workflow: *Audit → AI Fix → Push to Live Site → Prove Result*. +2. **Usage caps are the business model:** Hard/soft caps with cached lookups to guarantee healthy margins (Pro margin 76% typical, 60% full). +3. **Agency & Freelancer First:** Target shops managing 5–40 client sites who feel per-site Semrush costs most acutely and churn far less than solo SMBs. +4. **Distribution & Value Proof:** Deliver visible ranking and audit improvements within the first 7 days. Dogfood on Metatroncube's own clients first. + +--- + +## Market & Competitor Analysis + +| Tool | Entry Price (Monthly) | Coverage | Weakness We Exploit | +| :--- | :--- | :--- | :--- | +| **Semrush** | $139.95 Pro; $249.95 Guru | 1 user, limited projects; white-label on Business only ($500/mo) | Prohibitive for Indian agencies/SMBs (₹11,750+/mo); extra seats $45–100 | +| **Semrush One** | $199 Starter | SEO + AI-search tracking | AI visibility treated as a luxury upsell | +| **Ubersuggest** | $29 Individual; $49 Business | 150 searches/day, 125 keywords/domain | Shallow data; basic reports; no fix execution engine | +| **SE Ranking** | $59 Essential; $109 Pro | 1 seat, 5 projects, 500 keywords | Western USD pricing; content & local add-ons cost extra | +| **Synup** | $49 (1 loc); $299 (10 loc) | Local listings, reviews, geo-grid | Multi-location local brand focus; little technical SEO | +| **CrawlerX** | **₹2,499 (≈$28) for 10 sites** | **Audit + AI fixes, rank tracking, keywords, local, AI visibility, white-label** | India-priced, complete audit-to-fix push loop, agency-first | + +--- + +## Core Differentiators + +1. **Fix, Not Just Find:** Generated code & copy (title, meta, schema JSON-LD, image alt, internal links, FAQ blocks) pushed directly to WordPress (plugin) or Shopify (app) after one-click approval, then automatically re-crawled to verify. +2. **Built-in AI Search Visibility:** Included by default (not a $199 upsell). Tracks mentions and citations across ChatGPT, Google Gemini, Perplexity, and Google AI Overviews, with actionable fixes. +3. **Local SEO Built-In:** Geo-grid ranking maps, Google Business Profile (GBP) health audit, and AI review response drafts. +4. **Built for Indian Agencies:** White-label reporting from the 10-site plan, client portal, WhatsApp report delivery, INR + UPI Autopay + GST compliant invoices, and Hindi/Tamil/regional keyword data. +5. **"Next 5 Actions" Weekly Briefing:** Plain-language, high-impact weekly priorities instead of overwhelming 400-row issue tables. + +--- + +## 7 Core Product Modules & Phased Roadmap + +``` +MVP (Months 1–4) ────────► v1 (Months 5–7) ────────► v2 (Months 8–12) +• JS-rendering crawler • WP & Shopify Push • Bulk fixes & approval queue +• 120+ audit checks • AI Search Visibility • Competitor link gap +• AI fix generator (copy) • Geo-grid Local Map • Public API & MCP Server +• India city-level ranks • Regional keywords • Scheduled WhatsApp reports +• Razorpay UPI Autopay • Client portal & PDF • Own cached keyword index +``` + +### Module Breakdown + +| Module | MVP (Months 0–4) | v1 (Months 5–7) | v2 (Months 8–12) | +| :--- | :--- | :--- | :--- | +| **1. Site Audit (Own Crawler)** | JS-rendering crawl, 120+ checks, health score, weekly re-crawl | Log-file upload, crawl diff vs last crawl | Scheduled crawls by page type, regression alerts | +| **2. AI Fix Engine** | Generated fixes (titles, metas, alt text, schema JSON-LD); copy to clipboard | 1-Click push to WordPress (plugin) & Shopify (app); re-crawl verification | Bulk fixes, agency approval queue, internal link engine | +| **3. Rank Tracking** | Google desktop + mobile, India city-level, top-20 depth, 6-day refresh | Competitor rank share, SERP features | Bing, YouTube | +| **4. Keyword Research** | Volume, difficulty, intent, CPC for India + 10 countries (cached) | Regional languages (Hindi, Tamil, Telugu, Marathi, Bengali), clusters | Proprietary India keyword database built from cached lookups | +| **5. Local SEO** | GBP connection, profile health check | Geo-grid rank map, review monitoring + AI reply drafts | Citation (NAP) audit for Indian directories (Justdial, Sulekha, IndiaMART) | +| **6. AI Search Visibility** | — | 10–20 tracked prompts across ChatGPT, Gemini, Perplexity, AI Overviews; mention share | llms.txt & AI crawler access checks; "why AI skipped you" fixes | +| **7. Agency Layer** | White-label PDF report, client sharing link | Client portal, WhatsApp/email scheduled reports, team seats | Public API, MCP Server for Claude/ChatGPT/Hermes | + +--- + +## Pricing & Unit Economics + +*All prices in INR exclude 18% GST. USD converted at ~₹88.* + +| Plan | Price / Month | Sites | Pages / Audit | Tracked Keywords | Keyword Lookups / Mo | AI Visibility Checks / Mo | Data Cost (Full Use) | Gross Margin (Typical / Full) | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **Free** | ₹0 | 1 | 100 | 10 | 30 | — | ≈$0.30 | Lead Magnet | +| **Starter** | ₹999 (≈$11) | 3 | 1,000 | 100 | 150 | 40 | $3.11 | 82% / 69% | +| **Pro** | ₹2,499 (≈$28) | 10 | 3,000 | 300 | 450 | 120 | $10.30 | 76% / 60% | +| **Agency** | ₹7,499 (≈$85) | 30 | 5,000 | 1,000 | 1,200 | 400 | $33.57 | 72% / 57% | + +- **International Pricing:** $15 / $29 / $79 via Stripe with annual billing discount (2 months free). +- **Add-on Packs:** ₹299 for +100 tracked keywords, ₹499 for +200 AI checks. +- **Payment Rails:** Razorpay for domestic INR payments (UPI Autopay, NetBanking, Cards, GST invoicing) + Stripe for international USD. + +--- + +## Technical Stack & Architecture + +- **Frontend:** TanStack Start / Router / Query / Form + React + Tailwind CSS + DaisyUI. +- **Backend & Compute:** Cloudflare Workers + Node/FastAPI worker pool for heavy crawls. +- **Database & Storage:** Cloudflare D1 / PostgreSQL (dual-dialect Drizzle ORM) + Cloudflare R2 for crawl snapshots and PDF storage. +- **Data Integrations:** DataForSEO wholesale API (metered through unified quota service with redis cache), Google APIs (Search Console, Business Profile, PageSpeed). +- **Cost Controls:** Central metering layer checking plan quota before external provider calls, with multi-tenant caching for SERP/keyword queries. + +--- + +## Decision Gates & Milestones + +- **Gate 1 (End of Month 4 - MVP):** 3 Metatroncube retainer clients dogfooded with measurable gains (audit score +20, 10+ ranking improvements). +- **Gate 2 (End of Month 6):** 15 of 20 Indian agency design partners active weekly; at least 10 converting to paid list price. +- **Gate 3 (End of Month 12):** 200+ paying accounts, monthly logo churn < 6%, data cost < 25% of ARPU. diff --git a/package.json b/package.json index 0f79432..4c85163 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@10.30.1", "scripts": { "dev": "vite dev", - "start": " vite preview --port 3001", + "start": " vite preview --port 3001", "dev:clear-chat": "rm -rf .wrangler/state/v3/do/open-seo-OnboardingChatAgent", "dev:agents": "mkdir -p .logs && portless run vite dev 2>&1 | tee .logs/dev-server.log", "dev:agents:force": "mkdir -p .logs && portless --force run vite dev 2>&1 | tee .logs/dev-server.log", @@ -116,6 +116,7 @@ "remeda": "^2.33.6", "robots-parser": "^3.0.1", "sonner": "^2.0.7", + "stripe": "^23.0.0", "tailwindcss": "^4.1.16", "tldts": "^7.0.25", "yaml": "^2.9.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 843b054..8d3ef1d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,6 +144,9 @@ importers: sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + stripe: + specifier: ^23.0.0 + version: 23.0.0(@types/node@22.19.11) tailwindcss: specifier: ^4.1.16 version: 4.2.1 @@ -5566,6 +5569,15 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + stripe@23.0.0: + resolution: {integrity: sha512-MDE2A5ZVVluYURORaZEVghSmnLJc3w6aHAlZSxDQMsOjOb3V0O6ro/CiaeFlJS4N7uIVmsg98ocRsPmUK6YfyA==} + engines: {node: '>=20'} + peerDependencies: + '@types/node': '>=20' + peerDependenciesMeta: + '@types/node': + optional: true + strnum@2.4.0: resolution: {integrity: sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg==} @@ -11439,6 +11451,10 @@ snapshots: dependencies: js-tokens: 9.0.1 + stripe@23.0.0(@types/node@22.19.11): + optionalDependencies: + '@types/node': 22.19.11 + strnum@2.4.0: dependencies: anynum: 1.0.0 diff --git a/src/client/features/billing/PricingData.ts b/src/client/features/billing/PricingData.ts new file mode 100644 index 0000000..49358db --- /dev/null +++ b/src/client/features/billing/PricingData.ts @@ -0,0 +1,234 @@ +export type Currency = "INR" | "USD"; +export type BillingInterval = "monthly" | "annual"; + +export interface PlanFeature { + name: string; + included: boolean; + highlight?: boolean; +} + +export interface PricingPlan { + id: "free" | "starter" | "pro" | "agency"; + name: string; + iconType: "sprout" | "rocket" | "crown" | "landmark"; + categoryTag: string; + badge?: string; + isPopular?: boolean; + subhead: string; + sitesLimit: string; + monthlyPrice: { + INR: number; + USD: number; + }; + annualMonthlyPrice: { + INR: number; + USD: number; + }; + limits: { + sites: number; + pagesPerAudit: string; + trackedKeywords: number; + keywordLookups: number; + aiVisibilityChecks: number; + }; + features: PlanFeature[]; + ctaLabel: string; +} + +export const CRAWLERX_PLANS: PricingPlan[] = [ + { + id: "free", + name: "Free", + iconType: "sprout", + categoryTag: "FOR EVERYONE", + subhead: "Perfect for getting started", + sitesLimit: "1 Site", + monthlyPrice: { INR: 0, USD: 0 }, + annualMonthlyPrice: { INR: 0, USD: 0 }, + limits: { + sites: 1, + pagesPerAudit: "100", + trackedKeywords: 10, + keywordLookups: 30, + aiVisibilityChecks: 0, + }, + features: [ + { name: "1 Managed site", included: true }, + { name: "100 Pages per crawl audit", included: true }, + { name: "10 Tracked keywords", included: true }, + { name: "30 Keyword lookups / month", included: true }, + { name: "120+ Technical SEO checks", included: true }, + { name: "Community support", included: false }, + { name: "AI Fix generation", included: false }, + { name: "Google Search Console integration", included: false }, + { name: "White-label PDF reports", included: false }, + ], + ctaLabel: "Get Started", + }, + { + id: "starter", + name: "Starter", + iconType: "rocket", + categoryTag: "FOR SOLO BUILDERS & SMBS", + subhead: "Everything you need to fix and rank up to 3 brand or client sites.", + sitesLimit: "3 Sites (₹333/site)", + monthlyPrice: { INR: 999, USD: 15 }, + annualMonthlyPrice: { INR: 829, USD: 12 }, + limits: { + sites: 3, + pagesPerAudit: "1,000", + trackedKeywords: 100, + keywordLookups: 150, + aiVisibilityChecks: 40, + }, + features: [ + { name: "3 Managed sites", included: true }, + { name: "1,000 Pages per crawl audit", included: true }, + { name: "100 Tracked keywords (desktop + mobile)", included: true }, + { name: "150 Keyword lookups / month", included: true }, + { name: "40 AI visibility checks / month", included: true }, + { name: "AI Fix Engine (titles, metas, JSON-LD schema)", included: true }, + { name: "Google Search Console integration", included: true }, + { name: "Standard email support", included: true }, + ], + ctaLabel: "Choose Starter", + }, + { + id: "pro", + name: "Pro", + iconType: "crown", + categoryTag: "FOR AGENCIES & GROWTH TEAMS", + badge: "MOST POPULAR — 76% AGENCY CHOICE", + isPopular: true, + subhead: "Built for SEO freelancers and agencies managing 10 client domains.", + sitesLimit: "10 Sites (Just ₹250/site)", + monthlyPrice: { INR: 2499, USD: 29 }, + annualMonthlyPrice: { INR: 2079, USD: 24 }, + limits: { + sites: 10, + pagesPerAudit: "3,000", + trackedKeywords: 300, + keywordLookups: 450, + aiVisibilityChecks: 120, + }, + features: [ + { name: "10 Managed client sites", included: true, highlight: true }, + { name: "3,000 Pages per crawl audit", included: true }, + { name: "300 Tracked keywords (India city-level)", included: true }, + { name: "450 Keyword lookups / month", included: true }, + { name: "120 AI visibility checks (ChatGPT, Perplexity)", included: true, highlight: true }, + { name: "1-Click Push to WordPress & Shopify", included: true, highlight: true }, + { name: "White-label client PDF audit reports", included: true, highlight: true }, + { name: "Google Business Profile health check", included: true }, + { name: "Weekly Next 5 Actions briefing", included: true }, + { name: "Priority agency support", included: true }, + ], + ctaLabel: "Upgrade to Pro", + }, + { + id: "agency", + name: "Agency", + iconType: "landmark", + categoryTag: "SCALE & HIGH VOLUME", + subhead: "High-volume crawling, automated reporting, and client sharing for 30 sites.", + sitesLimit: "30 Sites (₹250/site)", + monthlyPrice: { INR: 7499, USD: 79 }, + annualMonthlyPrice: { INR: 6249, USD: 65 }, + limits: { + sites: 30, + pagesPerAudit: "5,000", + trackedKeywords: 1000, + keywordLookups: 1200, + aiVisibilityChecks: 400, + }, + features: [ + { name: "30 Managed client sites", included: true }, + { name: "5,000 Pages per crawl audit", included: true }, + { name: "1,000 Tracked keywords", included: true }, + { name: "1,200 Keyword lookups / month", included: true }, + { name: "400 AI visibility checks / month", included: true }, + { name: "White-label client sharing portal", included: true, highlight: true }, + { name: "Scheduled WhatsApp & Email delivery", included: true, highlight: true }, + { name: "Public API & MCP Server access (Claude/ChatGPT)", included: true, highlight: true }, + { name: "Custom approval queue for team members", included: true }, + { name: "Dedicated account manager & SLA", included: true }, + ], + ctaLabel: "Choose Agency", + }, +]; + +export const ADD_ON_PACKS = [ + { + id: "keywords", + name: "+100 Tracked Keywords", + inr: "₹299/month", + usd: "$4/month", + description: "Add 100 extra daily/weekly ranking tracking slots across your sites.", + }, + { + id: "ai-checks", + name: "+200 AI Search Checks", + inr: "₹499/month", + usd: "$6/month", + description: "Extra prompt monitoring on ChatGPT, Perplexity, Gemini, and Google AI.", + }, +]; + +export const TRUST_BADGES = [ + { + id: "guarantee", + title: "30-Day Money-Back Guarantee", + desc: "Cancel or downgrade plans anytime with one click.", + }, + { + id: "upi", + title: "UPI Autopay", + desc: "Easy, secure & hassle-free.", + }, + { + id: "gst", + title: "GST Invoices", + desc: "Automatic & compliant.", + }, + { + id: "cards", + title: "RuPay / Visa / MC", + desc: "Global card support.", + }, + { + id: "support", + title: "100% Indian Support", + desc: "Local team. Real people.", + }, +]; + +export const PLAN_TIER_RANK: Record = { + free: 0, + starter: 1, + pro: 2, + agency: 3, +}; + +export interface PlanCtaResult { + label: string; + actionType: "current" | "upgrade" | "downgrade" | "default"; +} + +export function getPlanCtaLabel( + plan: PricingPlan, + currentPlanId?: string, +): PlanCtaResult { + if (!currentPlanId) { + return { label: plan.ctaLabel, actionType: "default" }; + } + if (currentPlanId === plan.id) { + return { label: "Active Plan", actionType: "current" }; + } + const currentRank = PLAN_TIER_RANK[currentPlanId] ?? 0; + const targetRank = PLAN_TIER_RANK[plan.id] ?? 0; + + if (targetRank > currentRank) { + return { label: `Upgrade to ${plan.name}`, actionType: "upgrade" }; + } + return { label: `Downgrade to ${plan.name}`, actionType: "downgrade" }; +} diff --git a/src/client/features/billing/PricingGraphics.tsx b/src/client/features/billing/PricingGraphics.tsx new file mode 100644 index 0000000..4ea6c1f --- /dev/null +++ b/src/client/features/billing/PricingGraphics.tsx @@ -0,0 +1,256 @@ +import * as React from "react"; +import { + Search, + Sprout, + Rocket, + Crown, + Landmark, + Sparkles, + ShieldCheck, + Zap, + FileText, + CreditCard, +} from "lucide-react"; + +export function CrawlerXLogo() { + return ( +
+ + {/* Top facet - Cyan / Ice Blue (#4faede) */} + + {/* Left facet - MetatronCube Blue (#3779b9) */} + + {/* Right facet - Deep Navy (#0f1d34) */} + + {/* Subtle highlights */} + + + + + + + + + + + + + + + + + +
+
+ CrawlerX +
+
+ SEO Made Actionable +
+
+
+ ); +} + +export function DotGridMatrix({ className }: { className?: string }) { + return ( + + ); +} + +export function Floating3DChartCard({ className }: { className?: string }) { + return ( +