# Tech stack

| Layer     | What it uses                                                         |
| --------- | -------------------------------------------------------------------- |
| Web app   | [Next.js 16](https://nextjs.org), React 19, Tailwind CSS v4, Motion  |
| Backend   | [Convex](https://convex.dev): database, functions, streaming, crons  |
| Auth      | [Clerk](https://clerk.com)                                           |
| Models    | [OpenRouter](https://openrouter.ai) via the [AI SDK](https://ai-sdk.dev) |
| Tooling   | [Bun](https://bun.sh) workspaces, TypeScript                         |

Everything beyond Convex, Clerk, and OpenRouter is **optional** and switches
on with its own keys: billing (Autumn), web search (Exa), memory
(Supermemory), analytics (PostHog, Axiom), tracing (Braintrust), email
(Resend), and the support agent (Median). Leave them out and Whirl hides the
features they power. See [docs/configuration.md](https://github.com/Up-to-code/whirl/blob/main/docs/configuration.md).