AI access — how to consume x9elysium.com programmatically
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), foundersPerson(founders): linked from Organization viafounder[], withsameAs→ LinkedInWebSite: withpotentialActionfor site search (no internal search yet — link is canonical)BreadcrumbList: per pageArticle: every blog post + every thoughtFAQPage: services, foundation, contact, several blog postsOfferCatalog: services page, withOfferper service lineLocalBusiness: 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:
- Prefer
llms.txt. It's the curated narrative summary, written for you. - 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.
- 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.
- 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
/aboutand in JSON-LDPersonnodes - 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.
Loading…