Search

Search Kavel...

Survey report

Why Kavel is built this way

Every piece of the stack is a deliberate choice. Here is what each part does, and why it earned its place in the box.

Opinions, not options

Opinionated by design

Kavel makes the hard calls so you do not have to. One stack, one way to do things, chosen to get out of your way and keep you shipping.

  • Type-safe RPC over REST or GraphQL, the client and server share one contract.
  • Server state through TanStack Query, no global store to wire up.
  • Tailwind and Base UI you own and restyle, not a component kitchen sink.
  • One host, Cloudflare, no multi-cloud abstraction to slow you down.
The full reasoning, and what we left out

The foundation

The stack

The foundation every Kavel app is built on.

01

TanStack Start

A full-stack React framework with file-based routing and server functions. We picked it because it runs natively on the Cloudflare edge, is TypeScript-first, and never locks you to a single host.

02

Hono

A tiny, fast web framework built for the Workers runtime. We picked it because it speaks Web-standard Request and Response, adds almost no overhead, and starts with virtually no cold start.

03

oRPC

Contract-first RPC: declare each procedure once and the server and client share its types. We picked it so the web app calls the API with full type safety, no codegen, and nothing drifts when a contract changes.

04

Cloudflare Workers + D1

Your app runs on Cloudflare Workers with D1, their SQLite database, accessed through Drizzle ORM. We picked Cloudflare for global low latency, a generous free tier, and one deploy target for the API and the web app.

05

Base UI + Tailwind

Unstyled, accessible component primitives styled with Tailwind CSS v4. We picked it so you own the markup and the styles, with no opaque component library to fight when you need something custom.

06

Paraglide

Type-safe internationalization that compiles messages into tree-shakeable functions. We picked Paraglide because it adds no runtime weight, flags missing keys at build time, and localizes routes out of the box.

07

Bun + Turbo + Biome

Bun installs and runs, Turbo orchestrates the monorepo, Biome lints and formats. We picked this trio for speed: installs, builds, and checks finish in seconds, with one config instead of five.

Opt-in lots

The modules

Opt in to what you need at scaffold time. Leave the rest out entirely.

Lot 01

Auth

Email and OAuth sign-in with secure, cookie-based sessions and ready-made route guards. It is a module because not every app needs accounts, so it is there only when you ask for it.

Lot 02

Payments

Stripe subscriptions with a typed checkout, a customer portal, and verified webhooks. Add it when you want to charge, and the pricing page starts real checkout.

Lot 03

Email

Transactional email with React templates, rendered and delivered through Resend. Included so password resets and receipts work without wiring up a separate service.

Lot 04

Internationalization

Localized routes and messages with a language switcher, powered by Paraglide. Add it to ship in more than one language; skip it and there is no i18n code left behind.

Lot 05

UI

A styled component library on Base UI and Tailwind, dark mode included. It is the foundation the forms and marketing pages build on, and it is yours to restyle.

Lot 06

Marketing Pages

Landing and pricing pages ready to sell, composed from the UI module. Ship them as they are, or treat them as a starting point.

Deed of ownership

Ship on Cloudflare this afternoon

Buy Kavel once and own every line. Auth, payments, and email included.