🎯 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>
60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
// Karma configuration file, see link for more information
|
|
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|
|
|
module.exports = function (config) {
|
|
config.set({
|
|
basePath: '',
|
|
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
|
plugins: [
|
|
require('karma-jasmine'),
|
|
require('karma-chrome-launcher'),
|
|
require('karma-jasmine-html-reporter'),
|
|
require('karma-coverage'),
|
|
require('@angular-devkit/build-angular/plugins/karma')
|
|
],
|
|
client: {
|
|
jasmine: {
|
|
// you can add configuration options for Jasmine here
|
|
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
|
|
// for example, you can disable the random execution order
|
|
random: true
|
|
},
|
|
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
|
},
|
|
jasmineHtmlReporter: {
|
|
suppressAll: true // removes the duplicated traces
|
|
},
|
|
coverageReporter: {
|
|
dir: require('path').join(__dirname, './coverage/interview-assistant'),
|
|
subdir: '.',
|
|
reporters: [
|
|
{ type: 'html' },
|
|
{ type: 'text-summary' },
|
|
{ type: 'lcov' }
|
|
],
|
|
check: {
|
|
global: {
|
|
statements: 80,
|
|
branches: 80,
|
|
functions: 80,
|
|
lines: 80
|
|
}
|
|
}
|
|
},
|
|
reporters: ['progress', 'kjhtml', 'coverage'],
|
|
browsers: ['Chrome'],
|
|
restartOnFileChange: true,
|
|
customLaunchers: {
|
|
ChromeHeadless: {
|
|
base: 'Chrome',
|
|
flags: [
|
|
'--no-sandbox',
|
|
'--disable-web-security',
|
|
'--disable-gpu',
|
|
'--remote-debugging-port=9222',
|
|
'--headless'
|
|
]
|
|
}
|
|
}
|
|
});
|
|
}; |