Tech stack overview
Wrkks is built with modern web technologies optimized for performance and developer experience:Core technologies
| Technology | Purpose | Version |
|---|---|---|
| Next.js | React framework with App Router | 16.1.6 |
| React | UI library | 19.2.3 |
| TypeScript | Type safety | 5.x |
| Tailwind CSS | Styling | 4.x |
| Clerk | Authentication | 6.37.1 |
| Supabase | Database & backend | Latest |
| OpenRouter | AI resume parsing | Via OpenAI SDK |
| Zustand | State management | 5.0.10 |
Project structure
The Wrkks codebase follows Next.js 16 App Router conventions:Application layers
1. Presentation layer (Components)
React components handle all UI rendering and user interactions. Key patterns:- Server Components by default (Next.js 16)
- Client Components marked with
"use client" - Shadcn/ui for base components
- Motion library for animations
2. State management (Zustand)
Client-side state is managed with Zustand stores:- Persists to localStorage automatically
- Type-safe with TypeScript
- Minimal boilerplate
- React Query integration for server state
3. Data layer (Supabase)
Database operations use Supabase with separate client/server instances:4. Authentication (Clerk)
Clerk handles all authentication flows:Data flow
User uploads resume
User uploads a PDF file through the
FileUpload component. The file is validated and stored in component state using the useFileUpload hook.PDF parsing
File is sent to
/api/parse-resume which uses pdf-parse-new to extract text content from the PDF.AI extraction
Raw text is sent to
/api/extract-info which calls OpenRouter AI to structure the resume data into JSON format.State update
Structured resume data is stored in Zustand store (
useResumeStore) and synced to localStorage.Type system
All data structures are strongly typed:Routing strategy
Route groups
Wrkks uses Next.js route groups for organization:(main)- Main application routes (home, upload, website)(user)- Public user profile pages with dynamic[slug]routing
Dynamic routes
app/(user)/[slug]/page.tsx
Configuration
Next.js config
TypeScript config
Path aliases simplify imports:tsconfig.json
@/ prefix for absolute imports:
Performance optimizations
- Server Components - Most components render on the server
- React 19 - Automatic batching and transitions
- Tailwind CSS 4 - JIT compilation for minimal CSS
- Image optimization - Next.js Image component with remote patterns
- Zustand persistence - Resume data cached in localStorage
- Route prefetching - Automatic for Link components
Security considerations
- Environment variables never exposed to client
- Clerk handles authentication tokens
- Supabase Row Level Security (RLS) policies
- Server-side validation for all mutations
- HTTPS-only in production