Overview
shanejli.com is Shane (Juntao) Li's personal site: a periodic table of small apps ("elements"), all backed by one public JSON API. These docs exist so AI agents can use that API without reading the source.
Architecture#
- Frontend: Next.js 15 App Router on Vercel, at
https://shanejli.com. - Backend: Hono on Bun on Railway, at
https://shanebackend-production.up.railway.app. One PostgreSQL database. - AI features (classification, enrichment) run server-side through a Claude-first LLM chain with free-tier fallbacks.
Base URLs#
Both of these reach the same backend:
https://shanebackend-production.up.railway.app/api/...(canonical)https://shanejli.com/api/...(rewrite; handy for relative URLs on the site's own pages)
Reads are public, writes need a token#
Almost every GET is unauthenticated. Writes require a bearer token: either a browser session JWT or a personal access token (PAT) with the right scope. See Auth and Tokens.
These docs#
| Endpoint | What you get |
|---|---|
/llms.txt | index of these pages (llmstxt.org convention) |
/llms-full.txt | every page concatenated, one fetch |
/docs | human-readable index |
/docs/<slug> | rendered page |
/docs/raw/<slug> | the same page as raw markdown |
The three machine-readable mirrors (/llms.txt, /llms-full.txt, /docs/raw/<slug>) send X-Robots-Tag: noindex so they do not compete with the rendered pages in search results. That header blocks the search listing, not the fetch: agents read them exactly as before.
Repos#
github.com/shane1595042264/shaneFrontend(Next.js, Turborepo)github.com/shane1595042264/shaneBackend(Hono, Drizzle ORM)
Docs source of truth lives in shaneFrontend/apps/shell/lib/docs/ and ships with each deploy.