Ứng dụng web mô phỏng phỏng vấn bằng AI, hỗ trợ trò chuyện thoại real-time qua Google Gemini Live API, tạo báo cáo đánh giá bằng GPT-4o và quản lý thanh toán qua Stripe.
- Framework: Next.js 15 (App Router)
- UI: React 19 + TypeScript + Tailwind CSS v4
- Database: PostgreSQL 16 + Drizzle ORM
- Cache / Queue: Redis + BullMQ
- Auth: Custom JWT (email/password + OAuth Google/LinkedIn)
- API: tRPC + Next.js Route Handlers
- AI: Google Gemini Live API (voice), OpenAI GPT-4o (feedback)
- Payments: Stripe
- Email: Resend
- Node.js ≥ 20
- npm (đi kèm Node.js)
- Docker & Docker Compose (để chạy PostgreSQL và Redis local)
git clone <repo-url>
cd intervuai
npm installdocker-compose up -dĐiều này sẽ khởi động:
- PostgreSQL tại
localhost:5433 - Redis tại
localhost:6379
Copy file mẫu:
cp .env.example .env.localSau đó chỉnh sửa .env.local và điền các giá trị bắt buộc:
| Biến | Mô tả | Bắt buộc |
|---|---|---|
DATABASE_URL |
Chuỗi kết nối PostgreSQL | ✅ |
REDIS_URL |
Chuỗi kết nối Redis | ✅ |
SESSION_SECRET |
Secret key để ký JWT (tạo chuỗi ngẫu nhiên dài) | ✅ |
GEMINI_API_KEY |
API key từ Google AI Studio | ✅ |
OPENAI_API_KEY |
API key từ OpenAI (dùng cho báo cáo feedback) | ✅ |
NEXT_PUBLIC_APP_URL |
URL ứng dụng (http://localhost:3000) |
✅ |
STRIPE_SECRET_KEY |
Stripe Secret Key (dùng cho thanh toán) | ❌ |
STRIPE_WEBHOOK_SECRET |
Stripe Webhook Secret | ❌ |
RESEND_API_KEY |
Resend API Key (dùng cho email) | ❌ |
GOOGLE_CLIENT_ID/SECRET |
OAuth Google (đăng nhập bằng Google) | ❌ |
LINKEDIN_CLIENT_ID/SECRET |
OAuth LinkedIn (đăng nhập bằng LinkedIn) | ❌ |
CRON_SECRET |
Secret bảo vệ endpoint cron | ❌ |
Lưu ý: Nếu chỉ muốn chạy cơ bản (không cần thanh toán, email, OAuth), bạn chỉ cần điền các biến đánh dấu ✅.
# Tạo bảng trong database
npm run db:migrate
# Seed dữ liệu mẫu (6 vị trí phỏng vấn)
npm run db:seed# Chế độ development
npm run devMở trình duyệt tại: http://localhost:3000
Nếu bạn cần tính năng tạo báo cáo feedback và gửi email, mở thêm các terminal và chạy:
# Worker tạo báo cáo phỏng vấn (GPT-4o)
npm run worker:report
# Worker gửi email
npm run worker:email# Development server
npm run dev
# Build production
npm run build
# Start production (cần build trước)
npm run start
# Kiểm tra lint
npm run lint
# Xóa cache Next.js
npm run clean
# Database
npm run db:generate # Tạo migration mới
npm run db:migrate # Chạy migration
npm run db:seed # Seed dữ liệu
# Workers
npm run worker:report # Chạy worker báo cáo
npm run worker:email # Chạy worker emailapp/ # Next.js App Router
(dashboard)/ # Nhóm route dashboard (có sidebar)
api/ # API routes (auth, trpc, webhooks, voice, ...)
login/ # Trang đăng nhập
signup/ # Trang đăng ký
setup/ # Cấu hình phỏng vấn
room/ # Phòng phỏng vấn real-time
components/ # Component dùng chung
hooks/ # React hooks (voice, mobile, ...)
lib/ # Utilities, auth, session, trpc client
server/ # Backend code
db/ # Drizzle ORM (schema, client, seed)
routers/ # tRPC routers
jobs/ # BullMQ queues & workers
ai/ # AI prompts
- Không commit file
.env.locallên Git (đã có trong.gitignore). GEMINI_API_KEYvàOPENAI_API_KEYchỉ được sử dụng server-side.- Tất cả API routes truy cập DB/Redis đều sử dụng
runtime = "nodejs".
View your app in AI Studio: https://ai.studio/apps/611cc688-188b-4886-87e9-044ddfd4f66d
