English · 中文 README
✨ Just want to try it? Go to https://manu6lenses.win — free, no sign-up, works right in your browser. No setup needed.
The sections about local development and deployment are for developers who want to fork their own copy. If you only want to use Manu, the link above is all you need — you can ignore the rest of this README.
An interactive cultural-education website with the theme "One Experience, Six Worldviews." It explores how the same human experience can be understood through six ethnic medical traditions — Tibetan, Mongolian, Uyghur, Dai, Miao, and Zhuang.
This site is a cultural-education product, never health advice.
- Six Lenses flip cards — flip the cards to see how six different traditions each view the phenomenon of 'insomnia' as an introduction
- ManuBTI quiz — a 12-question journey across three dimensions (inner rhythm · outer temperature · way of connecting) that maps you to one of 27 integrated personality types, each woven from the wisdom of the six traditions
- Ask Manu AI — chat with an AI cultural guide that answers from a cultural perspective (never medical advice)
| Tradition | Core idea | |
|---|---|---|
| 🏔️ | Tibetan Medicine · 藏医 · Sowa Rigpa | The three energies (rlung / mkhris / badkan) |
| 🐎 | Mongolian Medicine · 蒙医 · Mongol Emnelge | The three roots (Hei / Hiri / Badagan) |
| 🐫 | Uyghur Medicine · 维医 · Uyghur Tibbi | Four humours & temperaments (Silk Road heritage) |
| 🌿 | Dai Medicine · 傣医 · Tai Lue Medicine | The four elements (wind, fire, water, earth) |
| 🌺 | Miao Medicine · 苗医 · Hmong Medicine | Cold–hot duality of the body's internal climate |
| 🌾 | Zhuang Medicine · 壮医 · Cuengh Medicine | Three passages & two roads of qi, blood, and sensation |
The sections below are only relevant if you want to fork this repo and run your own copy. (Just want to use Manu? See the link at the top of this page.)
The live
manu6lenses.winis the author's own deployment. You don't have access to it; you'll deploy to your own Worker URL or your own domain.
manu-6lenses/
├── backend/ # Local dev server (Node + Express)
│ ├── server.js # /api/chat proxy to Google Gemini
│ ├── manu_six_lenses.html # Frontend (single-file app)
│ ├── package.json
│ └── .env # GEMINI_API_KEY, GEMINI_MODEL, PORT
├── worker/ # Production deployment (Cloudflare Worker)
│ ├── worker.js # Serves HTML + proxies /api/chat
│ ├── wrangler.toml # Routes your domain → worker
│ ├── manu_six_lenses.html # Same frontend, bundled into the worker
│ └── package.json
├── start.bat # Windows one-click launcher (starts backend + opens browser)
├── README.md
└── README_CN.md
The frontend is a single self-contained HTML file (CSS + JS inlined, no build step). The same file lives in both backend/ and worker/ — keep them in sync when editing.
- Frontend — vanilla HTML / CSS / JavaScript, no framework, no bundler
- Local backend — Node.js + Express 5, also serves static files
- Production edge — Cloudflare Worker (
manu6lenses.win), serves the page and proxies chat - AI — Google Gemini (
gemini-3.6-flash) free tier viagenerativelanguageAPI
Prerequisites: Node.js 18+ and a Google Gemini API key.
# 1. Install backend deps
cd backend
npm install
# 2. Configure your API key
# Create backend/.env with:
# GEMINI_API_KEY=your_key_here
# GEMINI_MODEL=gemini-3.6-flash
# PORT=3000
# 3. Start the server
npm start
# → opens http://localhost:3000/manu_six_lenses.htmlOn Windows you can also just double-click start.bat — it installs nothing extra, starts the backend, and opens the browser.
The
.envfile is git-ignored. Never commit your realGEMINI_API_KEY.
| Method | Path | Description |
|---|---|---|
| GET | / |
Serve the Six Lenses page |
| GET | /manu_six_lenses.html |
Same page |
| GET | /api/health |
Health check → { status: "ok", model } |
| POST | /api/chat |
Body { messages: [{ role, content }] } → { reply } |
A fork runs as a single Cloudflare Worker. Pick your own Worker name and (optionally) your own custom domain — do not reuse manu6lenses.win, that's the author's domain.
cd worker
# 1. Set the Gemini key as a Worker secret
npx wrangler secret put GEMINI_API_KEY
# 2. Deploy
npx wrangler deployBefore deploying, edit worker/wrangler.toml:
- change
name = "manu-ai"to your own Worker name - change the
routes/custom_domainentry frommanu6lenses.winto your own domain (or remove it to use the default*.workers.devURL) - update
ALLOWED_ORIGINinworker.jsto match the origin you'll serve from
After the first deploy, attach your custom domain in the Cloudflare dashboard (Workers → your worker → Triggers → Custom Domains) if you're using one.
- Chat uses Gemini's free tier — when the daily quota is exhausted the API returns
429, and Manu will gently tell the user to come back tomorrow. - All answers are framed as cultural education, never medical advice; the system prompt explicitly redirects health questions.
- The Worker rejects any
Originother than the one inALLOWED_ORIGIN. Update that constant to your own domain.
The ManuBTI quiz in this site is also available as a standalone, zero-dependency embeddable component in a separate repo — useful if you want to drop just the quiz into your own web project:
➡️ Qinging-wu/ManuBTI — the 12-question cultural-lens quiz packaged as reusable static files (index.html + data.js + quiz.js + styles.css), with agent-skill integration for OpenCode / Claude Code / Cursor / Codex.
MIT — see Qinging-wu/manu-6lenses.
Qinging_267 · GitHub: Qinging-wu