interview-assistant/src/app/models/cv-profile.interface.ts
Interview Assistant Developer 326a4aaa29 Initial commit: Real-Time Interview Assistant with Authelia Authentication
🎯 Features implemented:
- Multi-language speech recognition (EN, FR, ES, DE)
- CV upload and parsing with regex-escaped skills extraction
- Authelia authentication integration for n8n webhook
- Complete n8n workflow for AI question generation
- Real-time language switching with enhanced UI
- Professional authentication modal with dual login options

🔧 Technical stack:
- Angular 18 with standalone components and signals
- TypeScript with strict typing and interfaces
- Authelia session-based authentication
- n8n workflow automation with OpenAI integration
- PDF.js for CV text extraction
- Web Speech API for voice recognition

🛠️ Infrastructure:
- Secure authentication flow with proper error handling
- Environment-based configuration for dev/prod
- Comprehensive documentation and workflow templates
- Clean project structure with proper git ignore rules

🔒 Security features:
- Cookie-based session management with CORS
- Protected n8n webhooks via Authelia
- Graceful fallback to local processing
- Secure redirect handling and session persistence

🚀 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-17 15:16:13 +00:00

121 lines
2.9 KiB
TypeScript

// CV Profile Data Model Interfaces
export interface CVProfile {
id: string; // UUID
fileName: string; // Original CV filename
uploadDate: Date; // When uploaded
personalInfo: PersonalInfo; // Extracted personal details
experience: WorkExperience[]; // Job history
education: Education[]; // Educational background
skills: Skill[]; // Technical and soft skills
certifications: Certification[]; // Professional certifications
languages: Language[]; // Spoken languages
parsedText: string; // Full extracted text
extractedText?: string; // Alternative property name for compatibility
lastModified: Date; // Last update timestamp
sensitiveDataWarnings?: string[]; // Warnings about sensitive information
}
export interface PersonalInfo {
fullName: string;
email: string;
phone: string;
location: string;
linkedIn?: string;
github?: string;
website?: string;
}
export interface WorkExperience {
id: string;
company: string;
position: string;
startDate: Date;
endDate?: Date; // null for current position
description: string;
technologies: string[]; // Tech stack used
achievements: string[]; // Key accomplishments
}
export interface Education {
id: string;
institution: string;
degree: string;
field: string;
startDate: Date;
endDate?: Date;
gpa?: number;
honors?: string[];
}
export interface Skill {
id: string;
name: string;
category: SkillCategory; // Technical, Soft, Language, etc.
proficiency: SkillLevel; // Beginner, Intermediate, Advanced, Expert
yearsOfExperience?: number;
lastUsed?: Date;
}
export interface Certification {
id: string;
name: string;
issuer: string;
issueDate: Date;
expiryDate?: Date;
credentialId?: string;
}
export interface Language {
id: string;
name: string;
proficiency: LanguageProficiency; // Native, Fluent, Conversational, Basic
}
// Enumerations for CV Profile
export enum SkillCategory {
TECHNICAL = 'technical',
SOFT = 'soft',
LANGUAGE = 'language',
CERTIFICATION = 'certification'
}
export enum SkillLevel {
BEGINNER = 'beginner',
INTERMEDIATE = 'intermediate',
ADVANCED = 'advanced',
EXPERT = 'expert'
}
export enum LanguageProficiency {
NATIVE = 'native',
FLUENT = 'fluent',
CONVERSATIONAL = 'conversational',
BASIC = 'basic'
}
// Utility types for CV processing
export interface CVParsingResult {
profile: CVProfile;
confidence: number;
warnings: string[];
suggestions: string[];
}
export interface CVCorrections {
personalInfo?: Partial<PersonalInfo>;
experience?: WorkExperience[];
education?: Education[];
skills?: Skill[];
certifications?: Certification[];
languages?: Language[];
}
export interface ParsingAccuracy {
overall: number;
personalInfo: number;
experience: number;
education: number;
skills: number;
certifications: number;
}