An intelligent, AI-powered interview and practice platform built with Next.js, Tambo AI, and modern web technologies. This platform enables dynamic technical interviews, practice sessions, and tests across multiple topics with real-time AI interaction.
Deployed Link: [https://interview-ai-steel.vercel.app]
Video Demo: [https://interview-ai-steel.vercel.app/demo]
Comprehensive environment featuring:
- Full Screen Proctoring: Ensures integrity during the interview.

- Tab Switch Detection: Monitors focus changes.

- Auto-timeout: Maintaining test discipline and pacing.

- Fake Prompt Injection:

Interactive theory questions with AI-driven context and intelligent evaluation.
Topic-specific multiple choice quizzes to test foundational knowledge.
Full-featured code editor with syntax highlighting and live execution support.
Live updates on your performance as you progress through the interview.
Interactive whiteboard for system design problems.
Interactive match the following questions.
- Multiple Modes: Practice, Test, and Interview modes with distinct behaviors
- AI-Powered Questions: Dynamic question generation across 7+ topics
- Real-time AI Interaction: Conversational interface with voice dictation support
- Comprehensive Question Types:
- Multiple Choice Questions (MCQs)
- Theory/Explanation Questions with markdown/code support
- Live Code Editor with compilation
- System Design Whiteboard
- Match the Following
- Performance Tracking: Real-time score updates, topic analysis, and insights
- Session Management: Persistent sessions with localStorage
- Fullscreen Mode: Enforced during interviews
- Tab Switch Detection: Monitors and warns on tab changes
- Auto-timeout: Questions have time limits with automatic progression
- ESC Key Detection: Warns users who exit fullscreen
- Dark Theme: Modern gradient-based dark UI
- Animated Backgrounds: Smooth blob animations
- Responsive Design: Works on desktop and laptop screens
- Voice Input: Dictation support for answering questions
| Technology | Purpose |
|---|---|
| Next.js 14 | React framework with App Router |
| TypeScript | Type-safe development |
| Tambo AI | Generative UI and AI chat integration |
| Tailwind CSS | Utility-first styling |
| NextAuth.js | Authentication (Google OAuth) |
| Zod | Schema validation |
| React Context | State management |
| localStorage | Session persistence |
┌─────────────────────────────────────────────────────────────────┐
│ Frontend (Next.js) │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Practice │ │ Test │ │ Interview │ Modes │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ InterviewLayout ││
│ │ ┌──────────┐ ┌──────────────────────────┐ ┌───────────┐ ││
│ │ │ Sidebar │ │ InterviewThread │ │ Completion││ ││
│ │ │ (Scores) │ │ (AI Chat + Components) │ │ Modal ││ ││
│ │ └──────────┘ └──────────────────────────┘ └───────────┘ ││
│ └─────────────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────────────┤
│ Context Providers │
│ ┌─────────────────┐ ┌────────────────────┐ │
│ │ InterviewContext│ │ TamboProvider │ │
│ │ (Session Data) │ │ (AI + Tools) │ │
│ └─────────────────┘ └────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Tambo AI Backend │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Components │ │ Tools │ │ Context │ │
│ │ (UI Gen) │ │ (Actions) │ │ Helpers │ │
│ └────────────┘ └────────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Manages the entire interview/practice session:
interface InterviewSession {
id: string;
mode: "practice" | "test" | "interview";
userName: string;
selectedTopics: string[];
questionsAttempted: number;
questionsCorrect: number;
totalScore: number;
topicScores: Record<string, TopicScore>;
attempts: QuestionAttempt[];
strongTopics: string[];
weakTopics: string[];
averageTimePerQuestion: number;
// ... more fields
}AI has access to session data through context helpers:
contextHelpers={{
getSessionContext: () => { /* Full session state */ },
getPerformanceSummary: () => { /* User performance */ },
getStrongTopics: () => session?.strongTopics,
getWeakTopics: () => session?.weakTopics,
getCurrentScore: () => `${session?.totalScore}/${session?.maxPossibleScore}`,
}}Components communicate via custom events:
quiz-complete- MCQ quiz finishedtheory-score-recorded- Theory question ratedtheory-question-timeout- Question time expiredfullscreen-exit-detected- User exited fullscreeninterview-complete- Interview finished
src/
├── app/ # Next.js App Router pages
│ ├── page.tsx # Landing page
│ ├── practice/ # Practice mode
│ ├── test/ # Test mode
│ ├── interview/ # Interview mode
│ ├── login/ # Authentication
│ └── api/auth/ # NextAuth API routes
│
├── components/
│ ├── shared/
│ │ └── interview-layout.tsx # Main layout for all modes
│ │
│ ├── tambo/ # Tambo-integrated components
│ │ ├── interview-thread.tsx # Main chat/thread component
│ │ ├── mcq-quiz.tsx # Multiple choice quiz
│ │ ├── theory-question.tsx # Theory question with timer
│ │ ├── code-editor.tsx # Live code editor
│ │ ├── whiteboard.tsx # System design canvas
│ │ ├── match-following.tsx # Matching quiz
│ │ ├── stress-timer.tsx # Countdown timer
│ │ ├── score-card.tsx # Score display
│ │ └── message-*.tsx # Chat UI components
│ │
│ └── ui/ # Generic UI components
│
├── contexts/
│ ├── interview-context.tsx # Session state management
│ └── session-context.tsx # Auth session context
│
├── data/
│ └── topics/ # Topic configurations
│ ├── index.ts # Topic exports
│ ├── types.ts # Type definitions
│ ├── javascript.ts # JavaScript topic config
│ ├── react.ts # React topic config
│ ├── dbms.ts # DBMS topic config
│ └── ... # Other topics
│
├── lib/
│ ├── tambo.ts # Tambo components & tools registration
│ ├── auth.ts # NextAuth configuration
│ └── utils.ts # Utility functions
│
└── services/ # External services
- Node.js 18+
- npm or yarn
- Tambo API key (free at tambo.co)
-
Clone the repository
git clone <repository-url> cd my-tambo-app
-
Install dependencies
npm install
-
Set up environment variables
cp example.env.local .env.local
Edit
.env.local:NEXT_PUBLIC_TAMBO_API_KEY=your_tambo_api_key # Optional: Google OAuth GOOGLE_CLIENT_ID=your_google_client_id GOOGLE_CLIENT_SECRET=your_google_client_secret NEXTAUTH_SECRET=your_nextauth_secret NEXTAUTH_URL=http://localhost:3000
-
Run the development server
npm run dev
-
Open in browser Navigate to http://localhost:3000
npm run build
npm start- User visits landing page and clicks "Start Practice/Test/Interview"
- Selects topics and enters their name
- AI greets user and begins asking questions
- Questions are rendered as interactive components
- User answers via chat or component interaction
- AI rates answers and provides feedback
- Scores update in real-time on sidebar
- After 15 questions, completion modal shows results
The AI uses registered tools to generate questions:
// AI can call these tools:
- getTopicInfo(topicId) → Get subtopics and concepts
- getDBMSQuiz() → Get MCQ questions for DBMS
- getCodingChallenge(topic) → Get coding problem
- rateTheoryAnswer(questionId, rating, feedback, topic)Tambo AI dynamically renders components based on context:
// When AI wants to ask an MCQ:
{
component: "MCQQuiz",
props: {
topic: "JavaScript",
questions: [...],
difficulty: "medium"
}
}Scores flow through the system:
- User completes MCQ →
quiz-completeevent - AI rates theory answer →
rateTheoryAnswertool →theory-score-recordedevent InterviewContext.recordQuizResults()updates session- Sidebar re-renders with new scores
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes
- Run linting:
npm run lint - Run build:
npm run build - Commit:
git commit -m "Add my feature" - Push:
git push origin feature/my-feature - Open a Pull Request
- Add more topics (Kubernetes, AWS, etc.)
- Implement MongoDB persistence
- Add more question types
- Improve accessibility
- Add unit tests
- Mobile responsiveness
- Multiplayer interview mode
- TypeScript strict mode
- ESLint configuration in
eslint.config.mjs - Prettier for formatting
- Component files use PascalCase
- Utility files use camelCase
| Topic | Subtopics | Question Types |
|---|---|---|
| JavaScript | Closures, Promises, Event Loop, ES6+ | MCQ, Theory, Coding |
| React | Hooks, State, Components, Performance | MCQ, Theory, Coding |
| DBMS | SQL, Normalization, Transactions, Indexing | MCQ, Theory |
| DSA | Arrays, Trees, Graphs, Sorting, DP | MCQ, Theory, Coding |
| Python | OOP, Data Types, Libraries | MCQ, Theory, Coding |
| System Design | Architecture, Scalability, Caching | Theory, Whiteboard |
| SQL | Queries, Joins, Optimization | MCQ, Theory, Coding |
| Helper | Returns | Description |
|---|---|---|
getSessionContext() |
string | Full session context for AI |
getPerformanceSummary() |
string | User's performance metrics |
getStrongTopics() |
string | Topics user excels at |
getWeakTopics() |
string | Topics needing improvement |
getCurrentScore() |
string | Current score (e.g., "15/20") |
| Event | Payload | Description |
|---|---|---|
quiz-complete |
{ topic, totalQuestions, correctAnswers, ... } |
MCQ quiz finished |
theory-score-recorded |
{ topic, score, maxScore, timeSpent } |
Theory answer rated |
interview-complete |
{ reason, finalScore } |
Interview session ended |
MIT License - see LICENSE for details.
-
Tambo AI for the generative UI platform
-
Next.js for the React framework
-
Tailwind CSS for styling
-
Recharts for data visualization
Built with love using Tambo AI and Next.js
Created by Aman Agrawal and Gouri Agarwal as a group submission for UI Strike Hackathon.






