🎯 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>
66 lines
1.7 KiB
JSON
66 lines
1.7 KiB
JSON
{
|
|
"name": "interview-assistant",
|
|
"version": "0.0.0",
|
|
"scripts": {
|
|
"ng": "ng",
|
|
"start": "ng serve",
|
|
"build": "ng build",
|
|
"watch": "ng build --watch --configuration development",
|
|
"test": "ng test",
|
|
"e2e": "ng e2e",
|
|
"cypress:open": "cypress open",
|
|
"cypress:run": "cypress run"
|
|
},
|
|
"prettier": {
|
|
"printWidth": 100,
|
|
"singleQuote": true,
|
|
"overrides": [
|
|
{
|
|
"files": "*.html",
|
|
"options": {
|
|
"parser": "angular"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"private": true,
|
|
"dependencies": {
|
|
"@angular/common": "^20.3.0",
|
|
"@angular/compiler": "^20.3.0",
|
|
"@angular/core": "^20.3.0",
|
|
"@angular/forms": "^20.3.0",
|
|
"@angular/platform-browser": "^20.3.0",
|
|
"@angular/router": "^20.3.0",
|
|
"dexie": "^4.2.0",
|
|
"pdfjs-dist": "^5.4.149",
|
|
"rxjs": "~7.8.0",
|
|
"tslib": "^2.3.0",
|
|
"zone.js": "~0.15.0"
|
|
},
|
|
"devDependencies": {
|
|
"@angular-eslint/eslint-plugin": "^20.3.0",
|
|
"@angular-eslint/eslint-plugin-template": "^20.3.0",
|
|
"@angular-eslint/template-parser": "^20.3.0",
|
|
"@angular/build": "^20.3.1",
|
|
"@angular/cli": "^20.3.1",
|
|
"@angular/compiler-cli": "^20.3.0",
|
|
"@cypress/schematic": "^4.1.2",
|
|
"@types/dom-speech-recognition": "^0.0.6",
|
|
"@types/jasmine": "~5.1.0",
|
|
"@typescript-eslint/eslint-plugin": "^8.44.0",
|
|
"@typescript-eslint/parser": "^8.44.0",
|
|
"cypress": "^15.2.0",
|
|
"eslint": "^9.35.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-prettier": "^5.5.4",
|
|
"jasmine-core": "~5.9.0",
|
|
"karma": "~6.4.0",
|
|
"karma-chrome-launcher": "~3.2.0",
|
|
"karma-coverage": "~2.2.0",
|
|
"karma-jasmine": "~5.1.0",
|
|
"karma-jasmine-html-reporter": "~2.1.0",
|
|
"prettier": "^3.6.2",
|
|
"typescript": "~5.9.2"
|
|
}
|
|
}
|