Vite and Next.js
Vite for the apps behind sign-in, Next.js static exports for everything public.
Why Vite for the apps
The web app and desktop app live behind sign-in, so search engines never see them. They don't need server rendering — they need a fast dev server and a small static build. Vite does both.
In development, Vite proxies /api, /trpc, and /chatbot to the backend, so the app's requests are same-origin and cookies need no CORS setup.
Why Next.js for public sites
The marketing site, blog, and docs need real HTML that crawlers can read. Next.js prerenders every page to a file at build time. The blog and docs use output: "export", so the whole site is static files with no Node server behind it.
Fumadocs for the docs
The docs add Fumadocs on top of Next.js. See Fumadocs.