Vitruvyan Docs
Web UI Stack — Technology & Tools
Last updated: Feb 20, 2026 21:30 UTC
Purpose: Complete technology breakdown for Vitruvyan Web UI
Status: ✅ Production stack (Feb 2026)
Overview
The Vitruvyan Web UI is built on a modern, production-grade stack optimized for:
- Developer experience — TypeScript, hot reload, smart defaults
- Performance — Server-side rendering, code splitting, edge deployment
- Accessibility — WCAG 2.1 AA compliant components
- Maintainability — Strong typing, contract enforcement, modular architecture
Core Stack
Framework
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15.1.7 | React meta-framework (App Router) |
| React | 18.3.1 | UI library (concurrent features) |
| TypeScript | 5.x | Type system (strict mode) |
Why Next.js 15?
- App Router — File-based routing with layouts, server components
- Server Components — Zero JS for static content (faster loads)
- Turbopack — Rust-based bundler (7x faster than Webpack)
- Incremental Static Regeneration (ISR) — Static + dynamic hybrid
- Edge Functions — Deploy backend logic globally (low latency)
Why TypeScript?
- Contract enforcement at compile time
- IntelliSense for adapters, contracts, components
- Refactoring safety (rename, move, extract)
- Self-documenting code (interfaces as specs)
UI Components
Component Library
| Technology | Version | Purpose |
|---|---|---|
| Radix UI | Latest | Unstyled, accessible primitives |
| lucide-react | Latest | Icon library (1000+ icons) |
| Tailwind CSS | 3.4.x | Utility-first CSS framework |
Radix UI Primitives Used:
Accordion— Collapsible evidence sectionsDialog— Modals for confirmation/detailsTooltip— VEE annotations, metric explanationsTabs— Multi-view switching (e.g., chart types)Select— Dropdowns for filtersCheckbox,RadioGroup— Form inputs
Why Radix UI?
- Accessibility built-in — ARIA labels, keyboard navigation, focus management
- Unstyled — Full Tailwind control (no CSS fights)
- Headless — Compose your own UX (adapter pattern aligns perfectly)
- Type-safe — TypeScript definitions included
Tailwind Configuration:
Data Fetching & State
HTTP Client
| Technology | Version | Purpose |
|---|---|---|
| Native Fetch API | Built-in | HTTP requests (modern browsers) |
| SWR | Latest (optional) | Client-side data fetching with cache |
Why Native Fetch?
- Next.js 15 extends
fetch()with caching, revalidation - No external dependencies
- TypeScript-friendly
SWR for Client-Side (optional):
State Management
No Redux/Zustand — React Server Components + Context API sufficient.
| Pattern | Use Case |
|---|---|
| React Server Components | Static data fetching (server-side) |
| React Context | Global state (auth, theme, domain) |
| useState/useReducer | Local component state (accordions, forms) |
| URL State | Filters, pagination (shareable links) |
Auth Context Example:
Styling & Design Tokens
CSS Framework
| Technology | Version | Purpose |
|---|---|---|
| Tailwind CSS | 3.4.x | Utility-first CSS |
| PostCSS | Latest | CSS processing |
| Autoprefixer | Latest | Browser compatibility |
Design Tokens (components/theme/tokens.js):
Dark Mode Support:
Markdown & Rich Text
Markdown Rendering
| Technology | Version | Purpose |
|---|---|---|
| react-markdown | Latest | Markdown → React components |
| remark-gfm | Latest | GitHub Flavored Markdown (tables, strikethrough) |
| remark-math | Latest | Math equations (KaTeX support) |
Usage:
Development Tools
Package Manager
| Technology | Version | Purpose |
|---|---|---|
| pnpm | Latest (recommended) | Fast, disk-efficient package manager |
| npm | 10.x (alternative) | Standard Node.js package manager |
Why pnpm?
- 3x faster installs than npm
- Shared disk cache — Single copy of dependencies across projects
- Strict — No hoisting surprises (better reproducibility)
Installation:
Linting & Formatting
| Technology | Version | Purpose |
|---|---|---|
| ESLint | Latest | TypeScript/React linting |
| Prettier | Latest | Code formatting |
| eslint-config-next | Latest | Next.js-optimized rules |
ESLint Config (.eslintrc.json):
Prettier Config (.prettierrc):
Testing
| Technology | Version | Purpose |
|---|---|---|
| Jest | Latest | Unit test runner |
| React Testing Library | Latest | Component testing |
| Playwright | Latest (optional) | E2E testing |
Jest Config (jest.config.js):
Example Adapter Test:
Build & Deployment
Build System
| Technology | Version | Purpose |
|---|---|---|
| Turbopack | Built-in Next.js 15 | Development bundler |
| SWC | Built-in Next.js 15 | TypeScript/JSX compiler (Rust) |
Build Commands:
Build Output:
Deployment Targets
| Platform | Configuration | Notes |
|---|---|---|
| Vercel | Zero-config | Official Next.js host (Edge Functions, ISR) |
| Docker | Dockerfile included | Self-hosted (Kubernetes, VPS) |
| Static Export | output: 'export' | CDN deployment (no SSR) |
Docker Deployment:
Build Command:
Environment Configuration
Environment Variables
| Variable | Example | Purpose |
|---|---|---|
NEXT_PUBLIC_API_GRAPH_URL | http://localhost:8420 | LangGraph API endpoint |
NEXT_PUBLIC_API_CONCLAVE_URL | http://localhost:8200 | Synaptic Conclave API |
NEXT_PUBLIC_ENV | production | Environment name |
.env.local (development):
Access in code:
Performance Optimizations
Code Splitting
Next.js automatically code-splits by route:
- Each route = separate JavaScript bundle
- Shared code extracts to
_appchunk - Dynamic imports for heavy components
Dynamic Import Example:
Image Optimization
Next.js <Image> component:
- Automatic WebP conversion
- Lazy loading (off-screen images)
- Responsive sizes
Font Optimization
Next.js next/font (built-in):
Why next/font?
- Zero layout shift (font metrics precomputed)
- Self-hosted fonts (no Google CDN request)
- Automatic subset selection
Accessibility (WCAG 2.1 AA)
Tools
| Technology | Version | Purpose |
|---|---|---|
| axe DevTools | Browser extension | Accessibility auditing |
| eslint-plugin-jsx-a11y | Latest | Accessibility linting |
Key Requirements:
- Keyboard navigation (Tab, Enter, Escape, Arrow keys)
- Screen reader labels (
aria-label,aria-describedby) - Color contrast ≥ 4.5:1 (text), ≥ 3:1 (UI)
- Focus indicators visible
Example:
Monitoring & Analytics
Error Tracking
| Technology | Optional | Purpose |
|---|---|---|
| Sentry | Yes | Error tracking, performance monitoring |
Setup (optional):
Web Vitals
Built-in to Next.js:
Tracked Metrics:
- TTFB — Time to First Byte
- FCP — First Contentful Paint
- LCP — Largest Contentful Paint
- CLS — Cumulative Layout Shift
- FID — First Input Delay
Version Matrix
| Technology | Version | Release | Status |
|---|---|---|---|
| Next.js | 15.1.7 | Jan 2026 | ✅ Production |
| React | 18.3.1 | Apr 2024 | ✅ Stable |
| TypeScript | 5.7.2 | Jan 2026 | ✅ Production |
| Tailwind CSS | 3.4.16 | Dec 2024 | ✅ Production |
| Radix UI | 1.2.x | Ongoing | ✅ Stable |
| pnpm | 9.15.2 | Feb 2026 | ✅ Recommended |
Upgrade Strategy
Minor Version Upgrades (Safe)
Review changelogs:
- Next.js: https://github.com/vercel/next.js/releases
- React: https://react.dev/blog
- Tailwind: https://tailwindcss.com/blog
Major Version Upgrades (Breaking Changes)
- Read migration guide (official docs)
- Test in staging environment
- Run compatibility checks:
- Incremental rollout (feature flags, canary deployment)
References
- Philosophy — Architectural principles
- Contracts — TypeScript interface documentation
- Overview — UI architecture summary
- Next.js Docs — Official Next.js documentation
- Radix UI — Component primitives
- Tailwind CSS — Styling framework
Last updated: Feb 20, 2026 21:30 UTC