A sleek, free AI chat interface powered by the world's best open-source models.
| Category | Details |
|---|---|
| Multi-Model Access | 30+ free models — Qwen3 VL, DeepSeek R1, Llama 3.3 70B, Gemma 3, Mistral, and more |
| Vision Support | Upload images and get AI analysis with vision-enabled models |
| Thinking Visualization | Watch reasoning models "think" in real-time with expandable thought chains |
| Rich Rendering | Full Markdown, LaTeX math (KaTeX), syntax-highlighted code blocks with copy |
| Chat History | Persistent conversations stored locally — pick up where you left off |
| Dark & Light Themes | Toggle between themes; follows system preference by default |
| Temporary Chat | One-off conversations that aren't saved to history |
| Mobile Optimized | Responsive design with keyboard-aware viewport handling |
| Streaming Responses | Token-by-token streaming with adaptive 60fps render queue |
| Zero Framework | Pure HTML/CSS/JS — fast, lightweight, no build step required |
- Frontend — Vanilla HTML, CSS, JavaScript (no framework overhead)
- Backend — Vercel Serverless Functions (Node.js)
- AI Provider — OpenRouter (free-tier models)
- Rendering — Marked + KaTeX + Highlight.js
- Design — Custom CSS with spring animations, glassmorphism, and safe-area support
- Node.js 18+
- An OpenRouter API key (free)
# Clone the repo
git clone https://github.com/Amer-alsayed/chaqgpt.git
cd chaqgpt
# Install Vercel CLI
npm i -g vercel
# Create .env file (multi-key preferred, single-key fallback supported)
echo OPENROUTER_API_KEYS_JSON='["sk-or-1","sk-or-2","sk-or-3"]' > .env
# Optional fallback
echo OPENROUTER_API_KEY=your_key_here >> .env
# Start the dev server
vercel devThe app will be available at http://localhost:3000.
- Push your code to GitHub
- Import the repo in Vercel
- Add environment variables:
Variable Value OPENROUTER_API_KEYS_JSONJSON array of OpenRouter keys (recommended), e.g. ["sk-or-1","sk-or-2","sk-or-3"]OPENROUTER_API_KEYSingle-key fallback (optional when JSON var is present) OPENROUTER_KEY_COOLDOWN_RATE_LIMIT_MSOptional. Default 900000(15 min)OPENROUTER_KEY_COOLDOWN_AUTH_MSOptional. Default 21600000(6 h)OPENROUTER_KEY_COOLDOWN_TRANSIENT_MSOptional. Default 30000(30 s)OPENROUTER_MAX_FAILOVER_ATTEMPTSOptional. Default 10 - Deploy — that's it!
Tip
The app automatically fetches all available free models from OpenRouter at runtime. No config changes needed when new models are added.
New users start with Qwen3 VL 30B A3B Thinking — a powerful vision + reasoning model. Users can switch models anytime via the header dropdown, and their preference is saved locally.
chaqgpt/
├── api/
│ ├── chat.js # Chat completion proxy (streaming)
│ └── models.js # Fetches & filters free models from OpenRouter
├── assets/
│ ├── css/style.css # Complete design system
│ └── js/
│ ├── app.js # Core application logic
│ └── config.js # Welcome messages & suggestion sets
├── index.html # Single-page application entry
├── vercel.json # Vercel deployment config
└── .env # API key (not committed)
- API keys are never exposed to the client
- All API calls route through serverless functions
.envis gitignored by default
This project is licensed under the MIT License.



