🌐 Language | Мова:
English | Українська
An interactive technical, behavioral, and language interview simulation platform powered by an adaptive AI interviewer. Designed for the student software engineering olympiad at VNTU (IPZ FITKI).
| Layer | Technology | Purpose |
|---|---|---|
| Monorepo | Turborepo + pnpm v12 | Fast caching, script orchestration, and workspace isolation |
| Frontend | Next.js 14 (App Router) + TypeScript | Responsive UI, interactive chat room, scorecard dashboard |
| Design System | Tailwind CSS + Geist Font | High-craft UI based on David Sanders Taste & Anthropic Frontend standards |
| State Management | Zustand | Session persistence, client tokens, and instantaneous Admin/User mode toggle |
| Backend | ASP.NET Core (.NET 9) + C# | High-performance REST API, session state machine, rate limits, security |
| Database & Auth | Supabase (PostgreSQL 16 + JWT) | Relational storage for users, question banks, and JSONB transcripts |
| AI Layer | IAiService (Mock + Cloud API) |
Modular abstraction: offline zero-latency mock or cloud LLM (Groq / OpenRouter) |
| Code Formatting | Prettier | Unified formatting rules across .ts, .tsx, .md, and .json |
| Deployment | Vercel (Web) + Render (API) | Automated GitHub CI/CD pipelines and cloud hosting |
dev-dialogue/
├── apps/
│ ├── web/ # Next.js 14 frontend application
│ │ ├── src/app/ # App Router (/, /dashboard, /interview/*, /admin)
│ │ ├── src/components/ # UI components (Navbar, ChatRoom, PerformanceReport, etc.)
│ │ ├── src/lib/ # Typed API client, Supabase client, utilities
│ │ └── src/store/ # Zustand auth & dynamic view-mode store
│ └── api/ # ASP.NET Core Web API
│ ├── Controllers/ # Auth, Interviews, AdminQuestions, Health
│ ├── Data/ # AppDbContext (PostgreSQL / In-Memory fallback)
│ ├── Models/ # Entities (User, Interview, QuestionBank) & DTOs
│ ├── Security/ # JWT validation & [RequireRole("admin")] attribute
│ └── Services/AI/ # IAiService (MockAiService + CloudAiService)
│
├── packages/
│ └── api-contracts/ # Shared TypeScript interfaces & DTO contracts
│
├── .agents/ # Workspace agent customizations, skills, & rules
├── docker-compose.yml # Containerized API + PostgreSQL local environment
├── turbo.json # Turborepo task pipeline configuration
├── pnpm-workspace.yaml # pnpm workspace definition
└── package.json # Monorepo scripts & dependencies
pnpm install# Starts Next.js (http://localhost:3000) and .NET API (http://localhost:5238) concurrently
pnpm devYou can also run applications individually:
# Frontend only
pnpm --filter @dev-dialogue/web dev
# Backend only
cd apps/api && dotnet watch runpnpm formatpnpm buildIf you prefer running the backend and PostgreSQL in isolated containers without installing local SDKs:
docker compose up --buildThe AI subsystem is engineered for zero-dependency offline prototyping and seamless production switching:
MockAiService(Default & Offline): Generates domain-tailored technical questions for Frontend, Backend, DevOps, QA, and PM tracks across Trainee, Junior, and Middle levels in Ukrainian and English. Produces detailed analytical scorecards with scores, strengths, and study plans.CloudAiService: Ready for Groq (Llama 3.1 8B), OpenRouter (Qwen 2.5 72B), or any OpenAI-compatible API. Switchable viaappsettings.jsonor environment variables:"AI": { "Provider": "Cloud", "BaseUrl": "https://api.groq.com/openai/v1", "ApiKey": "gsk_...", "Model": "llama-3.1-8b-instant" }
- Users have either
user(candidate) oradminroles. - For administrators, a dedicated toggle button "🛡 Admin View / 👤 Candidate View" appears in the top Navbar.
- The toggle dynamically switches client tool visibility via Zustand without invalidating the active session, allowing administrators and olympiad judges to preview the candidate experience instantly.
- Question bank management endpoints are enforced server-side via the
[RequireRole("admin")]attribute.
Платформа інтерактивної підготовки до технічних, поведінкових та англомовних IT-співбесід з адаптивним AI-інтерв'юером, розроблена для студентської олімпіади ВНТУ (ІПЗ ФІТКІ).
⬆ Повернутися до англійської версії
| Шар | Технологія | Призначення |
|---|---|---|
| Монорепозиторій | Turborepo + pnpm v12 | Кешування, оркестрація збірок, лінтингу та воркспейсів |
| Frontend | Next.js 14 (App Router) + TypeScript | Користувацький інтерфейс, інтерактивний чат, дашборд |
| Дизайн-система | Tailwind CSS + Шрифт Geist | High-craft дизайн на базі стандартів David Sanders Taste та Anthropic |
| State Management | Zustand | Стан сесії, збереження токенів, миттєвий перемикач режимів адміна |
| Backend | ASP.NET Core (.NET 9) + C# | REST API, життєвий цикл сесій, ліміти, рольова безпека |
| Database & Auth | Supabase (PostgreSQL 16 + JWT) | Збереження користувачів, банку питань, транскриптів (JSONB) |
| AI Layer | IAiService (Mock + Cloud API) |
Модульна абстракція: миттєвий локальний мок або хмарні LLM |
| Форматування | Prettier | Єдиний стиль коду для .ts, .tsx, .md та .json |
| Деплой | Vercel (Frontend) + Render (Backend) | Автоматичний CI/CD деплой з GitHub |
dev-dialogue/
├── apps/
│ ├── web/ # Next.js 14 фронтенд додаток
│ │ ├── src/app/ # App Router (/, /dashboard, /interview/*, /admin)
│ │ ├── src/components/ # UI компоненти (Navbar, ChatRoom, PerformanceReport, тощо)
│ │ ├── src/lib/ # Typed API client, Supabase клієнт, утиліти
│ │ └── src/store/ # Zustand auth & view-mode store
│ └── api/ # ASP.NET Core Web API
│ ├── Controllers/ # Auth, Interviews, AdminQuestions, Health
│ ├── Data/ # AppDbContext (PostgreSQL / In-Memory fallback)
│ ├── Models/ # Entities (User, Interview, QuestionBank) & DTOs
│ ├── Security/ # JWT валідація, [RequireRole("admin")] атрибут
│ └── Services/AI/ # IAiService (MockAiService + CloudAiService)
│
├── packages/
│ └── api-contracts/ # Спільні TypeScript типи та DTO контракти
│
├── .agents/ # Скіли, конфігурації та правила ШІ-агентів
├── docker-compose.yml # Локальний запуск API + PostgreSQL
├── turbo.json # Turborepo конфігурація пайплайну
├── pnpm-workspace.yaml # Конфігурація воркспейсів
└── package.json # Кореневий файл з командами
pnpm install# Запуск Next.js (http://localhost:3000) та .NET API (http://localhost:5238) паралельно
pnpm devТакож можна запускати сервіси окремо:
# Тільки фронтенд
pnpm --filter @dev-dialogue/web dev
# Тільки бекенд
cd apps/api && dotnet watch runpnpm formatpnpm builddocker compose up --buildАрхітектура спроєктована так, щоб розробка, тестування та демонстрація не залежали від сторонніх ключів або балансу API:
MockAiService(за замовчуванням): Генерує реалістичні технічні питання для Frontend, Backend, DevOps, QA та PM на рівнях Trainee, Junior, Middle українською та англійською мовами, а також формує розгорнуті зведені звіти з оцінками.CloudAiService: Повна реалізація для підключення Groq (Llama 3.1 8B), OpenRouter (Qwen 2.5 72B) або будь-якого сумісного OpenAI API через зміну налаштувань вappsettings.jsonабо змінних середовища:"AI": { "Provider": "Cloud", "BaseUrl": "https://api.groq.com/openai/v1", "ApiKey": "gsk_...", "Model": "llama-3.1-8b-instant" }
- Користувачі мають ролі
userабоadmin. - Для адміністраторів у навбарі реалізовано кнопку перемикання "🛡 Режим Адміна / 👤 Режим Кандидата".
- Перемикання змінює видимість адміністративних інструментів на клієнті через Zustand без створення нових сесій, дозволяючи тестувати інтерфейс з точки зору кандидата.
- Ендпоінти керування банком питань захищені серверним атрибутом
[RequireRole("admin")].