Commit 3affc117 authored by Aravind RK's avatar Aravind RK

refactor: Name changed to HIRE Guru

parent 9a0f25a3
......@@ -7,8 +7,8 @@
<span class="material-symbols-rounded">menu</span>
</button>
<span class="mobile-logo">
<span class="material-symbols-rounded filled">quiz</span>
QuizMaster
<span class="material-symbols-rounded filled">business_center</span>
Hire Guru
</span>
<div class="mobile-actions">
<button class="icon-btn" (click)="toggleThemeMenu()">
......@@ -29,8 +29,8 @@
<!-- Logo -->
<div class="sidebar-header">
<div class="logo">
<span class="material-symbols-rounded filled logo-icon">quiz</span>
<span class="logo-text">QuizMaster</span>
<span class="material-symbols-rounded filled logo-icon">business_center</span>
<span class="logo-text">Hire Guru</span>
</div>
<span class="badge" [ngClass]="roleBadge().class">{{ roleBadge().label }}</span>
</div>
......@@ -235,7 +235,7 @@
<div class="confirm-icon-wrapper">
<span class="material-symbols-rounded">logout</span>
</div>
<p class="confirm-text">Are you sure you want to sign out of QuizMaster?</p>
<p class="confirm-text">Are you sure you want to sign out of Hire Guru?</p>
</div>
<div class="confirm-modal-actions">
......
......@@ -395,9 +395,6 @@
<div style="display: flex; gap: 8px; align-items: center;">
@if (allMemberEvaluationsDone()) {
<span class="badge badge-success">All evaluations done</span>
<button class="btn btn-primary btn-sm" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded" style="font-size: 16px; margin-right: 4px;">download</span> Download PDF }
</button>
} @else {
<span class="badge badge-warning">Evaluations pending</span>
}
......
......@@ -53,7 +53,6 @@ export class InterviewerGroupInterviewComponent implements OnInit {
memberEvalComment = '';
memberEvalRecommendation = '';
isMemberSubmitting = signal(false);
isPdfGenerating = signal(false);
constructor(private quizService: QuizService, public authService: AuthService) {}
......@@ -160,16 +159,6 @@ export class InterviewerGroupInterviewComponent implements OnInit {
return (m.evaluations?.length || 0) < total;
}
downloadEvaluationPdf(): void {
const m = this.selectedMember();
if (!m) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
// -- Helpers -----------------------------------------------
getStatusClass(status: string): string {
const map: any = {
......
......@@ -23,7 +23,6 @@ export class InterviewerIndividualInterviewComponent implements OnInit {
stats = signal<any>({ total: 0, pending: 0, completed: 0, accepted: 0, rejected: 0 });
filterStatus = signal('');
isSubmitting = signal(false);
isPdfGenerating = signal(false);
constructor(private quizService: QuizService, public authService: AuthService) {}
......@@ -150,16 +149,6 @@ export class InterviewerIndividualInterviewComponent implements OnInit {
return numEvaluations >= totalExpected;
}
downloadEvaluationPdf(): void {
const iv = this.selectedInterview();
if (!iv) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
getVisibleEvaluations(evaluations: any[]): any[] {
if (!evaluations) return [];
const userId = this.authService.currentUser()?.id;
......
......@@ -395,9 +395,6 @@
<div style="display: flex; gap: 8px; align-items: center;">
@if (allMemberEvaluationsDone()) {
<span class="badge badge-success">All evaluations done</span>
<button class="btn btn-primary btn-sm" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded" style="font-size: 16px; margin-right: 4px;">download</span> Download PDF }
</button>
} @else {
<span class="badge badge-warning">Evaluations pending</span>
}
......
......@@ -53,7 +53,6 @@ export class PMGroupInterviewComponent implements OnInit {
memberEvalComment = '';
memberEvalRecommendation = '';
isMemberSubmitting = signal(false);
isPdfGenerating = signal(false);
constructor(private quizService: QuizService, public authService: AuthService) {}
......@@ -160,16 +159,6 @@ export class PMGroupInterviewComponent implements OnInit {
return (m.evaluations?.length || 0) < total;
}
downloadEvaluationPdf(): void {
const m = this.selectedMember();
if (!m) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
// -- Helpers -----------------------------------------------
getStatusClass(status: string): string {
const map: any = {
......
......@@ -249,11 +249,6 @@
<div class="detail-section">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">
<h3 class="detail-section-title" style="margin: 0;">Evaluations</h3>
@if (allEvaluationsDone()) {
<button class="btn btn-primary" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded">download</span> Download PDF }
</button>
}
</div>
@if (getVisibleEvaluations(selectedInterview().evaluations).length > 0) {
<div class="eval-list">
......
......@@ -23,7 +23,6 @@ export class PMIndividualInterviewComponent implements OnInit {
stats = signal<any>({ total: 0, pending: 0, completed: 0, accepted: 0, rejected: 0 });
filterStatus = signal('');
isSubmitting = signal(false);
isPdfGenerating = signal(false);
constructor(private quizService: QuizService, public authService: AuthService) {}
......@@ -150,16 +149,6 @@ export class PMIndividualInterviewComponent implements OnInit {
return numEvaluations >= totalExpected;
}
downloadEvaluationPdf(): void {
const iv = this.selectedInterview();
if (!iv) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
getVisibleEvaluations(evaluations: any[]): any[] {
if (!evaluations) return [];
const userId = this.authService.currentUser()?.id;
......
<div class="dashboard-layout">
<aside class="sidebar">
<div class="sidebar-header">
<span class="logo-icon">📝</span>
<h2>QuizMaster</h2><span class="role-badge">Admin</span>
<span class="logo-icon">💼</span>
<h2>Hire Guru</h2><span class="role-badge">Admin</span>
</div>
<nav class="sidebar-nav">
<a routerLink="/admin/dashboard" class="nav-item"><span class="nav-icon">🏠</span><span>Dashboard</span></a>
......
......@@ -642,9 +642,6 @@
<div style="display: flex; gap: 8px; align-items: center;">
@if (allMemberEvaluationsDone()) {
<span class="badge badge-success">All evaluations done</span>
<button class="btn btn-primary btn-sm" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded" style="font-size: 16px; margin-right: 4px;">download</span> Download PDF }
</button>
} @else {
<span class="badge badge-warning">Evaluations pending</span>
}
......
......@@ -347,20 +347,6 @@ export class GroupInterviewComponent implements OnInit {
return (m.evaluations?.length || 0) < total;
}
isPdfGenerating = signal(false);
downloadEvaluationPdf(): void {
const m = this.selectedMember();
if (!m) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
// ── Helpers ───────────────────────────────────────────────
getStatusClass(status: string): string {
const map: any = {
......
......@@ -139,7 +139,7 @@
<div class="quiz-select-grid" style="max-height: 120px; overflow-y: auto;">
@for (i of interviewers(); track i._id) {
<label class="quiz-select-item" style="cursor: pointer;">
<input type="checkbox" [value]="i._id" (change)="toggleSelection($event, newInterview.assignedInterviewers)" style="margin-right: 8px;"> {{ i.name }}
<input type="radio" [value]="i._id" (change)="toggleSelection($event, newInterview.assignedInterviewers)" style="margin-right: 8px;"> {{ i.name }}
</label>
}
@if (interviewers().length === 0) { <p class="text-muted" style="font-size: 12px;">No interviewers found</p> }
......@@ -150,7 +150,7 @@
<div class="quiz-select-grid" style="max-height: 120px; overflow-y: auto;">
@for (p of pms(); track p._id) {
<label class="quiz-select-item" style="cursor: pointer;">
<input type="checkbox" [value]="p._id" (change)="toggleSelection($event, newInterview.assignedPMs)" style="margin-right: 8px;"> {{ p.name }}
<input type="radio" [value]="p._id" (change)="toggleSelection($event, newInterview.assignedPMs)" style="margin-right: 8px;"> {{ p.name }}
</label>
}
@if (pms().length === 0) { <p class="text-muted" style="font-size: 12px;">No PMs found</p> }
......@@ -161,7 +161,7 @@
<div class="quiz-select-grid" style="max-height: 120px; overflow-y: auto;">
@for (h of hrs(); track h._id) {
<label class="quiz-select-item" style="cursor: pointer;">
<input type="checkbox" [value]="h._id" (change)="toggleSelection($event, newInterview.assignedHRs)" style="margin-right: 8px;"> {{ h.name }}
<input type="radio" [value]="h._id" (change)="toggleSelection($event, newInterview.assignedHRs)" style="margin-right: 8px;"> {{ h.name }}
</label>
}
@if (hrs().length === 0) { <p class="text-muted" style="font-size: 12px;">No HRs found</p> }
......@@ -357,11 +357,6 @@
<div class="detail-section">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">
<h3 class="detail-section-title" style="margin: 0;">Evaluations</h3>
@if (allEvaluationsDone()) {
<button class="btn btn-primary" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded">download</span> Download PDF }
</button>
}
</div>
@if (selectedInterview().evaluations?.length > 0) {
<div class="eval-list">
......
......@@ -250,8 +250,6 @@ export class IndividualInterviewComponent implements OnInit {
return interview.evaluations?.some((e: any) => e.evaluatorId?._id === userId);
}
isPdfGenerating = signal(false);
getEvaluationByRole(role: string): any {
const iv = this.selectedInterview();
if (!iv || !iv.evaluations) return null;
......@@ -269,16 +267,4 @@ export class IndividualInterviewComponent implements OnInit {
const numEvaluations = iv.evaluations?.length || 0;
return numEvaluations >= totalExpected;
}
downloadEvaluationPdf(): void {
const iv = this.selectedInterview();
if (!iv) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
}
......@@ -31,8 +31,8 @@
<div class="quiz-topbar">
<div class="topbar-left">
<div class="quiz-brand">
<span class="material-symbols-rounded filled brand-icon">quiz</span>
<span class="brand-name">QuizMaster</span>
<span class="material-symbols-rounded filled brand-icon">business_center</span>
<span class="brand-name">Hire Guru</span>
</div>
<div class="topbar-divider"></div>
<div class="quiz-title-block">
......
<div class="dashboard-layout">
<aside class="sidebar">
<div class="sidebar-header">
<span class="logo-icon">📝</span>
<h2>QuizMaster</h2><span class="role-badge">Admin</span>
<span class="logo-icon">💼</span>
<h2>Hire Guru</h2><span class="role-badge">Admin</span>
</div>
<nav class="sidebar-nav">
<a routerLink="/admin/dashboard" class="nav-item"><span class="nav-icon">🏠</span><span>Dashboard</span></a>
......
......@@ -191,7 +191,7 @@
<div class="checklist-box">
@for (i of interviewers(); track i._id) {
<label class="check-item">
<input type="checkbox" [value]="i._id"
<input type="radio" [value]="i._id"
(change)="toggleSelection($event, newGroupInterview.assignedInterviewers)">
<span>{{ i.name }}</span>
</label>
......@@ -204,7 +204,7 @@
<div class="checklist-box">
@for (h of hrs(); track h._id) {
<label class="check-item">
<input type="checkbox" [value]="h._id"
<input type="radio" [value]="h._id"
(change)="toggleSelection($event, newGroupInterview.assignedHRs)">
<span>{{ h.name }}</span>
</label>
......@@ -217,7 +217,7 @@
<div class="checklist-box">
@for (p of pms(); track p._id) {
<label class="check-item">
<input type="checkbox" [value]="p._id"
<input type="radio" [value]="p._id"
(change)="toggleSelection($event, newGroupInterview.assignedPMs)">
<span>{{ p.name }}</span>
</label>
......@@ -643,9 +643,6 @@
<div style="display: flex; gap: 8px; align-items: center;">
@if (allMemberEvaluationsDone()) {
<span class="badge badge-success">All evaluations done</span>
<button class="btn btn-primary btn-sm" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded" style="font-size: 16px; margin-right: 4px;">download</span> Download PDF }
</button>
} @else {
<span class="badge badge-warning">Evaluations pending</span>
}
......
......@@ -349,20 +349,6 @@ export class HRGroupInterviewComponent implements OnInit {
return (m.evaluations?.length || 0) < total;
}
isPdfGenerating = signal(false);
downloadEvaluationPdf(): void {
const m = this.selectedMember();
if (!m) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
// ── Helpers ───────────────────────────────────────────────
getStatusClass(status: string): string {
const map: any = {
......
......@@ -139,7 +139,7 @@
<div class="quiz-select-grid" style="max-height: 120px; overflow-y: auto;">
@for (i of interviewers(); track i._id) {
<label class="quiz-select-item" style="cursor: pointer;">
<input type="checkbox" [value]="i._id" (change)="toggleSelection($event, newInterview.assignedInterviewers)" style="margin-right: 8px;"> {{ i.name }}
<input type="radio" [value]="i._id" (change)="toggleSelection($event, newInterview.assignedInterviewers)" style="margin-right: 8px;"> {{ i.name }}
</label>
}
@if (interviewers().length === 0) { <p class="text-muted" style="font-size: 12px;">No interviewers found</p> }
......@@ -150,7 +150,7 @@
<div class="quiz-select-grid" style="max-height: 120px; overflow-y: auto;">
@for (p of pms(); track p._id) {
<label class="quiz-select-item" style="cursor: pointer;">
<input type="checkbox" [value]="p._id" (change)="toggleSelection($event, newInterview.assignedPMs)" style="margin-right: 8px;"> {{ p.name }}
<input type="radio" [value]="p._id" (change)="toggleSelection($event, newInterview.assignedPMs)" style="margin-right: 8px;"> {{ p.name }}
</label>
}
@if (pms().length === 0) { <p class="text-muted" style="font-size: 12px;">No PMs found</p> }
......@@ -161,7 +161,7 @@
<div class="quiz-select-grid" style="max-height: 120px; overflow-y: auto;">
@for (h of hrs(); track h._id) {
<label class="quiz-select-item" style="cursor: pointer;">
<input type="checkbox" [value]="h._id" (change)="toggleSelection($event, newInterview.assignedHRs)" style="margin-right: 8px;"> {{ h.name }}
<input type="radio" [value]="h._id" (change)="toggleSelection($event, newInterview.assignedHRs)" style="margin-right: 8px;"> {{ h.name }}
</label>
}
@if (hrs().length === 0) { <p class="text-muted" style="font-size: 12px;">No HRs found</p> }
......@@ -357,11 +357,6 @@
<div class="detail-section">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">
<h3 class="detail-section-title" style="margin: 0;">Evaluations</h3>
@if (allEvaluationsDone()) {
<button class="btn btn-primary" (click)="downloadEvaluationPdf()">
@if (isPdfGenerating()) { <span class="spinner spinner-sm"></span> Generating... } @else { <span class="material-symbols-rounded">download</span> Download PDF }
</button>
}
</div>
@if (selectedInterview().evaluations?.length > 0) {
<div class="eval-list">
......
......@@ -250,8 +250,6 @@ export class HRIndividualInterviewComponent implements OnInit {
return interview.evaluations?.some((e: any) => e.evaluatorId?._id === userId);
}
isPdfGenerating = signal(false);
getEvaluationByRole(role: string): any {
const iv = this.selectedInterview();
if (!iv || !iv.evaluations) return null;
......@@ -269,16 +267,4 @@ export class HRIndividualInterviewComponent implements OnInit {
const numEvaluations = iv.evaluations?.length || 0;
return numEvaluations >= totalExpected;
}
downloadEvaluationPdf(): void {
const iv = this.selectedInterview();
if (!iv) return;
this.isPdfGenerating.set(true);
setTimeout(() => {
window.print();
this.isPdfGenerating.set(false);
}, 500);
}
}
......@@ -3,11 +3,11 @@
<div class="auth-brand">
<div class="brand-content">
<div class="brand-logo">
<span class="material-symbols-rounded filled">quiz</span>
<span class="brand-name">QuizMaster</span>
<span class="material-symbols-rounded filled">business_center</span>
<span class="brand-name">Hire Guru</span>
</div>
<h2 class="brand-headline">Assess. Evaluate.<br>Excel.</h2>
<p class="brand-desc">The professional evaluation platform for organizations that demand precision and insight.</p>
<h2 class="brand-headline">Assess. Interview.<br>Excel.</h2>
<p class="brand-desc">The professional online interview and assessment platform for modern talent acquisition.</p>
<div class="brand-features">
<div class="feature-item">
<span class="material-symbols-rounded">verified</span>
......@@ -19,11 +19,11 @@
</div>
<div class="feature-item">
<span class="material-symbols-rounded">auto_awesome</span>
<span>AI-powered quiz generation</span>
<span>AI-powered assessment generation</span>
</div>
</div>
</div>
<div class="brand-footer">© 2026 QuizMaster Pro. All rights reserved.</div>
<div class="brand-footer">© 2026 Hire Guru. All rights reserved.</div>
</div>
<!-- Right: Login Form -->
......@@ -31,8 +31,8 @@
<div class="auth-card">
<div class="auth-header">
<div class="mobile-logo">
<span class="material-symbols-rounded filled">quiz</span>
<span>QuizMaster</span>
<span class="material-symbols-rounded filled">business_center</span>
<span>Hire Guru</span>
</div>
<h1>Sign in</h1>
<p>Enter your credentials to access your account</p>
......
......@@ -3,11 +3,11 @@
<div class="auth-brand">
<div class="brand-content">
<div class="brand-logo">
<span class="material-symbols-rounded filled">quiz</span>
<span class="brand-name">QuizMaster</span>
<span class="material-symbols-rounded filled">business_center</span>
<span class="brand-name">Hire Guru</span>
</div>
<h2 class="brand-headline">Join the<br>Platform.</h2>
<p class="brand-desc">Create your candidate account and start taking quizzes assigned to you by your organization.</p>
<p class="brand-desc">Create your candidate account and start taking assessments assigned to you by your organization.</p>
<div class="brand-features">
<div class="feature-item">
<span class="material-symbols-rounded">speed</span>
......@@ -19,19 +19,19 @@
</div>
<div class="feature-item">
<span class="material-symbols-rounded">devices</span>
<span>Take quizzes from any device</span>
<span>Take assessments from any device</span>
</div>
</div>
</div>
<div class="brand-footer">© 2026 QuizMaster Pro. All rights reserved.</div>
<div class="brand-footer">© 2026 Hire Guru. All rights reserved.</div>
</div>
<!-- Right: Register Form -->
<div class="auth-form-panel">
<div class="auth-card">
<div class="mobile-logo">
<span class="material-symbols-rounded filled">quiz</span>
<span>QuizMaster</span>
<span class="material-symbols-rounded filled">business_center</span>
<span>Hire Guru</span>
</div>
<div class="auth-header">
......
<div class="dashboard-layout">
<aside class="sidebar">
<div class="sidebar-header">
<span class="logo-icon">📝</span><h2>QuizMaster</h2><span class="role-badge student">Student</span>
<span class="logo-icon">💼</span><h2>Hire Guru</h2><span class="role-badge student">Student</span>
</div>
<nav class="sidebar-nav">
<a routerLink="/student/dashboard" class="nav-item active"><span class="nav-icon">🏠</span><span>Dashboard</span></a>
......
<div class="dashboard-layout">
<aside class="sidebar">
<div class="sidebar-header">
<span class="logo-icon">📝</span><h2>QuizMaster</h2><span class="role-badge student">Student</span>
<span class="logo-icon">💼</span><h2>Hire Guru</h2><span class="role-badge student">Student</span>
</div>
<nav class="sidebar-nav">
<a routerLink="/student/dashboard" class="nav-item"><span class="nav-icon">🏠</span><span>Dashboard</span></a>
......
<div class="dashboard-layout">
<aside class="sidebar">
<div class="sidebar-header">
<span class="logo-icon">📝</span><h2>QuizMaster</h2><span class="role-badge student">Student</span>
<span class="logo-icon">💼</span><h2>Hire Guru</h2><span class="role-badge student">Student</span>
</div>
<nav class="sidebar-nav">
<a routerLink="/student/dashboard" class="nav-item"><span class="nav-icon">🏠</span><span>Dashboard</span></a>
......
......@@ -2,10 +2,10 @@
<html lang="en" data-theme="light">
<head>
<meta charset="utf-8" />
<title>QuizMaster Pro - Online Assessment Platform</title>
<title>Hire Guru - Online Interview Portal</title>
<meta
name="description"
content="QuizMaster Pro - Professional online quiz and assessment platform for organizations"
content="Hire Guru - Professional online interview and assessment platform for organizations"
/>
<base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
......
/* ============================================================
QuizMaster Pro — Global Theme System
Hire Guru — Global Theme System
CSS Custom Properties with Light (default), Dark, Blue themes
============================================================ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment