Changelog

What we shipped,
in the open.

Every meaningful change to X9Elysium — new pages, new features, infrastructure, and the things we removed because they didn't earn their place. Updated continuously.

May 3, 2026
7 releases
Infrastructure

Owned lead-capture pipeline documentation

Published a four-doc operating manual for the new Cloudflare Worker that handles every contact-form lead — architecture, setup, ops, and a one-page README. Replaces the third-party form vendor with a transparent, $0/mo stack we can audit end to end.

  • Architecture doc: request lifecycle, layered spam defenses, failure modes, parked enhancements
  • Setup recipe: Resend signup → DNS verification → wrangler secrets → optional Slack/KV/D1
  • Operations runbook: wrangler tail, D1 query recipes, KV management, key rotation
New feature

X.com posting automation + homepage tweets section

Two cron jobs in GitHub Actions now run the X.com presence end to end. One posts the next thought from a queued list twice daily; the other syncs engagement metrics back into the dashboard every six hours. The homepage gained a 3-up Tweets section beneath testimonials that stays hidden until the first post lands.

  • Posts via X API v2 (OAuth 1.0a User Context); every post becomes a git commit for full audit trail
  • Free-tier safe — handles missing impressions and rate limits gracefully
  • Instagram explicitly excluded from the channel mix; X is the only social surface
New feature

Custom lead-capture Worker on Cloudflare

Replaced Web3Forms with an owned /api/lead endpoint living in the same Cloudflare project that serves the static site. Layered spam defenses (origin allowlist → honeypot → dwell trap → optional KV rate limit → field validation), branded notification + auto-reply emails via Resend, and an optional D1 table for follow-up tracking.

  • Notification email is blocking — never silently swallow a lead
  • Auto-reply written in the founder's voice, not a noreply@ template
  • $0/mo expected at current volume across Workers + Resend + KV + D1 free tiers
Infrastructure

Dashboard sample data + Tab 6 spec

Added a header-only x-posts.csv plus a Tableau Tab 6 spec for the new X channel — KPI tiles, cadence timeline, engagement-rate trend, top-10 table, and a post-time heatmap — so the dashboard is wired before the channel produces real numbers.

Removed

Removed Instagram autoplay video from homepage

The 4.5MB hero clip and its <VideoShowcase> component are gone. The homepage now flows Hero → Services without an autoplay video competing with the hero copy.

May 2, 2026
17 releases
Marketing

Instagram content plan + automation roadmap (research)

Documented 10 ready-to-ship Instagram posts with image prompts locked to brand rails plus a three-tier automation path (manual → n8n → fully autonomous). Recommendation: ship Tier 1 first 30 days; kill the channel if zero qualified discovery calls land by end of Month 2. (Outcome: X.com chosen over Instagram a day later — see 2026-05-03.)

Marketing

6-month organic growth plan + third-party listings checklist

Two strategy docs landed: a month-by-month plan with a weekly engine cadence and a conservative + aggressive revenue model; and a P0–P3 directory + ecosystem playbook for the third-party proof gap (Shopify Partner directory, Clutch, Google Business Profile, real LinkedIn company page).

Improvement

Team cards: LinkedIn-on-hover treatment

Both the homepage and About-page founder cards are now a single anchor to each LinkedIn profile, with a top-right LinkedIn icon pill that fades in on hover. Stock-photo placeholders deleted; initials avatars hold the spot until real photos drop in.

Improvement

Email migration + stale config cleanup

Site-wide contact email moved to darshan@x9elysium.com. Removed Netlify- and Amplify-era cruft from configs and build scripts so the only deploy story is Cloudflare Workers (with a documented Hostinger FTP fallback).

Removed

Removed Tawk.to chatbot

Lead intake now flows through Web3Forms (and shortly the new owned Worker) plus direct email only. Reason: async, intentional inbound is preferred over chat triage at this stage.

Improvement

OG image switched from metadata-route to static PNG

The dynamic `app/opengraph-image.tsx` route was producing inconsistent renders behind Cloudflare's static-asset model. Replaced with a deterministic static 1200×630 PNG asset for predictable social previews.

New feature

Pin-gated journal at /docs/journal

Personal go-to-market journal lives at /docs/journal but ships as ciphertext only. AES-GCM + PBKDF2-SHA-256 with 100k iterations, default PIN overridable via JOURNAL_PIN at build time. Decryption happens in the browser after PIN entry — never linked from main nav, sitemap, or footer.

New feature

Local docs viewer (npm run docs)

A Google-Drive-style browser of docs/ at http://localhost:4000/docs — folder tree, search, in-place markdown editing that saves to disk, create/delete, and print-to-PDF via the browser. Lives in scripts/docs-viewer/ and is excluded from the static export.

Infrastructure

Cloudflare Workers static-assets deploy

Added wrangler.toml. Pushes to main now build via Cloudflare and ship `out/` as static assets through Workers, keeping the domain registered with Hostinger but moving the actual delivery to Cloudflare's edge. The Hostinger FTP recipe is documented as the manual fallback.

Infrastructure

`npm run deploy:zip` for any-host deploys

Build + zip `out/` into x9elysium-static.zip for direct upload to any static host. Used as a manual fallback when CDN deploys are gated.

Improvement

Static export + Canada/US SEO + deferred third-party scripts

next.config.js now emits a static export. Locale, hreflang, and contactPoint surfaces target Canada and the US deliberately. Third-party scripts (analytics, etc.) are deferred so they no longer block first paint.

Infrastructure

Post-push deployment verification protocol

A mandatory checklist in docs/deployments/post-push-checks.md — run after every push to main before reporting “done.” Hostinger and Cloudflare both cache HTML aggressively; this protocol catches broken builds the CDN would otherwise mask.