Interview Optimiser follows a modern web application architecture using Next.js 15+ with the App Router, leveraging both server and client components. The application is designed to handle complex real-time voice interactions, data processing, and AI-driven analysis.
┌─────────────────────────────────────────────────────────────┐
│ Client Web Application │
│ (Next.js 15 App Router) │
└────────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ API Layer │
│ (Next.js API Routes + Server Components) │
└────────┬─────────────────────┬────────────────┬─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Database │ │ Third-Party │ │ Storage │
│ (PostgreSQL) │ │ Services │ │ (AWS S3) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────────────┐
│ AI Services Layer │
│ (OpenAI, Voice Proc.) │
└─────────────────────────┘
- Framework: Next.js 15+ with App Router
- UI Library: React 19
- Styling: Tailwind CSS, ShadCN/UI
- State Management: Zustand
- Form Handling: React Hook Form with Zod validation
- Data Fetching: TanStack React Query
- Animation: Framer Motion
- Charting:
recharts(for data visualization like radar charts)
- Framework: Next.js API Routes & Server Components
- Database ORM: Drizzle
- Email Service: ReactEmail & Resend
- Authentication: Clerk
- Storage: AWS S3
- Monitoring: Sentry, Pino Logger
- NLP & Text Generation: OpenAI
- Voice Processing: Hume AI Voice SDK
- Voice Synthesis: OpenAI API
- Hosting: AWS via Terraform
- CI/CD: GitHub Actions
- Secret Management: Doppler
- Monitoring: Sentry
- Database: PostgreSQL
- Stores user information including role (user, admin, recruiter)
- Manages authentication credentials and subscription details
- Represents companies or teams using the B2B features
- Contains organization details and member associations
- Stores job listings created by recruiters
- Includes job descriptions, requirements, and interview configurations
- Records interview sessions between candidates and the AI
- Stores metadata, transcripts, and configuration
- Contains AI-generated assessments and feedback
- Linked to specific interviews and includes detailed scoring
- Associates candidates with specific jobs
- Tracks candidate status and progress
User ----|< Organization Members >|---- Organization
| |
| |
v v
Interview Job
| |
| |
v v
Report Job Candidate
/api/auth/*- Clerk authentication endpoints/api/user- User management endpoints
/api/organizations- CRUD operations for organizations/api/organizations/members- Manage organization memberships
/api/interviews- Create and manage interviews/api/interviews/[id]/start- Initiate interview sessions/api/interviews/[id]/transcript- Record and retrieve interview transcripts
/api/jobs- CRUD operations for job listings/api/jobs/[id]/share- Generate and manage shareable links/api/jobs/[id]/candidates- Manage candidates for a job
/api/reports- Generate and retrieve assessment reports/api/analytics- Performance metrics and statistics
/api/voice/stream- Real-time voice streaming/api/voice/analyze- Voice emotion and prosody analysis
/- Marketing landing page/dashboard- User dashboard/interviews/[id]- Interview session page/reports/[id]- Report viewing page/jobs- Job management (for recruiters)/jobs/[id]- Job details page/jobs/[id]/candidates- Candidate tracking page
-
Atomic design methodology:
- Atoms (buttons, inputs, etc.)
- Molecules (form groups, card elements)
- Organisms (complex forms, data tables, specific section components)
- Templates (page layouts)
- Pages (complete views)
Example Dashboard Components (Organisms/Presentational):
DashboardHero: Displays the main hero section of the dashboard.KeyMetricsSection: Container for displaying key statistics.AnimatedStatCard: Reusable card for individual animated statistics.PerformanceMetricsSection: Section for detailed performance metrics, including charts and comparison cards.ScoreRadarChart: Component for rendering radar charts (usingrecharts).ScoreComparisonCard: Card for comparing two score values (e.g., recent vs. all-time).RecentActivitySection: Section for displaying a timeline of recent activities.ActivityTimelineItem: Component for an individual item in the activity timeline.
- Global state via Zustand for:
- User preferences
- Interview session state
- Navigation state
- Notification management
- JWT-based authentication via Clerk
- Role-based access control (RBAC)
- Secure session management
- Data encryption at rest and in transit
- Secure storage of sensitive information
- Regular security audits
- Rate limiting
- CORS configuration
- Input validation
- Protection against common web vulnerabilities
- Server-side rendering for initial page loads
- Client-side transitions for smooth navigation
- Code splitting and lazy loading
- Image optimization
- Edge caching
- Efficient indexing
- Query optimization
- Connection pooling
- Streaming responses
- Caching common responses
- Asynchronous processing for non-critical operations
- EC2 instances for application hosting
- RDS for PostgreSQL database
- S3 for file storage
- CloudFront for content delivery
- Lambda for serverless functions
- GitHub Actions for automated builds and deployments
- Quality gates including testing and linting
- Automated deployment to staging and production environments
- Sentry for error tracking
- Pino for structured logging
- AWS CloudWatch for infrastructure monitoring
- Vitest for component and utility function testing
- High coverage requirements for critical components
- API endpoint testing
- Database interaction testing
- Critical user flow validation
- Cross-browser compatibility testing
- GitHub for repository hosting
- Branch protection rules
- Pull request review requirements
- Local development with Bun for fast builds
- Doppler for local environment variables
- Docker for local database and service dependencies
- Biome for linting and formatting
- TypeScript for type safety
- Pull request templates and checklists
- GPT models for interview simulation
- Voice synthesis for interviewer responses
- Voice emotion and prosody analysis
- Real-time feedback generation
- S3 for document storage (resumes, assessments)
- Lambda for background processing
- Subscription management
- Payment processing
- User authentication
- Identity management
- Stateless application design
- Load balancing across multiple instances
- Read replicas for high-read scenarios
- Connection pooling and query optimization
- Queue-based processing for non-real-time tasks
- Caching and rate limiting strategies
- Target WCAG 2.1 AA compliance
- Regular accessibility audits
- Screen reader compatibility
- Keyboard navigation
- Color contrast requirements