Frontend application for the Interview Copilot RAG platform.
This project provides a recruiter-facing AI assistant UI that allows recruiters, hiring managers, and interviewers to chat with "Charmaine Cat" — an AI-powered personal assistant grounded on resumes, GitHub repositories, uploaded files, notes, and RAG-based retrieval.
The frontend is built with:
- React
- Vite
- React Router
- TailwindCSS
- TypeScript-style architecture patterns
- Streaming chat UI
- Docker + Nginx production deployment
- Streaming AI responses
- Recruiter / HR / Technical Interviewer modes
- Context-aware responses
- RAG grounded answers
- Retrieved evidence/source panel
- GitHub repository ingestion support
- Uploaded document retrieval
- Public profile page
- Story gallery
- Photo gallery
- Social-style clickable assistant avatars
- Admin-managed stories/photos
- Knowledge ingestion
- GitHub repository sync
- Missing-question review queue
- MFA authentication
- Source management
- Retrieval debugging
- Embedding model support
The frontend supports TOTP-based MFA for admin accounts.
Compatible with:
- Google Authenticator
- Microsoft Authenticator
- Authy
- 1Password
Features:
- MFA setup flow
- MFA verification during login
- MFA status indicator
- MFA enable/disable/reset
- Secure challenge-based verification
| Area | Technology |
|---|---|
| Frontend | React |
| Build Tool | Vite |
| Routing | React Router |
| Styling | TailwindCSS |
| Runtime | Node.js |
| Production Serving | Nginx |
| Containerization | Docker |
| API Style | REST + SSE Streaming |
src/
├── app/
├── assets/
├── components/
│ ├── chat/
│ ├── common/
│ └── profile/
├── lib/
├── pages/
│ ├── admin/
│ ├── auth/
│ └── public/
├── styles/
├── types/
└── main.tsx
VITE_APP_BASE_PATH=/
VITE_API_BASE_PATH=http://localhost:8080VITE_APP_BASE_PATH=/rag
VITE_API_BASE_PATH=/ragnpm installnpm run devDefault Vite dev server:
http://localhost:5173
npm run builddocker compose builddocker compose up -ddocker compose build --no-cache frontend
docker compose up -d frontenddocker compose logs -f frontenddocker compose downThe frontend supports deployment under a subdirectory.
Example:
https://example.com/rag
This is controlled by:
VITE_APP_BASE_PATH=/ragThe frontend supports:
- SSE token streaming
- Incremental assistant rendering
- Retrieved source display
- Retrieval highlighting
- Streaming-friendly UI updates
Supported retrieval sources:
- Resume
- GitHub repositories
- Uploaded files
- Notes
- Job descriptions
The frontend can display:
- Retrieved chunks
- Source metadata
- Highlighted keywords
- Evidence panels
Available conversation modes:
- Recruiter
- HR
- Hiring Manager
- Technical Interviewer
- Resume Reviewer
The assistant behaves like a real social/chat profile.
Features include:
- Clickable assistant avatars
- Public profile page
- Story feed
- Photo gallery
- Animated UI interactions
docker compose build frontend
docker compose up -d frontenddocker compose build --no-cache frontenddocker compose restart frontenddocker compose down
docker compose up -dUsually caused by incorrect Vite base path.
Check:
VITE_APP_BASE_PATH=/ragand ensure Vite config uses:
base: process.env.VITE_APP_BASE_PATH || "/"Usually caused by incorrect API base path.
Check:
VITE_API_BASE_PATH=/ragUsually caused by build using /assets/... instead of /rag/assets/....
Rebuild frontend after changing environment variables:
docker compose build --no-cache frontendThis project originally started from the official React + Vite template.
Official plugins:
@vitejs/plugin-react@vitejs/plugin-react-swc
- QR-code MFA setup
- Multi-agent workflows
- Live interview coaching
- Voice integration
- Real-time collaboration
- Advanced retrieval analytics
- Per-source permissions
- Conversation memory
- Evaluation dashboards
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Oxc
- @vitejs/plugin-react-swc uses SWC
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the TS template for information on how to integrate TypeScript and typescript-eslint in your project.