What we shipped
Every fix, feature, and improvement we push to production. Updated in real time.
Pricing, demos, CTAs, logos: a full site refresh
Reworked pricing into two plans: Growth at $599/mo for 30 pages + AI visibility tracking + dedicated account executive (featured 'Most chosen' card), and Professional at $999/mo for 100 pages with backlinks, social presence, and competitor intel. Dropped 'real-time', 'AI-written', 'real human', 'cancel anytime / no lock-in', 'Published daily', and 'Everything included' language. Removed 'Slack support' everywhere and renamed 'account manager' to 'account executive'. Unified every primary CTA across the site to 'Book a call' pointing at the strategy-call form, keeping only a subtle 'Log in' as secondary. Reddit/Quora/YouTube work is now framed as 'business presence' instead of 'seeding'. Homepage hero stat now reads 9B prompts across AI platforms and 5B on ChatGPT specifically.
15 new industry demos + full demos page redesign
Added 15 new demos covering Legal, Accounting, Insurance, Construction, Restaurants, Automotive, Media, Nonprofit, Beauty, Events, Logistics, Energy, Biotech, Cybersecurity, and Telecom. Total demo count is now 32. Introduced a ScaffoldDemo component so every new demo shares one premium scaffold (header, hero, stat strip, services grid, value props, industries table, testimonial, FAQ, closing CTA, footer) and only the palette + brand content varies. The demos index page now has category filters (All, Healthcare, Finance, Technology, Industrial, Services, Consumer) with live counts, a redesigned cohesive logo set (dark card + brand-colored monogram for all 32), and cleaner card copy.
Kill mono typography across 26 demo files + the global site
Removed JetBrains Mono / IBM Plex Mono / system mono fallbacks across 26 demo components. Every `MONO` stack now renders as DM Sans (loaded via next/font). Also fixed the global `--mono` CSS variable so no more mono text leaks anywhere on the site. Additionally bumped ~30 small text classes site-wide for legibility and added `a{color:inherit}` as a safety net so no unstyled link ever falls through to browser-default blue.
Fix: contrast bugs on PrecisionParts, HomeBase, PayStack, NeuralWave + footer dark-on-dark
Audited every demo for contrast issues. PrecisionParts hero headline was near-black on a dark factory image; flipped to white with a stronger gradient. HomeBase italic tagline and eyebrow were lost on the sunlit hero; moved to warm gold with text-shadow. PayStack and NeuralWave top navs used dark text on a dark translucent header; switched to white at 82% alpha. PayStack code terminal rendered text in the same color as its background (invisible curl sample); fixed. Across PrecisionParts, PayStack, NeuralWave, and CloudSync the footer navigation was dark text on a dark footer background; now uses white at graduated opacity (0.72 for links, 0.55 for fine print).
Removed agent log page
Removed /activity (Agent Log) and dropped it from the More dropdown in MainNav.
Industry landing pages: 30 verticals, one engine
Shipped dedicated landing pages for 30 industries, from hospitality and medical tourism to B2B SaaS and senior living. Each page includes industry-specific pain framing, solution bullets, page type examples, target AI queries, keyword patterns, sample page titles, a page preview mockup, industry-specific FAQs, and a mapped demo. Full index at /industries grouped by category.
Visual hero blocks and page preview mockups
Every industry page now has a full-width visual hero with an industry-specific gradient, geometric grid pattern, and large display typography. Added a stylized browser window mockup that previews what a published page looks like on the client's domain: hero image block, title, reading time, content lines, and lead capture CTA. Loads instantly, no external image fetches.
Fix: reveal animations invisible on server-rendered pages
Industry pages use the `.reveal` animation class from globals.css but are server components (needed for SEO and static param generation). The IntersectionObserver that triggers reveal never ran, so sections were stuck at opacity 0. Added a small RevealObserver client component that can be dropped into any server page to restore fade-in animations without breaking SEO.
Pricing page redesign with social proof and risk reversal
Added a logo strip of trusted brands, a 'See a live example' secondary CTA linking to a real tenant, a real-client results section featuring SBNRI, Zostel, and MuscleMind, a setup-fee-reframing FAQ, and a new earlier-milestones timeline ('first pages indexed within 24 hours') to reduce the 60-to-90-day wait objection.
Replaced Coins.ph with MuscleMind across the site
Swapped the Coins.ph case study and logo-strip reference with MuscleMind, an AI fitness coaching platform, across the homepage proof row and the case studies page.
New product: Social Presence (Reddit, Quora, YouTube, Google Business)
Added Social Presence as a new product. We use verified, aged accounts to naturally seed your brand into Reddit threads, Quora answers, YouTube comments, and Google Business listings where your target customers ask for recommendations. Links back to your content hub for compounding visibility.
New product: Content Gap Page Generation
One-click page generation from AI visibility content gaps. When competitors appear in AI responses for queries you are missing, click a button and the system generates a fully optimized page targeting that gap.
Unique product illustrations
Redesigned all 15 product illustrations with unique colors and visual metaphors. Each product now has a distinct identity: radar sweep for visibility tracking, funnel for leads, globe for hosting, network graph for backlinks, crystal ball for the simulator, and more. Removed the old shared browser window frame.
Remove 'Signal' terminology from public pages
Replaced all customer-facing references to 'Signal' (internal-only term) with 'content hub' or removed them entirely. Fixed footer navigation links across all pages from /signal to /products. Fixed domain examples from signal.yoursite.com to hub.yoursite.com.
Performance: remove unused components from layout
Removed AgentPresence bar and ThemeCustomizer from the production layout. These were dev tools that shipped client-side JavaScript to every page. Also dropped the unused DM Sans 300 font weight, removed the nav chapter text indicator, and fixed hydration mismatches in illustration trig calculations.
Fix stale page counts and copy across site
Fixed stale page counts (50/mo, 300/mo, 900 pages) and outdated marketing copy across the what-we-do page, product data, FAQ content, article content, and comparison data. Numbers now match the current deliverable.
Codebase refactor and cleanup
Centralized AI model configuration into a single file. Fixed usage tracking recording the wrong model name. Extracted shared auth helper to eliminate duplicated code across 6 server actions and API routes. Replaced inline Supabase client with the standard admin factory. Removed dead code and unused dependencies. Added root-level error boundary and 404 page.
Public changelog page
Added a /changelog page that lists every fix, feature, and improvement shipped to production. Updated in real time as changes are deployed.
Fix link paths on custom domain pages
Links on custom domains like signal.vaultcatalyst.com were showing internal /tenant/ paths in the URL bar. Fixed all tenant routes to use clean root-relative paths.
Hide platform branding on custom domains
Custom domain pages were leaking GrowthManager branding in the page title, JSON-LD schema, and showing the agent activity panel and theme customizer. All platform UI is now hidden server-side on tenant domains.
Custom domain support live
Client pages can now be served on custom subdomains (e.g. signal.vaultcatalyst.com). The middleware detects non-platform hostnames and routes to the correct tenant. Full SEO support including sitemap, robots.txt, llms.txt, and JSON-LD.
Fix client page preview crashes
FAQ and content pages were crashing with 'relatedQuestions.map is not a function' and 'sections.map is not a function'. Root cause: AI-generated structured data was stored as JSON strings inside the JSONB column. Added defensive parsing throughout the page mapper.
AI-generated starter pages on new accounts
New accounts now get real AI-generated starter pages during onboarding instead of hardcoded filler text. Each product gets a dedicated page with contextual content, and a FAQ page is generated automatically.
Theme customizer and brand settings
Added a settings panel where clients can configure brand colors, typography, logo, and custom domain. Settings persist in brand_settings JSONB on the organization and flow through to every tenant page automatically.
Agent activity log (DB-backed)
Replaced the static JSON activity stream with a real agent_activity database table. Every page generation, visibility check, keyword import, and outreach event is now logged with org, timestamp, and context. Powers the /activity and dashboard activity views.
RSS feed and per-tenant sitemap
Each tenant domain now serves its own /feed.xml and /sitemap.xml that update automatically as new pages publish. Fixed the Next.js route conflict by rewriting /sitemap.xml on tenant domains through /api/tenant-sitemap.
JSON-LD structured data on every page
Added automatic JSON-LD schema to every published page, including Organization, BreadcrumbList, and page-type-specific markup (Article, FAQPage, Product). Designed to be cited directly by ChatGPT, Perplexity, and Gemini.
llms.txt generation per tenant
Added llms.txt and llms-full.txt endpoints on every tenant domain. Follows the emerging standard for AI crawler discovery so ChatGPT, Claude, and Gemini can index a client's content hub without hitting rate limits.
IndexNow integration for instant indexing
New and updated pages ping IndexNow on publish, notifying Bing, Yandex, Seznam, and Naver within seconds. Typical indexing time dropped from days to hours. Configurable per tenant via INDEXNOW_API_KEY.
Weekly AI visibility email reports
Added an automated cron-backed weekly report that runs visibility checks across all tracked queries and emails a summary with week-over-week score changes, new mentions, lost citations, and competitor shifts.
Lead dashboard with status pipeline
Added the Leads dashboard view. Lead records move through a new / contacted / qualified / converted pipeline, with source attribution showing which page and AI platform drove each submission.
Lead capture forms on all pages
Every published page now includes a configurable lead capture form. Submissions hit the leads table with page, type, and source metadata so clients can see which AI-driven queries and pages actually drive contact.
Generic content renderer for custom page types
Shipped GenericContent, a renderer that handles any custom page type on tenant domains. Fields defined in the template builder map directly to layout blocks (text, textarea, array, rich-array, comparison-points) so user-defined types render the same way as built-ins.
AI-powered URL analysis for template cloning
Added /api/ai/analyze-page: paste any URL and Claude reverse-engineers the page structure into a reusable template with typed fields. Used in the template builder as a one-click starting point.
Custom page templates (field builder)
Clients can now define their own page types with 5 field types (text, textarea, array, rich-array, comparison-points). Stored in custom_page_types and merged with built-ins via resolvePageType(). AI generation handles custom types through the same dynamic prompt builder.
End-of-year stability fixes
Batch of reliability fixes going into the new year: retry logic around web research failures, graceful fallback when image generation fails, better error surfacing in the dashboard when generation errors, and deduped embedding writes to avoid drift.
Web source discovery via SERP (Reddit, Quora, YouTube)
AI Visibility now surfaces where your brand is being discussed outside of AI answers: Reddit threads, Quora questions, YouTube comments, blogs, and review sites. Live SERP data with automatic source categorization.
AI response simulator
New simulator: paste a query, get a prediction of whether your business would appear in the AI answer and why. Uses your brand knowledge RAG to surface gaps before they cost you a citation. Includes fix-this-gap suggestions.
Competitor intelligence (keywords + backlinks)
Click a tracked competitor to see their top-ranking keywords, backlink profile, and AI visibility score. Domain intersection and ranked-keyword data with 7-day response caching.
AI-generated backlink outreach emails
Click any backlink opportunity and generate a personalized outreach email with Claude based on the target page, the client's brand, and the link context. Tracked in a simple outreach status pipeline (new / sent / replied / acquired).
Backlink opportunity discovery
Added opportunity discovery that surfaces sites linking to competitors but not yet to the client. Ranked by domain authority and relevance. Feeds directly into the outreach pipeline.
Backlink profile tracking
Pulls the client's live backlink profile and surfaces referring domains, anchor distribution, and lost links. Responses are cached for 3 days to keep things fast.
Keyword research dashboard
New Keywords view with search volume, difficulty, CPC, and a target / dismiss / converted lifecycle. Keywords pulled from the content-gap detector land here in one click.
Search data integration
Wired up keyword and SERP data with cached responses. Exposed keyword suggestions, related keywords, ranked keywords, SERP search, and domain intersection. All writes go through the admin client to bypass RLS.
AI visibility scoring and report aggregation
Per-platform check results now aggregate into a single visibility score per org. Scores persist in visibility_reports so week-over-week trends render in the dashboard without recomputing.
Perplexity and Gemini visibility checks
Added checks for Perplexity and Google Gemini alongside ChatGPT. Each check captures the cited URLs, mention count, and sentiment so we can detect citation and share-of-voice changes over time.
AI visibility checks (ChatGPT, first pass)
First version of the visibility check pipeline. Runs tracked queries against ChatGPT and records whether the client's brand was mentioned, in what position, and with what citations. Stored in visibility_results.
Multi-model content pipeline
Split content generation into stages using the right model for each job: a fast model for the blueprint / outline, a reasoning model for the long-form body, a multimodal model for diagrams, and a dedicated image model for the hero. Dropped per-article cost to roughly $0.37.
Branded hero image generation
Every generated page now ships with a branded hero image. Prompts are derived from the page topic and the client's brand voice so images feel on-brand instead of stock.
Web research during generation
Added a research pass that runs several live web searches per article and extracts content from the top results. Grounds the writer in current facts and citable sources, which keeps AI platforms willing to quote us.
Brand knowledge entries (7 categories)
New Knowledge view in the dashboard where clients add bits of business context (doctors, services, credentials, policies, case patterns, etc.) across 7 categories. Entries are embedded instantly into the RAG index on save.
RAG retrieval from website content
Ingest pipeline now crawls the client's website, chunks content, and embeds it into document_embeddings. Retrieval uses the match_embeddings() PostgreSQL function to pull the top 8 chunks into every generation prompt.
OpenAI embeddings (1536-dim)
Wired up text-embedding-3-small with a document_embeddings table. Covers brand settings, vertical context, crawled website chunks, and published pages. Powers internal linking, RAG retrieval, and duplicate detection.
Pages list and editor
Added the Pages dashboard view with search, filter, and status (draft / published / archived). Editor supports structured fields per page type and a raw JSON toggle for power users. Cmd+S saves.
Dashboard shell and navigation
First pass at the dashboard: Overview, Pages, Knowledge, Activity, Settings. DashboardNav is responsive, and the main nav collapses to a hamburger on mobile. Laid the groundwork for later feature views.
Page type system with JSONB storage
Unified page_type and type_data JSONB on the pages table. Each vertical ships with its page types, and the edit UI renders per-type fields automatically. Unlocks easy addition of new page types later.
Vertical configs for 12 industries
Added vertical configuration files for SaaS, manufacturing, services, e-commerce, local, healthcare, real estate, education, VC, fintech, AI, and agencies. Each defines page types, required fields, and a starter content kit. Resolved via resolve-page-type.ts.
First Claude content generation pipeline
Initial end-to-end generation: take a page type and brand brief, build a prompt, call Claude, post-process the output, and save to pages. First real articles published on a test tenant domain.
Onboarding flow (5 steps)
Built the onboarding funnel: business type, brand (with website scrape), products, domain, complete. Auto-generates a handful of starter pages on finish so new orgs never start with an empty dashboard.
Multi-tenant database schema
First pass at the Supabase schema: organizations, users, pages, leads, page_views, ai_generation_usage. Row-level security policies scoped every table to org_id from day one to keep tenants isolated.
Project kickoff: Next.js 16 and Supabase auth
First commits. Scaffolded the Next.js 16 App Router project with Turbopack, wired up Supabase auth (email/password plus magic link), set up the Vercel deploy pipeline, and pushed the first placeholder pricing and marketing pages.