deluxe-astrology.html

A 91,000-page astrology platform in 30 languages on Astro and Supabase

The largest single Astro deployment I have shipped, and the production proof that programmatic SEO at scale can be done without triggering Google's thin-content patrol. Built from scratch over 14 months and rebuilt mid-2025 around the TRIBE v2 UX rubric.

BOOK A 30-MIN CALL

The numbers

  • 91,000+ Static pages across 30 languages
  • 350+ Astrological gemstone catalogue unique stones with planetary pairing
  • < 5 min Build time thanks to out-of-band translation
  • 30 Languages live 8 fully human, 22 LLM-translated + RDA-humanized

The brief

Deluxe Astrology started as a portfolio side project in 2024 — a content site about astrology I wanted to run on the modern stack I write about. It became something larger: a stress test of every architectural pattern I was recommending to clients at Seahawk Media. Could you build a 90,000-page content site in 30 languages on Astro and Supabase, ship under a 5-minute build, pass every Core Web Vitals threshold, and keep the editorial workflow fast enough for one person to run?

The premise was that if it could not work for me, with no team and a real budget constraint, the same architecture could not be honestly recommended to a client paying agency rates. The case study below is the version of that question that actually shipped.

The architecture

Astro for static generation. Supabase as the editorial database for content, translations, gemstone metadata, and image references. FAL API + Sharp for AI image generation, with the post-processing pipeline that re-encodes every output to WebP at quality 82 and uploads to Supabase Storage with year-long cache headers. RDA Humanizer between every LLM-generated draft and publish, gating against banned-word lists and Flesch-Kincaid floors.

Translation runs out-of-band — translate-build.mjs polls for new content nightly, batches it into Anthropic Haiku at $1/M tokens, runs the humanizer pass, and writes to a translations table. The Astro build reads the cache and never blocks on translation throughput, which is what keeps deploy times under five minutes even when 200 new pages ship in a day.

i18n routing: subdirectory model with EN at root, all others at /{locale}/. Locale regex matches longer codes first (zh-Hant before zh) to avoid the silent fallback bug that costs SEO. Bidirectional hreflang on every page with self-reference and x-default. content_group_id = id on every EN row so translations inherit cleanly.

The TRIBE v2 rewrite

Halfway through 2025 I rewrote every public-facing surface against the TRIBE v2 UX rubric — a methodology I built from applied neuroscience research and validated on the live DA traffic. Every hero, every CTA, every section heading is now scored on the four-network framework (self-referential, emotional arousal, narrative transportation, meaning-making) and on you-density. The methodology is documented and lives at the top of the Tara skills repo.

The validated outcome on DA: r = +0.813 between you-density and time-on-page. Navigation labels (Sign In → Sign Up Free; You → Join) measurably moved anonymous-to-registered conversion. Section headings on compatibility pages shifted from descriptive ("Aries compatibility with Taurus") to Zeigarnik ("Why Aries and Taurus can't stop fighting — and can't stay apart") and lifted scroll depth proportionally.

The Cosmic Gemstone Hub

350+ astrological gemstones, each with structured metadata: ruling planet, recommended ascendants, Mahadasha periods, contraindications, ratti/carat conversion, finger and metal recommendations. Built originally as a content layer; turned into the moat behind the /solutions/vedic-gemstone-store/ pillar on the main site and the source for cross-linking authority into the gemstone-trade solution cluster.

The catalogue lives in 30 languages with proper technical-glossary translation (heated, unheated, treated, oiled — terms that have specific meanings buyers verify before purchase). The translation pipeline writes provenance per field, so a gemmologist reviewing a French treatment description can see whether it came from a human translator or from the LLM-plus-humanizer path.

What broke and what worked

Broke: the original locale regex matched zh before zh-Hant, silently degrading Traditional Chinese SEO for three weeks before I caught it. Now codified in the global SEO foundations as rule 2 — longer locales first.

Broke: a CSS Grid 1fr column on /blog/[slug] caused table content to overflow the parent container at the viewport edge on wide laptops. Fix is minmax(0, 1fr) with min-width: 0 and overflow-wrap: break-word on direct children. Codified as rule 11.

Worked: the out-of-band translation pipeline. Build never blocks on Anthropic API throughput, deploys stay under five minutes, the translations table is the cache that survives across builds.

Worked: the FAL hero pipeline with sharp re-encoding. 53 heroes averaging 900KB stripped to 80KB each = 50MB site-wide saving. CWV LCP impact was visible within a week of the migration.

The stack

  • Astro
  • Supabase
  • Anthropic Haiku
  • FAL flux-pro
  • Sharp
  • Vercel
  • Pagefind

Timeline: 14 months from idea to 91k pages live, with an in-flight TRIBE v2 rewrite in month 8

Related work

If your project shape matches this one — the conversation is short

If the architectural pattern here is close to your project shape, the next step is a 30-min call. Describe your brief; I tell you whether I am the right person; by the end you have a stack pick, a price range, and a delivery window. No deck, no qualification screen.