think2 is a small web app for stress-tested recommendations: you describe your situation once; two AI models plan and challenge; a third resolves the exchange into a clear verdict, next steps, and risks.
The exchange streams step by step. At the end you get a structured answer (verdict, actions, risks).
- Open the live app (
/orindex.html) or the demo (/demo.html) for a scripted walkthrough (one sample situation, no OpenRouter calls). The header on each page links to the other. - Paste your OpenRouter API key. It is only used in your browser to call OpenRouter. It is not saved and disappears when you reload the page.
- Choose Planner, Challenger, and Resolver models (defaults are sensible; your choices are remembered in the browser).
- Write your situation — what is going on, what you have tried, what you want decided. Use Next sample or Clear if you want quick examples or a blank field.
- Click Get my recommendation and read how we got there as it streams.
New session clears the run and your situation text; your key field is not stored anyway.
- For the live app: an OpenRouter account and API key (OpenRouter docs).
- For the demo: nothing except a modern browser (no key, no network to OpenRouter).
- A browser with JavaScript enabled.
There is no backend — the shipped site is static HTML, CSS, and bundled JavaScript. Source lives in TypeScript under src/ and is built with Vite.
- Build: Vite 6, TypeScript (strict), multi-page entries
index.htmlanddemo.html. - Source:
src/lib/shared.ts(UI helpers),src/lib/app.ts(OpenRouter),src/lib/demo.ts(offline demo); shared stylescss/styles.css. - API: The live app uses direct
fetchto OpenRouter (/api/v1/chat/completionswith streaming, and/api/v1/modelsto validate model IDs). The demo page does not call OpenRouter. - Themes: Respects light / dark using your system preference (
prefers-color-scheme).
- Your API key and situation text stay in the page session. Nothing is sent to a think2 server — there isn’t one.
- Only OpenRouter receives the key and the prompts you send when you run a session from the live app.
- The demo does not send your situation or any key to OpenRouter (canned text only, in the browser).
Source and issues: github.com/bertdida/think2
The same link appears in the site header on think2.xyz.
npm install
npm run dev # Vite dev server (http://localhost:5173)
npm run build # Typecheck + production bundle to dist/
npm run preview # Serve dist/ locally
npm test # Vitest
npm run lint # ESLint
npm run format # Prettier- In the repo on GitHub: Settings → Pages → Build and deployment → Source: GitHub Actions.
- Pushes to
mainrun.github/workflows/pages.yml:npm ci,npm run build, then uploaddist/to Pages.
The site uses the apex domain think2.xyz; Vite base is /.
- App name: think2 (lowercase in the UI).
- Domain: think2.xyz — used in OpenRouter attribution headers when calling the API.