🎯 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>
121 lines
2.9 KiB
TypeScript
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;
|
|
} |