Tech Stack
The Quper web frontend is a multi-tenant Next.js application built with modern React patterns. Below is the full technology inventory with rationale for each choice.
Framework
Next.js 16
App Router, React Server Components, static generation for public pages
Language
TypeScript 5
Strict mode enabled across the entire codebase for type safety
Styling
Tailwind CSS v3 + shadcn/ui
Utility-first CSS with a component library built on Radix UI primitives
State Management
React 19 useState / useContext
No external state library — server components eliminate most client state needs
Charts
Recharts
Line, bar, scatter, and pie charts for FinOps dashboards
Auth
Auth0
JWT-based authentication with session cookies and middleware route protection
AI Chat Rendering
react-markdown + remark-gfm
Renders Vidura agent responses with tables, code blocks, and formatting
Icons
Lucide React
Consistent icon set used throughout the UI
Theme
next-themes
Dark / light mode switching with .dark class toggle and system preference detection
API Client
fetch (native)
No axios or additional HTTP libraries — native fetch with custom wrapper
Deployment
Vercel / Docker
Deployed to Vercel for preview branches; Docker for on-premise deployments
Server vs. Client Components
'use client' only for interactive elements: charts, forms, modals, and the Vidura chat interface.Dependency Philosophy
The team deliberately minimizes third-party dependencies. Key decisions:
- No Redux or Zustand — React Server Components eliminate most global state.
useContexthandles the remaining shared state (active environment, theme). - No axios — Native
fetchwith a thin wrapper handles auth headers and error normalization. - No date library — Native
Intl.DateTimeFormatandDatecover all formatting needs. - shadcn/ui instead of full component libraries — Components are copied into the codebase and owned by the team, not fetched from npm at runtime.