# meSEO — AI-Powered SEO & LLMO Intelligence Platform meSEO is a comprehensive SEO and Large Language Model Optimization (LLMO) intelligence platform with first-party cookieless tracking, universal form/booking plugin detection, and AI-powered content optimization. **Production:** [app.meseoapp.com](https://app.meseoapp.com) **Admin Portal:** [admin.meseoapp.com](https://admin.meseoapp.com) ## Tech Stack - **Frontend:** Next.js 14 (App Router) + TypeScript + Tailwind CSS - **Database:** Neon PostgreSQL + Prisma ORM - **Auth:** Clerk (organizations + role-based access) - **AI:** Anthropic Claude + OpenAI - **SERP Data:** DataForSEO - **Hosting:** Vercel - **Analytics Sources:** Google Analytics 4 (GA4), Google Search Console (GSC), First-Party Site Tag ## Architecture ``` app.meseoapp.com → Main application (brand owners, agencies) admin.meseoapp.com → Admin portal (superadmin operations center) /api/collect → Site Tag event ingestion endpoint /api/cron/* → Scheduled jobs (data retention, platform snapshots) ``` Same Vercel project, hostname-based middleware routing. ## Core Features ### Site Tag (First-Party Tracking) - **Cookieless** — zero `document.cookie` usage, sessionStorage/localStorage only - **Universal form detection** — native `
`, `[role="form"]`, container-based, standalone inputs - **Booking plugin detection** — Amelia (Elementor Step Booking variant), Calendly, NexHealth, Acuity, JotForm, Typeform, WPForms, Gravity Forms, Contact Form 7, HubSpot - **Chat widget detection** — DearDoc, Birdeye, Podium, Weave - **Device + geolocation** — User-Agent parsing (device/browser/OS) + Vercel geo headers (country, city, region) stored on session start - **21 healthcare iframe providers** detected (PatientPop, Tebra, NexHealth, MyChart, Epic, Cerner, athenahealth, Doctible, etc.) - **gtag/dataLayer interception** — captures GA4 custom events (make_an_appointment, contact_us, etc.) with pattern-based fallback matching - **Form & Booking Funnel** — Intent → Started → Submitted → Confirmed with per-stage drop-off - **Conversion taxonomy** — Tier 1 (hard: appointment_booked, form_submitted, phone_call, purchase) vs Tier 2 (soft: appointment_attempted, form_started, appointment_intent) - **30-second dedup window** with source-authority ranking and tier-upgrade - **HIPAA-aware** — never captures form field values, strips query params in healthcare mode - **3,400+ lines** of tracking intelligence in `public/t.js` ### Intelligence Pages - **Dashboard** — All Traffic / Organic toggle, KPI cards, tail cards - **Site Tag Analytics** — Live polling, event breakdown, form funnel, detected plugins, data confidence gauge - **AI Visibility** — LLM citation checking across ChatGPT, Gemini, Perplexity - **Keyword Research** — SERP analysis + keyword opportunities - **Rank Tracker** — Daily position monitoring - **Competitor Intel** — Keyword battles, word count analysis, SERP overlap - **Content Intel** — Content health scoring, accordion tiles - **Backlinks** — Backlink profile analysis - **Industry Intel** — 10-vertical regulatory map, visitor geography, seasonal correlations - **Technical Audit** — 200-page crawl with incremental progress - **Core Web Intelligence** — Multi-page CWV with competitor comparison - **Schema Generator** — JSON-LD generation with validation - **Broken Links** — Site-wide broken link detection - **Signals Center** — Persistent dismiss with 14-day TTL, revenue impact badges ### Content & Reports - **SEO Content Brief** — AI-generated briefs with inline schema - **LLMO Content Brief** — LLM optimization briefs - **Writing Assistant** — AI-powered content rewriting - **Page Studio** — Page creation and optimization - **Topic Map** — Content cluster visualization - **Report Studio** — Automated report generation ### Settings - **Profile** — Editable name, avatar upload via Clerk, IANA timezone dropdown, change password - **Billing** — Real plan data, trial countdown, change plan / manage billing links - **Notifications** — 5 email preference toggles with optimistic update - **Team** — Per-member brand access, seat count display, role management, invite with seat limit enforcement - **Usage** — 8 metrics with progress bars, color-coded thresholds, unlimited tier gradient bars ### Admin Portal (admin.meseoapp.com) - **Dashboard** — Platform KPIs with Site Tag / GA4 / GSC data source separation, brand filter, reconciliation - **Users** — Search, role filter, detail drawer, suspend/delete/brand-grant actions - **Brands** — Health ring, integration status dots, detail drawer with radar chart - **Session Explorer** — Per-session interaction timeline with device/location, repeat interaction highlighting - **AI Monitor** — Guardrail scoring, severity-colored feed, cost-by-brand breakdown - **Platform Analytics** — Brand Strength Radar (8 dimensions), Engagement (DAU/WAU/MAU + cohort retention), Data Moat, Growth & Retention (activation funnel + churn) - **Cost Center** — All vendor costs (Anthropic, OpenAI, Neon, Vercel, Clerk, DataForSEO, Resend) with live DataForSEO balance - **Compliance** — GDPR Article 17 deletion, Article 15 export, data retention cron, healthcare mode - **Data Export** — 4 due-diligence CSV exports (platform metrics, anonymized users, brands, growth time-series) - **Health Monitor** — DB row counts, cron status, recent errors - **Activity Feed** — Real-time 10s polling with connected timeline - **Conversion Funnel** — 5-stage funnel (Visit → Engaged → Intent → Started → Converted) with by-source and by-entry-page breakdowns - **Client Portal** — White-label setup, custom domain config, per-client page access controls, branded invite emails ### Monetization - **5 pricing tiers:** Growth ($249), Professional ($479), Agency ($1,299), Agency Pro ($2,499), Enterprise (Custom) - **Feature gates** — `` component + `useFeatureGate` hook + server-side `requirePlanFeature` - **Seat limits** — 2/5/10/25/unlimited per plan with enforcement at invite time - **Upgrade modal** — Auto-opens on 403 upgrade_required via `useUpgradeAwareFetch` - **Sidebar lock icons** — 15 protected routes mapped to feature keys - **Superadmin bypass** — all gates skip for superadmin role ### Security & Access Control - **BrandMembership** — Explicit brand access grants (not implicit org-wide) - **`verifyBrandAccess`** — Per-request brand authorization with audit logging - **`NoBrandAccessGuard`** — Redirects users with 0 brands to /no-access - **Superadmin** — Clerk publicMetadata.role via customized session token ### Conversion Accuracy - **Conversion taxonomy** — canonical types with Tier 1/2 classification - **Conversion resolver** — 30s dedup window, source-authority ranking, tier-upgrade in-place - **GA4 reconciliation** — overlapping-window comparison with daily rates - **Data confidence gauge** — 6-factor weighted score (session match, conversion capture, freshness, dedup quality, event coverage, plugin detection) - **Deduped KPIs** — COUNT(DISTINCT session+page+type), not raw row count ## Environment Variables ``` # Database DATABASE_URL= # Neon PostgreSQL pooler endpoint # Auth NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= CLERK_SECRET_KEY= # AI ANTHROPIC_API_KEY= OPENAI_API_KEY= # SERP Data DATAFORSEO_LOGIN= DATAFORSEO_PASSWORD= # Google GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GA4_PROPERTY_ID= # App NEXT_PUBLIC_APP_URL=https://app.meseoapp.com ``` ## Clerk Session Token In Clerk Dashboard → Configure → Sessions → Customize session token: ```json { "metadata": "{{user.public_metadata}}" } ``` Required for superadmin role detection in middleware. ## Cron Jobs | Schedule | Endpoint | Purpose | |----------|----------|---------| | Daily 03:00 UTC | `/api/cron/data-retention` | Purge data older than retention period (395 days default) | | Monthly 1st 01:00 UTC | `/api/cron/platform-snapshot` | Capture platform metrics snapshot | ## Key Architectural Decisions - **Same Vercel project** for app + admin, hostname-based middleware routing - **Cookieless tracking** via sessionStorage/localStorage — no cookie consent needed - **Conversion taxonomy** with Tier 1 (hard) vs Tier 2 (soft) — only Tier 1 counts in KPIs - **gtag/dataLayer interception** as primary conversion source for GA4-instrumented sites - **30-second dedup window** with tier-upgrade for conversion resolver - **DataForSEO** never mentioned in user-facing UI — labeled "SERP & Keyword Lookups" - **Site Tag** at 3,400+ lines with universal plugin detection (10 booking + 4 chat providers) - **PlatformEvent + AiInteraction** telemetry with fire-and-forget pattern ## Site Tag Detection Patterns The Site Tag (`public/t.js`) detects third-party plugins and integrations running on a brand's site and fires `plugin_detected` events. Detection patterns live in the unminified source file, which is gitignored: **Detection source:** `public/t.source.js` Three registries: - `BOOKING_PLUGINS` (~line 5832) -- appointment and form plugins - `CHAT_WIDGETS` (~line 6416) -- live chat and messaging widgets - `ANALYTICS_PLUGINS` (~line 6659) -- analytics, pixels, SEO, CMS, e-commerce, CRM, and more (~47 entries) **Enrichment metadata:** `src/lib/site-tag/integration-signatures.ts` Maps each `plugin_key` to vendor name, category, and description. Consumed by the backfill route and the Integrations tab API. **Adding a new detection rule:** 1. Add an entry to the appropriate registry in `public/t.source.js` 2. Add a matching entry in `ENRICHMENT_REGISTRY` in `integration-signatures.ts` 3. Build the tag: `cp public/t.source.js public/t.js && npm run build:site-tag` 4. Bump `TAG_VERSION` in `public/t.js` to today's date (`YYYY.MM.DD`) See `docs/phase-30-site-tag-detection-expansion.md` for the full pattern guide, detection strategy examples, and performance constraints. ## Development ```bash npm install npx prisma db push npx prisma generate npm run dev ``` Local admin portal: `admin.localhost:3000` ## License Proprietary — All rights reserved.