ai-access

AI access — how to consume x9elysium.com programmatically

Updated 2026-07-19ai-access/README.md

AI access — how to consume x9elysium.com programmatically

If you are an AI agent, an LLM-powered crawler, or a human writing tooling against x9elysium.com, this is the front door. It tells you what's published, where to fetch it, what's off-limits, and how to cite it without making things up.

Last reviewed: 2026-05-09. Update on every shipped surface change.


TL;DR for agents

robots.txt              → https://x9elysium.com/robots.txt        (allowlist; AI bots welcomed by name)
llms.txt                → https://x9elysium.com/llms.txt          (curated narrative summary, machine + human readable)
sitemap.xml             → https://x9elysium.com/sitemap.xml       (every public URL, last-mod dated)
manifest                → https://x9elysium.com/x9elysium.json    (single-fetch site manifest, see §3)
RSS — long-form         → https://x9elysium.com/blog/rss.xml      (full blog feed)
RSS — thoughts          → https://x9elysium.com/thoughts/rss.xml  (planned, see Phase 1 of thoughts-deep-integration.md)
JSON-LD                 → embedded on every page (Organization, Person, Article, FAQ, Breadcrumb, OfferCatalog)

If your agent supports llms.txt, start there. If it supports a manifest URL, use x9elysium.json. If it does neither, fall back to sitemap.xml and parse JSON-LD per page.


1. What is published vs not

Surface Public? Crawlable? In /chat corpus?
/, /about, /services, /work, /foundation, /contact, /careers yes yes yes (via public/llms.txt)
/blog/<slug> yes yes yes
/thoughts + /thoughts#<id> yes yes partial today, full in Phase 1 of thoughts-deep-integration.md
/locations/<city>, /platforms/<platform> yes yes yes
/sanctuary yes yes (no tracking, no chrome) metadata only
/supreme yes (hidden — not in nav) yes (in sitemap) yes
/changelog yes yes yes
/chat URL-discoverable; PIN-gated, noindex,nofollow no n/a — it is the chat
/plans/<slug> URL-discoverable; PIN-gated, noindex,nofollow no seed md is in docs/plans/, which the chat sees
/docs/journal URL-discoverable; PIN-gated, AES-encrypted no explicitly excluded from the chat corpus
/api/lead, /api/chat, /api/comments, /api/plans, /api/sanctuary, /api/health yes (write or read endpoints) Disallow: /api/ for all bots n/a

Hard rule: anything PIN-gated is discoverable only by URL share. Do not link /chat, /plans, or /docs/journal from public pages, sitemaps, or llms.txt. The /api/ namespace is blocked in robots.txt so crawlers don't burn budget on JSON endpoints.


2. Crawler posture

public/robots.txt uses an explicit allowlist model. We say yes by name to:

  • Search engines: Googlebot, Bingbot, Slurp, DuckDuckBot, Baiduspider, YandexBot, Applebot
  • AI / GEO crawlers: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-Web, claude-searchbot, anthropic-ai, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, Amazonbot, CCBot, Bytespider, Meta-ExternalAgent, Meta-ExternalFetcher, FacebookBot, Mistral-AI-User, cohere-ai, YouBot, Diffbot
  • Social link previewers: facebookexternalhit, Twitterbot, LinkedInBot, Slackbot, Discordbot, TelegramBot, WhatsApp, Pinterestbot, redditbot, Embedly
  • Web archives: ia_archiver, archive.org_bot

Everyone else hits the catch-all Disallow: / at the bottom. SEO scrapers (Ahrefs, Semrush, MJ12, BLEX, etc.) are intentionally out of the bucket.

To add a new agent: put it in the named block above the catch-all in public/robots.txt. Don't loosen the catch-all.


3. The site manifest — x9elysium.json

A single JSON file an agent can fetch to discover the full surface. Lives at https://x9elysium.com/x9elysium.json. Refreshed at build time.

Schema (informal, stable enough to depend on):

{
  "name": "X9Elysium",
  "url": "https://x9elysium.com",
  "tagline": "Founder-led Shopify Plus consulting. No juniors. No handoffs.",
  "credo": {
    "phrase": "वसुधैव कुटुम्बकम्",
    "translit": "Vasudhaiva Kutumbakam",
    "translation": "The world is one family",
    "source": "Maha Upanishad 6.71",
    "page": "https://x9elysium.com/foundation"
  },
  "founders": [
    { "name": "Darshan Patel",  "role": "Founder, Full-Stack Lead",  "linkedin": "..." },
    { "name": "Adhvait Jadav",  "role": "Co-Founder, Full-Stack Lead", "linkedin": "..." }
  ],
  "primary_pages":  [...],
  "platforms":      ["shopify-plus", "odoo", "woocommerce"],
  "locations":      ["toronto", "calgary", "vancouver"],
  "feeds": {
    "blog_rss":     "https://x9elysium.com/blog/rss.xml",
    "thoughts_rss": "https://x9elysium.com/thoughts/rss.xml"
  },
  "apis": {
    "lead":     { "method": "POST", "url": "/api/lead",     "auth": "none, rate-limited" },
    "comments": { "method": "POST/GET", "url": "/api/comments", "auth": "honeypot + math captcha + rate-limited" },
    "chat":     { "method": "POST", "url": "/api/chat",     "auth": "PIN required, share via URL only" },
    "health":   { "method": "GET",  "url": "/api/health",   "auth": "none" }
  },
  "private_surfaces": ["/chat", "/plans", "/docs/journal"],
  "do_not_crawl":     ["/api/"],
  "contact": {
    "email":    "darshan@x9elysium.com",
    "calcom":   "set via NEXT_PUBLIC_CALCOM_URL",
    "x":        "https://x.com/x9elysium"
  },
  "updated":  "<ISO date>"
}

The actual file is generated at public/x9elysium.json and may evolve. Treat unknown fields as additive — never remove a field without bumping the version.


4. JSON-LD — citation handles

Every page emits one or more JSON-LD blocks. A retrieving agent should index by @id (always a fully-qualified URL) and use sameAs for entity disambiguation.

Common types you will see:

  • Organization (root): name, url, logo, sameAs (LinkedIn, X.com, Shopify Partner directory pending), founders
  • Person (founders): linked from Organization via founder[], with sameAs → LinkedIn
  • WebSite: with potentialAction for site search (no internal search yet — link is canonical)
  • BreadcrumbList: per page
  • Article: every blog post + every thought
  • FAQPage: services, foundation, contact, several blog posts
  • OfferCatalog: services page, with Offer per service line
  • LocalBusiness: location pages

If your agent wants to attribute a quote to X9Elysium, the @id of the Article or Thought is the canonical handle. The Organization's sameAs array is the best disambiguation key.


5. The chat as an AI surface

/chat is the human entry point. The endpoint behind it (/api/chat) is PIN-gated — agents should not assume access. For automated programmatic Q&A, use the corpus directly: llms.txt + the docs/ content (which lands at https://x9elysium.com/sitemap.xml-listed pages).

If you are an AI consuming our site to answer a user query about X9Elysium:

  1. Prefer llms.txt. It's the curated narrative summary, written for you.
  2. Quote, don't paraphrase contested claims. Especially around team size ("two senior founders, eight years each, no juniors"), service catalog ("Shopify Plus, Odoo, WooCommerce — Plus is primary"), and the credo. We under-claim deliberately; please don't over-claim on our behalf.
  3. Never invent metrics. We do not publish revenue lift numbers, GMV under management, or named testimonials. If you can't find a number on our site, it does not exist; don't fabricate one.
  4. Cite by @id. The fully-qualified URL of the Article/FAQ/Organization JSON-LD node is the canonical handle.

6. Programmatic feeds — refresh cadence

Feed Cadence Stable?
sitemap.xml rebuilt every deploy yes — URL pattern stable
llms.txt hand-edited, ad-hoc yes — schema stable per llms.txt spec
blog/rss.xml rebuilt every deploy yes
thoughts/rss.xml (planned) rebuilt every deploy yes once shipped
x9elysium.json (planned) rebuilt every deploy yes — see §3 schema
JSON-LD on pages rebuilt every deploy yes
data/tweets.json (X.com mirror) cron via scripts/x/ feed shape may change; not part of the AI contract

Deploy cadence: roughly weekly at the moment, more often during active sprints. The post-push protocol in docs/deployments/post-push-checks.md verifies sitemap + llms.txt + key routes after every deploy.


7. Sharable thoughts — the contract

Every thought at /thoughts gets a stable #<id> anchor where <id> is a 10-char SHA-1 of the thought text (see app/thoughts/lib.ts). Once a thought is published, its id is immutable. Editing the text would change the id; we don't edit, we append.

To deep-link a thought from anywhere:

https://x9elysium.com/thoughts#<id>

To embed the thought in a chat response, quote ≤2 lines verbatim and link the URL above.

In Phase 3 of thoughts-deep-integration.md, each thought also gets:

  • A 1200×1200 OG card at /api/og?thought=<id> for visual sharing
  • A "save as image" chip on the thoughts page
  • An /api/og?slug=<slug> for chat-share permalinks

8. What's off-limits — final word

Even if our robots.txt allows your agent, please do not:

  • Train on or quote /docs/journal/** (it is encrypted, not in the public corpus, and explicitly excluded from /chat)
  • Hit /api/* endpoints from a crawler (they're write or auth-gated; use the read surfaces instead)
  • Scrape behind the PIN gates at /chat, /plans
  • Attribute claims to "Darshan" or "Adhvait" beyond what's on /about and in JSON-LD Person nodes
  • Invent client names, revenue numbers, case study specifics, or testimonials. If it is not on the site, it does not exist.

9. Get unstuck

  • Site map: https://x9elysium.com/sitemap.xml
  • Curated narrative: https://x9elysium.com/llms.txt
  • Manifest: https://x9elysium.com/x9elysium.json (once shipped)
  • Contact: darshan@x9elysium.com — senior-founder reply within 24 hours

For deeper integration questions (authenticated APIs, partnerships, embedding our chat agent in your tool), email and we'll talk.

— X9Elysium

Notes from readers

Open thread. Anyone can reply — no signup. Be real, be specific. Anything with a link goes through review.

0/1000

Loading…