White Crow Directories
Custom AI Agent Development
- Next.js
- Supabase
- OpenAI
- Typesense
- Stripe
- Cloudflare
- Mapbox
- Google Places

A live directory site provisioned by the White Crow platform in a single click.
An SEO agency owner came to 10xDev with a bold idea: what if he could offer his clients fully-built, niche business directory websites — programmatically generated, indexed for search, and continuously enriched with AI-written content — as a recurring product line? White Crow Directories is the platform we built to make that idea real. It turns a multi-week manual build into a one-click operation, and then keeps the sites alive and growing autonomously.
One-Click Site Provisioning
From the admin dashboard, the operator enters a domain, a vertical (e.g. "Lawyers"), and a geography — and the platform does the rest. A single server action orchestrates the entire provisioning pipeline: it creates the site record in Supabase, generates a tailored set of categories using OpenAI, seeds the site's city/category join tables, dispatches Google Places search jobs across every category/city combination, auto-generates a color palette and site assets, registers the domain's auth redirect URLs via the Supabase Management API, and programmatically provisions the subdomain on Cloudflare. Within minutes a brand new, fully-branded directory is live at a custom domain — with real businesses, reviews, photos, and maps already populated.
Multi-Tenant Architecture
The entire platform is a single Next.js 16 deployment serving unlimited directory sites. A root-level proxy middleware extracts the incoming hostname, resolves it to a SiteConfig from the sites table, and injects it as a request header. Every downstream query filters by site_id through dedicated join tables (site_businesses, site_categories, site_cities), giving each tenant a fully isolated content surface while sharing a single business and review corpus. Admin routes are gated to a hardcoded admin domain; public sites get aggressive Cloudflare CDN cache headers with stale-while-revalidate for near-instant page loads.
The Admin Dashboard
The admin dashboard is the command center for the entire platform. From a single interface, the operator manages every site, every business, every job, and every piece of AI-generated content across the network. A live job tracker surfaces every queued, running, and completed job with its status, payload, worker ID, lock timestamps, and full error traces — so the operator can watch a newly-provisioned site populate in real time, spot stuck jobs instantly, and retry any failure with a single click. A dedicated Typesense sync panel shows indexing state per site and exposes manual re-sync and re-index controls for when schema changes or bulk data edits require a fresh push to the search cluster.
Beyond job orchestration, the dashboard gives fine-grained control over the content itself. Admins can trigger a biweekly business refresh on demand — re-hitting Google Places for every business on a site to pull updated hours, photos, ratings, and review counts — or let the scheduled cron handle it automatically. The article generation trigger lets the operator kick off the SEO content agent for any site with a single button press, and the business management surface supports manual overrides, premium promotion, and featured placement. Every destructive or content-mutating action automatically purges the Cloudflare CDN cache for the affected site so changes go live within seconds.
The Agentic Content Engine
Launching a directory is only half the value — keeping it ranking is the other half. A background worker polls a database-backed job queue with distributed locking, claiming jobs atomically via a claim_next_job Postgres RPC and recovering stale ones on a 5-minute timeout. Six job processors power the entire automation layer: Google Places ingestion, business-to-site association, Typesense search indexing, biweekly business refresh, AI category description generation, and a dedicated generate-articles agent that writes on-brand, SEO-optimized long-form content tailored to each site's vertical and locations. All job payloads are validated with Zod schemas shared from a common package, so the web app and worker never drift out of sync.
Search, Maps, and Real Data
Business data is pulled from Google Places API, normalized into a shared schema, deduplicated across sites, and indexed in a self-hosted Typesense cluster running as a container service with a persistent disk. Search suggestions, category/city/business routing, and map-based discovery all hit Typesense directly for sub-100ms responses. Mapbox GL powers interactive maps with lazy loading to preserve Lighthouse scores. A biweekly refresh cron re-ingests business data so hours, ratings, and photos never go stale.
Billing & Self-Service for End Businesses
Listed businesses can claim their profile, upgrade to premium via Stripe Checkout, and manage their subscription through a Stripe-hosted customer portal. Premium businesses unlock custom media, overrides, and featured placement. Webhooks keep Supabase state in lockstep with Stripe, and admins can manually promote or demote businesses from the dashboard.
Hardened Infrastructure
Three services are codified in render.yaml: the Next.js web app, the background worker, and the Typesense container. A pnpm monorepo with a shared package enforces a single source of truth for database types (auto-generated from Supabase), job schemas, and Supabase clients (server-side, browser, and service-role variants). Forms are protected by honeypot fields, auth sessions are refreshed on every request, and Cloudflare cache purges are wired into every content mutation so edits go live instantly without sacrificing edge caching.
The Result
What used to be a manual, weeks-long engagement — picking a niche, finding businesses, building a site, writing content, setting up billing — is now a button press. The agency can offer directory sites as a scalable, productized SEO service, and every site keeps getting better on its own long after launch.