Tech Stack
Nectr Web is built with modern frontend technologies:- Next.js 15.5.12 — App Router, Server Components, Turbopack
- React 19.1.0 — Latest React with improved async handling
- TailwindCSS 4 — CSS-first configuration via
@importdirectives - TypeScript 5 — Type-safe development
- Node ≥20 — Required runtime version
Project Structure
Configuration
Next.js Config
File:next.config.ts:1
- Auth proxy:
/auth/*routes forward to backend for OAuth flow - Image optimization: Allows GitHub avatars and profile images
TailwindCSS 4 (CSS-first)
File:src/app/globals.css:1
Tailwind v4 uses @import directives instead of tailwind.config.js:
@layer components):
.text-amber/.bg-amber— Primary brand color.bg-surface/.bg-surface-elevated— Dark backgrounds.text-content-primary/.text-content-secondary— Text hierarchy.shadow-amber-glow— Signature glow effect.btn-nectr-primary/.btn-nectr-secondary— Button styles.nectr-card— Consistent card container
Root Layout
File:src/app/layout.tsx:1
- Fonts: DM Sans (sans-serif), Geist Mono (monospace)
- SEO: Comprehensive OpenGraph, Twitter Card, structured data
- Theme: Dark mode by default (
#111111background)
Data Fetching
React Query Setup
File:src/components/Providers.tsx
API Client
Pattern:axios with interceptors for auth headers
UI Components
shadcn/ui
All components insrc/components/ui/ use Radix UI primitives + TailwindCSS:
button.tsx— class-variance-authority variantscard.tsx/dialog.tsx/dropdown-menu.tsx— Radix composablesbadge.tsx/avatar.tsx— Status indicators
Dashboard Components
File:src/components/dashboard/StatsCard.tsx
Routing
Protected Routes
File:src/components/ProtectedRoute.tsx
Route Groups
(dashboard) folder groups protected pages without affecting URL structure:
/dashboard→app/(dashboard)/dashboard/page.tsx/reviews→app/(dashboard)/reviews/page.tsx- Shared layout:
app/(dashboard)/layout.tsx
Development
Build
Key Features
- Server Components by default — Client components only when needed (e.g.
useState, event handlers) - Streaming SSR — React 19 Suspense for progressive page loading
- Type-safe API calls — TypeScript + React Query typed responses
- Dark mode first —
next-themeswith system preference detection - Optimized images — Next.js
<Image>with GitHub avatar caching
Next Steps
- Review Flow — How PR reviews work end-to-end
- Webhook Setup — Backend integration details