Oscarli commited on
Commit
4b72429
Β·
verified Β·
1 Parent(s): 80564ff

Upload 9 files

Browse files
Files changed (9) hide show
  1. CHANGELOG.md +412 -0
  2. Dockerfile +24 -0
  3. INSTRUCTIONS.md +495 -0
  4. PROJECT_OVERVIEW.txt +166 -0
  5. QUICK_REFERENCE.md +156 -0
  6. README.md +231 -8
  7. app.py +87 -0
  8. index.html +1251 -0
  9. requirements.txt +3 -0
CHANGELOG.md ADDED
@@ -0,0 +1,412 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # πŸ“ CareerForge AI - Changelog
2
+
3
+ ## Version 2.0 - Complete Version (November 10, 2024)
4
+
5
+ ### πŸŽ‰ Major Update
6
+
7
+ This update transforms the original empty shell application into a **fully functional AI-driven platform**!
8
+
9
+ ---
10
+
11
+ ## ✨ Core Improvements
12
+
13
+ ### 1. Removed Doubao option, simplified API configuration
14
+
15
+ **Before:**
16
+ - Supported both DeepSeek and Doubao APIs
17
+ - Complex configuration, Doubao required an additional endpoint ID
18
+ - More UI options
19
+
20
+ **After:**
21
+ - βœ… Uses only the DeepSeek API
22
+ - βœ… Simplified configuration process
23
+ - βœ… Cleaner and clearer interface
24
+ - βœ… Lowered the barrier to entry
25
+
26
+ **Code changes:**
27
+ ```javascript
28
+ // Removed the complex API_CONFIG object
29
+ // Simplified to a single configuration
30
+ const API_CONFIG = {
31
+ endpoint: 'https://api.deepseek.com/v1/chat/completions',
32
+ model: 'deepseek-chat'
33
+ };
34
+ ```
35
+
36
+ ---
37
+
38
+ ### 2. Smart Resume - Maintained and Optimized
39
+
40
+ **Function:** AI generates optimized resumes and matching analysis
41
+
42
+ **Improvements:**
43
+ - βœ… Optimized Prompt template to improve generation quality
44
+ - βœ… Improved JSON parsing logic
45
+ - βœ… Added error fallback handling
46
+ - βœ… Localized hint messages
47
+
48
+ **Generated content:**
49
+ - Complete optimized resume (HTML format)
50
+ - Matching analysis (percentage + suggestions)
51
+ - Can be exported as PDF or copied as text
52
+
53
+ ---
54
+
55
+ ### 3. Interview Coach - From Template to AI Generation
56
+
57
+ **Before:**
58
+ - Used a fixed question bank
59
+ - Returned preset questions based on level
60
+ - General-purpose but not very specific
61
+
62
+ **After:**
63
+ - βœ… Completely generated by AI
64
+ - βœ… Customized based on the specific position and skills
65
+ - βœ… Includes key points to assess and answering strategies
66
+ - βœ… Provides guidance on the STAR method
67
+
68
+ **Generated content:**
69
+ - 8-10 technical interview questions
70
+ - 5-6 behavioral interview questions
71
+ - Key points to assess for each question
72
+ - Answering strategies and preparation advice
73
+
74
+ **Prompt design:**
75
+ ```
76
+ For ${role} - ${level} level
77
+ Key skills: ${skills}
78
+ Generate customized interview questions and strategies
79
+ ```
80
+
81
+ ---
82
+
83
+ ### 4. Learning Path - From Database to AI Generation
84
+
85
+ **Before:**
86
+ - Used preset skill roadmaps
87
+ - Fixed learning phase division
88
+ - General but lacked personalization
89
+
90
+ **After:**
91
+ - βœ… AI analyzes the gap based on current skills
92
+ - βœ… Personalized learning path planning
93
+ - βœ… Detailed phased learning plan
94
+ - βœ… Recommends specific resources and projects
95
+
96
+ **Generated content:**
97
+ - Skill gap analysis (have vs. to-learn)
98
+ - 3-phase learning plan (Beginner β†’ Intermediate β†’ Advanced)
99
+ - 3-5 practical project suggestions
100
+ - Learning resource recommendations
101
+ - Weekly learning plan
102
+
103
+ **Intelligent analysis:**
104
+ ```
105
+ Compare current skills vs. target position requirements
106
+ Identify priorities
107
+ Plan a ${timeline}-month learning path
108
+ ```
109
+
110
+ ---
111
+
112
+ ### 5. Cover Letter - From Template to AI Generation
113
+
114
+ **Before:**
115
+ - Used a fixed cover letter template
116
+ - Simple variable filling
117
+ - The content was quite generic
118
+
119
+ **After:**
120
+ - βœ… AI writes a personalized cover letter
121
+ - βœ… Deeply customized based on achievements and position
122
+ - βœ… Supports multiple writing styles
123
+ - βœ… Provides optimization suggestions
124
+
125
+ **Generated content:**
126
+ - Complete cover letter (salutation-body-signature)
127
+ - Professional language
128
+ - Specific achievement descriptions
129
+ - 3-5 customized suggestions
130
+
131
+ **Style options:**
132
+ - Professional
133
+ - Enthusiastic
134
+ - Formal
135
+
136
+ ---
137
+
138
+ ### 6. LinkedIn Optimizer - From Keywords to AI Generation
139
+
140
+ **Before:**
141
+ - Based on a keyword library for the industry
142
+ - Simple template filling
143
+ - Fixed structure
144
+
145
+ **After:**
146
+ - βœ… AI optimizes the personal profile
147
+ - βœ… SEO-friendly headline
148
+ - βœ… Structured summary content
149
+ - βœ… Recommends hashtags and optimization suggestions
150
+
151
+ **Generated content:**
152
+ - Optimized LinkedIn headline (220 characters)
153
+ - Professional About summary
154
+ - 8-10 recommended hashtags
155
+ - 5-7 optimization suggestions
156
+
157
+ **Optimization focus:**
158
+ ```
159
+ Keyword optimization (to improve search ranking)
160
+ Personal brand building
161
+ Highlighting skills
162
+ Quantifiable achievements
163
+ ```
164
+
165
+ ---
166
+
167
+ ### 7. Salary Intelligence - From Calculation to AI Analysis
168
+
169
+ **Before:**
170
+ - Based on a fixed salary database
171
+ - Simple multiplier calculation
172
+ - Data could be outdated
173
+
174
+ **After:**
175
+ - βœ… AI analyzes market salaries
176
+ - βœ… Real-time market data
177
+ - βœ… Detailed market positioning analysis
178
+ - βœ… Specific negotiation strategies
179
+
180
+ **Generated content:**
181
+ - Salary estimation (base salary + bonus + equity)
182
+ - Total compensation analysis
183
+ - Market positioning (geography, experience, company impact)
184
+ - 5-7 negotiation tips
185
+ - Market trend insights
186
+
187
+ **Analysis dimensions:**
188
+ ```
189
+ Position: ${role}
190
+ Location: ${location}
191
+ Experience: ${experience} years
192
+ Company size: ${companySize}
193
+ β†’ Comprehensive analysis of market conditions
194
+ ```
195
+
196
+ ---
197
+
198
+ ## πŸ”§ Technical Improvements
199
+
200
+ ### API Call Optimization
201
+
202
+ **Before:**
203
+ ```javascript
204
+ // Complex provider judgment
205
+ const config = API_CONFIG[provider];
206
+ ```
207
+
208
+ **After:**
209
+ ```javascript
210
+ // Directly use DeepSeek configuration
211
+ fetch(API_CONFIG.endpoint, { ... })
212
+ ```
213
+
214
+ ### Prompt Engineering
215
+
216
+ Designed a dedicated Prompt template for each feature:
217
+ - Clear role definition (expert identity)
218
+ - Detailed output requirements (HTML structure)
219
+ - Specific format specifications (CSS class names)
220
+ - Clear content guidance
221
+
222
+ ### Error Handling
223
+
224
+ ```javascript
225
+ try {
226
+ const aiReply = await callLLM(prompt, systemPrompt);
227
+ outputDiv.innerHTML = aiReply;
228
+ } catch (error) {
229
+ outputDiv.innerHTML = '<p style="color: red;">❌ Generation failed</p>';
230
+ }
231
+ ```
232
+
233
+ ### State Management
234
+
235
+ Real-time status feedback:
236
+ - βšͺ Not configured
237
+ - πŸ”„ Generating
238
+ - βœ… Success
239
+ - ❌ Failed
240
+
241
+ ---
242
+
243
+ ## πŸ“¦ Project Structure Optimization
244
+
245
+ ### File Organization
246
+
247
+ **Before:**
248
+ - Files scattered on the desktop
249
+ - `3.html` was not intuitive
250
+ - Lack of documentation
251
+
252
+ **After:**
253
+ ```
254
+ CareerForge-AI/
255
+ β”œβ”€β”€ index.html # Main application (was 3.html)
256
+ β”œβ”€β”€ README.md # Project homepage
257
+ β”œβ”€β”€ INSTRUCTIONS.md # Detailed documentation
258
+ β”œβ”€β”€ QUICK_REFERENCE.md # Quick reference guide
259
+ β”œβ”€β”€ start_app.command # Startup script
260
+ β”œβ”€β”€ PROJECT_OVERVIEW.txt# File manifest
261
+ └── CHANGELOG.md # This file
262
+ ```
263
+
264
+ ### Documentation Improvement
265
+
266
+ Added 4 new documents:
267
+ 1. **README.md** - Project introduction and quick start
268
+ 2. **INSTRUCTIONS.md** - Detailed user guide (12KB)
269
+ 3. **QUICK_REFERENCE.md** - Quick reference sheet
270
+ 4. **PROJECT_OVERVIEW.txt** - File manifest and navigation
271
+
272
+ ### Startup Script
273
+
274
+ ```bash
275
+ # One-click startup of the application
276
+ ./start_app.command
277
+ ```
278
+
279
+ ---
280
+
281
+ ## πŸ“Š Feature Comparison Overview
282
+
283
+ | Feature | v1.0 | v2.0 |
284
+ |---|---|---|
285
+ | Smart Resume | βœ… AI-generated | βœ… AI-generated (optimized) |
286
+ | Interview Coach | ❌ Question bank | βœ… AI-generated |
287
+ | Learning Path | ❌ Database | βœ… AI-generated |
288
+ | Cover Letter | ❌ Template | βœ… AI-generated |
289
+ | LinkedIn | ❌ Keywords | βœ… AI-generated |
290
+ | Salary Intel | ❌ Calculation | βœ… AI-analyzed |
291
+
292
+ **Conclusion: From 1/6 AI-powered β†’ 6/6 fully AI-powered!**
293
+
294
+ ---
295
+
296
+ ## πŸ’° Cost Comparison
297
+
298
+ ### v1.0 (Original)
299
+ - Only the resume feature consumed API
300
+ - Other features were free but of limited quality
301
+
302
+ ### v2.0 (Complete)
303
+ - All features consume API
304
+ - Cost per generation: Β₯0.005-0.02
305
+ - Quality is significantly improved
306
+ - A Β₯10 top-up can be used hundreds of times
307
+
308
+ **Value for money: Extremely high!**
309
+
310
+ ---
311
+
312
+ ## 🎯 User Experience Improvement
313
+
314
+ ### Simplified Configuration
315
+ - Removed Doubao option
316
+ - One input box to get it done
317
+ - Automatic saving and loading
318
+
319
+ ### UI Optimization
320
+ - Clearer status prompts
321
+ - Real-time loading animation
322
+ - Friendly error messages
323
+
324
+ ### Localization
325
+ - All prompts are localized
326
+ - Prompts use Chinese
327
+ - Documentation is fully in Chinese
328
+
329
+ ---
330
+
331
+ ## πŸ” Security Enhancement
332
+
333
+ ### Privacy Protection
334
+ - API Key is stored locally only
335
+ - Not uploaded to third-party servers
336
+ - Code is open-source and auditable
337
+
338
+ ### Error Handling
339
+ - Complete exception capture
340
+ - Friendly error prompts
341
+ - Prevents leakage of sensitive information
342
+
343
+ ---
344
+
345
+ ## πŸ“ˆ Quality Improvement
346
+
347
+ ### Generation Quality
348
+ Through carefully designed Prompts:
349
+ - The output is more professional
350
+ - The format is more standardized
351
+ - The content is more specific
352
+ - The practicality is stronger
353
+
354
+ ### Response Speed
355
+ - Optimized API calls
356
+ - Reduced unnecessary parsing
357
+ - Improved user experience
358
+
359
+ ### Stability
360
+ - Complete error handling
361
+ - Multi-layer fallback solution
362
+ - Reduced failure rate
363
+
364
+ ---
365
+
366
+ ## πŸš€ Future Plans
367
+
368
+ ### Possible Improvement Directions
369
+ - [ ] Add history function
370
+ - [ ] Support multi-language output
371
+ - [ ] Add export format options
372
+ - [ ] Support batch generation
373
+ - [ ] Add template collection function
374
+
375
+ ---
376
+
377
+ ## πŸŽ‰ Summary
378
+
379
+ ### Key Achievements
380
+
381
+ βœ… **Feature completeness**: From 16.7% β†’ 100%
382
+ βœ… **AI coverage**: From 1/6 β†’ 6/6
383
+ βœ… **Documentation completeness**: From 0 β†’ 4 documents
384
+ βœ… **User experience**: Significantly improved
385
+ βœ… **Project structure**: Professionally organized
386
+
387
+ ### User Value
388
+
389
+ - 🎯 A truly usable career development tool
390
+ - πŸ’° Extremely low cost (Β₯10 can be used for a long time)
391
+ - πŸš€ Significantly improves job search efficiency
392
+ - πŸ“š Comprehensive career planning support
393
+ - πŸ” Privacy and security are guaranteed
394
+
395
+ ---
396
+
397
+ ## πŸ“ž Technical Support
398
+
399
+ If you have questions or suggestions, please refer to:
400
+ - **INSTRUCTIONS.md** - Detailed guide
401
+ - **QUICK_REFERENCE.md** - FAQ
402
+ - **DeepSeek Documentation** - API related
403
+
404
+ ---
405
+
406
+ **Thank you for using CareerForge AI v2.0!**
407
+
408
+ Wishing you success in your job search and a prosperous career! πŸš€βœ¨
409
+
410
+ ---
411
+
412
+ *Last updated: November 10, 2024*
Dockerfile ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use an official Python runtime as a parent image
2
+ FROM python:3.10-slim
3
+
4
+ # Set the working directory in the container
5
+ WORKDIR /app
6
+
7
+ # Copy the requirements file into the container
8
+ COPY requirements.txt .
9
+
10
+ # Install any needed packages specified in requirements.txt
11
+ RUN pip install --no-cache-dir -r requirements.txt
12
+
13
+ # Copy the rest of the application files into the container
14
+ # This includes app.py and the 'static' folder
15
+ COPY . .
16
+
17
+ # Make port 7860 available (standard for HF Spaces)
18
+ EXPOSE 7860
19
+
20
+ # Define environment variable for the port
21
+ ENV PORT=7860
22
+
23
+ # Run uvicorn server
24
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
INSTRUCTIONS.md ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # πŸš€ CareerForge AI - Complete User Guide
2
+
3
+ ## ✨ What's New
4
+
5
+ Your `index.html` is now a **fully functional** AI-driven career development platform!
6
+
7
+ ### Completed Improvements:
8
+
9
+ βœ… **Removed Doubao option** - Simplified to use only the DeepSeek API
10
+ βœ… **Smart Resume** - AI generates optimized resumes and matching analysis
11
+ βœ… **Interview Coach** - AI generates customized interview questions and answer strategies
12
+ βœ… **Learning Path** - AI plans personalized learning paths
13
+ βœ… **Cover Letter** - AI writes professional cover letters
14
+ βœ… **LinkedIn Optimizer** - AI optimizes LinkedIn profiles
15
+ βœ… **Salary Intelligence** - AI analyzes market salaries and negotiation strategies
16
+
17
+ **All 6 features now use AI to generate content!** πŸŽ‰
18
+
19
+ ---
20
+
21
+ ## πŸ”‘ Step 1: Get DeepSeek API Key
22
+
23
+ ### Registration Steps:
24
+
25
+ 1. Visit [https://platform.deepseek.com](https://platform.deepseek.com)
26
+ 2. Click "Register/Login" in the top right corner
27
+ 3. Register with your email or phone number
28
+ 4. After logging in, go to the "API Keys" page
29
+ 5. Click "Create new API Key"
30
+ 6. **Copy and save** the API Key (it will only be shown once!)
31
+ 7. Top up your account (a Β₯10-20 top-up is recommended and will last a long time)
32
+
33
+ ### Cost Information:
34
+
35
+ - **Price**: Approx. Β₯1-2 / million tokens
36
+ - **Cost per generation**: Approx. Β₯0.005-0.02 (less than 2 cents)
37
+ - **Top-up suggestion**: Β₯10 can generate hundreds of pieces of content
38
+ - **Free quota**: New users may have a free trial quota
39
+
40
+ ---
41
+
42
+ ## 🎯 Usage Steps
43
+
44
+ ### 1. Configure API Key
45
+
46
+ 1. Open `index.html` in your browser
47
+ 2. Find the "πŸ”‘ DeepSeek API Key" input box at the top of the page
48
+ 3. Paste your API Key
49
+ 4. A **βœ…** green checkmark indicates successful configuration
50
+ 5. The API Key will be automatically saved in your browser and loaded the next time you open it
51
+
52
+ ### 2. Use the Features
53
+
54
+ ---
55
+
56
+ ## πŸ“‹ Feature Details
57
+
58
+ ### 🎯 1. Smart Resume
59
+
60
+ **Function:** AI generates a customized resume based on the job description
61
+
62
+ **How to use:**
63
+ 1. Click the "🎯 Smart Resume" tab
64
+ 2. Fill in your personal information:
65
+ - Full Name
66
+ - Current Role
67
+ - Years of Experience
68
+ - List of skills (comma-separated)
69
+ 3. Fill in the target position information:
70
+ - Desired Job Title
71
+ - Company Name
72
+ - **Complete Job Description** (copy and paste)
73
+ 4. Click "πŸš€ Generate Optimized Resume"
74
+ 5. Wait for 5-20 seconds
75
+ 6. View the generated resume and matching analysis
76
+
77
+ **Output:**
78
+ - Left side: The complete optimized resume (HTML format)
79
+ - Right side: Matching analysis and improvement suggestions
80
+
81
+ **Export options:**
82
+ - πŸ“₯ Export as PDF - Export as a PDF file
83
+ - πŸ“‹ Copy Text - Copy as plain text
84
+
85
+ ---
86
+
87
+ ### πŸ’Ό 2. Interview Coach
88
+
89
+ **Function:** AI generates interview questions and answer strategies for a specific position
90
+
91
+ **How to use:**
92
+ 1. Click the "πŸ’Ό Interview Coach" tab
93
+ 2. Fill in the interview information:
94
+ - Target Role (e.g., Senior Developer)
95
+ - Experience Level (Entry/Mid/Senior/Lead)
96
+ - Key Skills (e.g., Python, System Design, Leadership)
97
+ 3. Click "🎯 Generate Questions"
98
+ 4. Wait for the AI to generate
99
+
100
+ **Output:**
101
+ - Technical interview questions (8-10)
102
+ - Behavioral interview questions (5-6)
103
+ - Key points to assess and answering strategies for each question
104
+ - Explanation of the STAR method
105
+ - Interview preparation advice
106
+
107
+ **Tips:**
108
+ - Prepare specific examples for each question
109
+ - Use the STAR method to structure your answers
110
+ - Practice controlling your answer time
111
+
112
+ ---
113
+
114
+ ### πŸ“š 3. Learning Path
115
+
116
+ **Function:** AI plans a learning path based on your current skills and target position
117
+
118
+ **How to use:**
119
+ 1. Click the "πŸ“š Learning Path" tab
120
+ 2. Fill in the information:
121
+ - Current Skills (list all the skills you have mastered)
122
+ - Target Role (e.g., AI Engineer)
123
+ - Learning Timeline (3/6/12 months)
124
+ 3. Click "πŸ› οΈ Create Learning Path"
125
+ 4. Wait for the AI to plan
126
+
127
+ **Output:**
128
+ - Skill gap analysis (Have βœ… vs. To Learn πŸ“š)
129
+ - Phased learning plan (Beginner β†’ Intermediate β†’ Advanced)
130
+ - Learning content and time allocation for each phase
131
+ - Practical project suggestions (3-5)
132
+ - Learning resource recommendations
133
+ - Weekly learning plan
134
+
135
+ **Tips:**
136
+ - Follow the plan step-by-step, don't skip ahead
137
+ - Consolidate your learning with a project after each phase
138
+ - Regularly check your learning progress
139
+
140
+ ---
141
+
142
+ ### βœ‰οΈ 4. Cover Letter
143
+
144
+ **Function:** AI writes a professional, personalized cover letter
145
+
146
+ **How to use:**
147
+ 1. Click the "βœ‰οΈ Cover Letters" tab
148
+ 2. Fill in the information:
149
+ - Company Name
150
+ - Job Title
151
+ - Core Achievement (describe your most relevant achievement in detail)
152
+ - Writing Style (Professional/Enthusiastic/Formal)
153
+ 3. Click "✨ Generate Cover Letter"
154
+ 4. Wait for the AI to write
155
+
156
+ **Output:**
157
+ - A complete cover letter (including salutation, body, and signature)
158
+ - Customized optimization suggestions
159
+ - Ready to copy and use
160
+
161
+ **Tips:**
162
+ - Be as detailed and specific as possible in the "Core Achievement" section
163
+ - Choose a writing style that suits the company culture
164
+ - Fine-tune the generated letter based on your specific situation
165
+ - Add specific company information and projects
166
+
167
+ ---
168
+
169
+ ### πŸ’Ό 5. LinkedIn Optimizer
170
+
171
+ **Function:** AI optimizes your LinkedIn personal profile
172
+
173
+ **How to use:**
174
+ 1. Click the "πŸ’Ό LinkedIn" tab
175
+ 2. Fill in your current profile information:
176
+ - Current Headline
177
+ - Current About Section
178
+ - Target Industry/Roles
179
+ 3. Click "πŸš€ Optimize Profile"
180
+ 4. Wait for the AI to optimize
181
+
182
+ **Output:**
183
+ - Optimized headline (making full use of the 220-character limit)
184
+ - Optimized summary (structured and keyword-rich)
185
+ - Recommended hashtags (8-10)
186
+ - Profile optimization suggestions (skills, content publishing, networking)
187
+
188
+ **Tips:**
189
+ - Copy the optimized content to your LinkedIn profile
190
+ - Add all relevant skills to your skills section
191
+ - Regularly update and post industry-related content
192
+ - Actively build your professional network
193
+
194
+ ---
195
+
196
+ ### πŸ’° 6. Salary Intelligence
197
+
198
+ **Function:** AI analyzes market salaries and provides negotiation strategies
199
+
200
+ **How to use:**
201
+ 1. Click the "πŸ’° Salary Intel" tab
202
+ 2. Fill in the information:
203
+ - Job Title (e.g., Senior Software Engineer)
204
+ - Location (e.g., San Francisco, CA or Remote)
205
+ - Years of Experience
206
+ - Company Size
207
+ 3. Click "πŸ’‘ Get Salary Insights"
208
+ 4. Wait for the AI to analyze
209
+
210
+ **Output:**
211
+ - Salary estimation (base salary, bonus, equity)
212
+ - Total compensation calculation
213
+ - Market positioning analysis (impact of location, experience, company size)
214
+ - Negotiation strategy (target range, equity advice, negotiation tips)
215
+ - Market trend insights
216
+
217
+ **Tips:**
218
+ - Compare salaries across multiple regions
219
+ - Focus on total compensation, not just base salary
220
+ - Use the data as a basis for negotiation
221
+ - Consider the cost of living differences
222
+
223
+ ---
224
+
225
+ ## πŸ’‘ Usage Tips
226
+
227
+ ### 1. Write High-Quality Prompts
228
+
229
+ **Resume Optimization:**
230
+ ```
231
+ The job description should be as detailed as possible:
232
+ - Complete job requirements
233
+ - Specific technology stack
234
+ - Description of job responsibilities
235
+ - Company background information
236
+ ```
237
+
238
+ **Interview Preparation:**
239
+ ```
240
+ Key skills should be specific:
241
+ - Don't just write "programming," but "Python, Django, RESTful API"
242
+ - Include soft skills: "team collaboration, project management"
243
+ ```
244
+
245
+ **Learning Path:**
246
+ ```
247
+ The list of current skills should be exhaustive:
248
+ - List all the skills you have mastered
249
+ - Include information on skill proficiency
250
+ - Describe your actual project experience
251
+ ```
252
+
253
+ ### 2. Optimize AI Responses
254
+
255
+ If the generated content is not satisfactory:
256
+ 1. **Regenerate** - The result may be different each time
257
+ 2. **Add more information** - Add more details in the input box
258
+ 3. **Adjust your requirements** - Clearly state the desired style and focus
259
+
260
+ ### 3. Save on API Costs
261
+
262
+ - βœ… Fill in complete information before generating (to reduce retries)
263
+ - βœ… Save satisfactory results to avoid repeated generation
264
+ - βœ… Use reasonably, don't test frequently
265
+ - βœ… Keep an eye on your account balance
266
+
267
+ ---
268
+
269
+ ## πŸ” Privacy & Security
270
+
271
+ ### βœ… Security Measures:
272
+ - The API Key is only saved in your **browser's local** localStorage
273
+ - It is not uploaded to any third-party servers
274
+ - All requests are sent directly to DeepSeek
275
+ - The code is fully open-source and can be audited by yourself
276
+
277
+ ### ⚠️ Precautions:
278
+ - Do not save your API Key on public computers
279
+ - Change your API Key regularly
280
+ - Do not share your API Key
281
+ - You can use placeholders for sensitive information (like your real name, phone number)
282
+
283
+ ---
284
+
285
+ ## πŸ”§ Troubleshooting
286
+
287
+ ### ❌ Displays "API Key not configured"
288
+ **Reason:** The API Key was not entered or was cleared
289
+ **Solution:** Re-enter your API Key at the top of the page
290
+
291
+ ### ❌ Displays "401 Unauthorized"
292
+ **Reason:** The API Key is invalid or incorrect
293
+ **Solution:**
294
+ 1. Check if the API Key is copied completely
295
+ 2. Confirm if the API Key has been activated
296
+ 3. Log in to the DeepSeek console and regenerate it
297
+
298
+ ### ❌ Displays "Insufficient balance"
299
+ **Reason:** Insufficient account balance
300
+ **Solution:** Log in to the DeepSeek console to top up
301
+
302
+ ### ❌ Generation is slow or times out
303
+ **Reason:** Network issues or the service is busy
304
+ **Solution:**
305
+ 1. Check your internet connection
306
+ 2. Try again later
307
+ 3. Reduce the length of the input content
308
+
309
+ ### ❌ The format of the generated content is chaotic
310
+ **Reason:** The format returned by the AI does not meet expectations
311
+ **Solution:**
312
+ 1. Refresh the page and try again
313
+ 2. Simplify the input content
314
+ 3. The content is still usable, but the format needs to be organized
315
+
316
+ ### 🌐 Network or CORS error
317
+ **Reason:** Browser security restrictions
318
+ **Solution:**
319
+ 1. Ensure that your network can access api.deepseek.com
320
+ 2. Try using a different browser
321
+ 3. Check if a proxy is needed
322
+
323
+ ---
324
+
325
+ ## πŸ“Š Feature Comparison
326
+
327
+ | Feature | Uses AI | Input Information | Generation Time | Main Purpose |
328
+ |---|---|---|---|---|
329
+ | Smart Resume | βœ… | Personal info + Job description | 5-20s | Customized resume |
330
+ | Interview Coach | βœ… | Position + Level + Skills | 5-15s | Interview preparation |
331
+ | Learning Path | βœ… | Current skills + Goal + Time | 10-20s | Learning planning |
332
+ | Cover Letter | βœ… | Company + Position + Achievement | 5-15s | Cover letter |
333
+ | LinkedIn | βœ… | Current profile + Goal | 5-15s | Personal branding |
334
+ | Salary Intel | βœ… | Position + Location + Experience | 5-15s | Salary negotiation |
335
+
336
+ ---
337
+
338
+ ## 🎨 UI Explanation
339
+
340
+ ### Status Indicator (top right corner)
341
+
342
+ - **βšͺ Gray circle** - API Key is not configured or not validated
343
+ - **πŸ”„ Blue spinning** - Calling the DeepSeek AI
344
+ - **βœ… Green checkmark** - API call successful
345
+ - **❌ Red cross** - API call failed or configuration error
346
+
347
+ ### Tab Explanation
348
+
349
+ The page has 6 feature tabs, click to switch:
350
+ 1. 🎯 Smart Resume
351
+ 2. πŸ’Ό Interview Coach
352
+ 3. πŸ“š Learning Path
353
+ 4. βœ‰οΈ Cover Letters
354
+ 5. πŸ’Ό LinkedIn
355
+ 6. πŸ’° Salary Intel
356
+
357
+ ---
358
+
359
+ ## πŸš€ Quick Start Guide
360
+
361
+ ### Get Started in 5 Minutes:
362
+
363
+ 1. **Get API Key** (3 minutes)
364
+ - Visit platform.deepseek.com
365
+ - Register and create an API Key
366
+ - Top up Β₯10
367
+
368
+ 2. **Configure the Application** (30 seconds)
369
+ - Open `index.html`
370
+ - Paste the API Key
371
+ - See the βœ…
372
+
373
+ 3. **Generate Your First Resume** (2 minutes)
374
+ - Fill in your personal information
375
+ - Paste the job description
376
+ - Click generate
377
+ - View the result
378
+
379
+ 4. **Export and Use** (30 seconds)
380
+ - Click "Export as PDF"
381
+ - Or copy the text content
382
+ - Apply it to your actual job search
383
+
384
+ ---
385
+
386
+ ## πŸ’° Cost Budget
387
+
388
+ ### Estimated Actual Usage Cost:
389
+
390
+ | Use Case | Monthly Usage | Monthly Cost |
391
+ |---|---|---|
392
+ | Job Seeker (intensive) | 50 generations | Β₯0.5-1 |
393
+ | Daily Optimization | 20 generations | Β₯0.2-0.5 |
394
+ | Occasional Use | 5 generations | Β₯0.05-0.1 |
395
+
396
+ **Conclusion: A Β₯10 top-up can last a long time!**
397
+
398
+ ---
399
+
400
+ ## πŸ“– Best Practices
401
+
402
+ ### Recommended Use Throughout the Job Search Process:
403
+
404
+ 1. **Preparation Phase**
405
+ - Use Learning Path to plan skill improvement
406
+ - Learn and practice for target positions
407
+
408
+ 2. **Application Phase**
409
+ - Use Smart Resume to customize your resume for each position
410
+ - Use Cover Letter to write your cover letter
411
+ - Use LinkedIn to optimize your personal brand
412
+
413
+ 3. **Interview Phase**
414
+ - Use Interview Coach to prepare for interview questions
415
+ - Use Salary Intel to understand the market situation
416
+
417
+ 4. **Negotiation Phase**
418
+ - Refer to the negotiation strategies from Salary Intelligence
419
+ - Negotiate your salary based on data
420
+
421
+ ---
422
+
423
+ ## πŸŽ“ Advanced Tips
424
+
425
+ ### 1. Combine Features
426
+
427
+ **Example: Complete Job Search Process**
428
+ ```
429
+ 1. Learning Path β†’ Assess skill gaps
430
+ 2. Smart Resume β†’ Generate resume
431
+ 3. Cover Letter β†’ Write cover letter
432
+ 4. LinkedIn β†’ Optimize online image
433
+ 5. Interview Coach β†’ Prepare for interview
434
+ 6. Salary Intel β†’ Understand the market situation
435
+ ```
436
+
437
+ ### 2. Generate and Compare Multiple Times
438
+
439
+ For important content (like a resume), you can:
440
+ 1. Generate multiple versions
441
+ 2. Compare the advantages of different versions
442
+ 3. Combine the advantages of each version
443
+ 4. Form the final version
444
+
445
+ ### 3. Manual Optimization
446
+
447
+ The content generated by AI is a foundation, it is recommended to:
448
+ 1. Add specific data and results
449
+ 2. Adjust the tone and style
450
+ 3. Check for factual accuracy
451
+ 4. Fine-tune based on the actual situation
452
+
453
+ ---
454
+
455
+ ## πŸ†˜ Get Help
456
+
457
+ ### Official Resources:
458
+ - [DeepSeek API Documentation](https://platform.deepseek.com/docs)
459
+ - [DeepSeek Console](https://platform.deepseek.com/usage)
460
+
461
+ ### FAQ:
462
+ If you encounter technical problems, please check:
463
+ 1. If the API Key is configured correctly
464
+ 2. If the network connection is normal
465
+ 3. If the account balance is sufficient
466
+ 4. The error message in the browser console (F12 β†’ Console)
467
+
468
+ ---
469
+
470
+ ## βœ… Done!
471
+
472
+ Congratulations! You now have a career development platform completely driven by AI!
473
+
474
+ **Next steps:**
475
+ 1. βœ… Get DeepSeek API Key
476
+ 2. βœ… Configure it at the top of the page
477
+ 3. βœ… Choose a feature to start using
478
+ 4. βœ… Generate your first piece of AI content
479
+
480
+ **Wishing you success in your job search and a prosperous career!** πŸŽ‰πŸš€
481
+
482
+ ---
483
+
484
+ ## πŸ“ Changelog
485
+
486
+ **v2.0 - November 2024**
487
+ - βœ… Removed Doubao option, simplified to DeepSeek only
488
+ - βœ… All 6 features are integrated with AI generation
489
+ - βœ… Optimized Prompt templates
490
+ - βœ… Improved error handling
491
+ - βœ… Enhanced Chinese support
492
+
493
+ **v1.0 - Initial Version**
494
+ - Only Smart Resume used AI
495
+ - Other features used template generation
PROJECT_OVERVIEW.txt ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ╔═══════════════════════════════════════════════════════════════╗
2
+ β•‘ β•‘
3
+ β•‘ πŸš€ CareerForge AI - Project File Description β•‘
4
+ β•‘ β•‘
5
+ β•‘ AI-Driven Comprehensive Career Development Platform - Complete Version v2.0 β•‘
6
+ β•‘ β•‘
7
+ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
8
+
9
+ πŸ“ Project File Structure
10
+ ═══════════════════════════════════════════════════════════════
11
+
12
+ πŸ“„ index.html
13
+ β†’ Main application (single-file app)
14
+ β†’ Contains all 6 features: Resume, Interview, Learning, Cover Letter, LinkedIn, Salary
15
+ β†’ Double-click to open and use
16
+ β†’ Size: approx. 51KB
17
+
18
+ πŸ“„ README.md
19
+ β†’ Project homepage and quick start guide
20
+ β†’ Contains feature introduction, usage instructions, FAQ
21
+ β†’ Recommended to read this file first
22
+
23
+ πŸ“„ INSTRUCTIONS.md
24
+ β†’ Detailed user documentation
25
+ β†’ Detailed instructions for each feature
26
+ β†’ Troubleshooting and best practices
27
+ β†’ Suitable for in-depth understanding
28
+
29
+ πŸ“„ QUICK_REFERENCE.md
30
+ β†’ Quick reference card
31
+ β†’ At-a-glance information
32
+ β†’ Troubleshooting cheat sheet
33
+ β†’ Suitable for daily reference
34
+
35
+ πŸ“„ start_app.command
36
+ β†’ One-click startup script
37
+ β†’ Double-click to open the application in the browser
38
+ β†’ Displays usage tips
39
+ β†’ Mac only
40
+
41
+ πŸ“„ PROJECT_OVERVIEW.txt
42
+ β†’ This file
43
+ β†’ Project file manifest
44
+ β†’ Quick navigation
45
+
46
+
47
+ ═══════════════════════════════════════════════════════════════
48
+ πŸš€ Quick Start (3 Steps)
49
+ ═══════════════════════════════════════════════════════════════
50
+
51
+ Step 1: Get API Key
52
+ 1. Visit https://platform.deepseek.com
53
+ 2. Register and log in
54
+ 3. Create an API Key
55
+ 4. Top up Β₯10-20
56
+
57
+ Step 2: Start the Application
58
+ Method 1: Double-click "start_app.command"
59
+ Method 2: Double-click "index.html" directly
60
+
61
+ Step 3: Configure and Use
62
+ 1. Enter your API Key at the top of the page
63
+ 2. A βœ… indicates success
64
+ 3. Choose a feature to start using
65
+
66
+
67
+ ═══════════════════════════════════════════════════════════════
68
+ ✨ 6 Core Features
69
+ ═══════════════════════════════════════════════════════════════
70
+
71
+ 🎯 Smart Resume
72
+ Generates a customized resume and matching analysis based on the job description
73
+
74
+ πŸ’Ό Interview Coach
75
+ Generates interview questions, key points to assess, and answering strategies
76
+
77
+ πŸ“š Learning Path
78
+ Personalized learning plan and project suggestions
79
+
80
+ βœ‰οΈ Cover Letter
81
+ AI writes a professional cover letter
82
+
83
+ πŸ’Ό LinkedIn Optimizer
84
+ Optimizes your personal profile and professional brand
85
+
86
+ πŸ’° Salary Intelligence
87
+ Market salary analysis and negotiation strategies
88
+
89
+
90
+ ═══════════════════════════════════════════════════════════════
91
+ πŸ’° Cost Information
92
+ ═══════════════════════════════════════════════════════════════
93
+
94
+ Cost per generation: Β₯0.005 - Β₯0.02 (less than 2 cents)
95
+ Top-up suggestion: Β₯10 can be used for hundreds of times
96
+ Overall cost: Extremely low, suitable for personal use
97
+
98
+
99
+ ═══════════════════════════════════════════════════════════════
100
+ πŸ” Privacy & Security
101
+ ═══════════════════════════════════════════════════════════════
102
+
103
+ βœ… API Key is saved only in the browser's local storage
104
+ βœ… Not uploaded to any third-party servers
105
+ βœ… All requests are sent directly to DeepSeek
106
+ βœ… Code is fully open-source and auditable
107
+
108
+
109
+ ═════════════════════════════════════════���═════════════════════
110
+ πŸ“– Recommended Reading Order
111
+ ═══════════════════════════════════════════════════════════════
112
+
113
+ 1️⃣ This file (PROJECT_OVERVIEW.txt) β†’ Understand the project structure
114
+ 2️⃣ README.md β†’ Quick start
115
+ 3️⃣ QUICK_REFERENCE.md β†’ Frequently used information
116
+ 4️⃣ INSTRUCTIONS.md β†’ In-depth learning
117
+
118
+
119
+ ═══════════════════════════════════════════════════════════════
120
+ 🎯 Usage Suggestions
121
+ ═══════════════════════════════════════════════════════════════
122
+
123
+ βœ… The more detailed the input information, the higher the quality of the AI generation
124
+ βœ… You can generate multiple times and choose the best result
125
+ βœ… AI generation is the foundation, manual optimization is key
126
+ βœ… Save satisfactory results to avoid repeated consumption
127
+ βœ… Change your API Key regularly to ensure security
128
+
129
+
130
+ ═══════════════════════════════════════════════════════════════
131
+ πŸ”§ Technical Features
132
+ ═══════════════════════════════════════════════════════════════
133
+
134
+ β€’ Pure frontend application, no backend server required
135
+ β€’ Single-file application, one HTML file contains all features
136
+ β€’ AI-driven, all features use DeepSeek AI
137
+ β€’ Responsive design, supports desktop and mobile
138
+ β€’ Local storage, API Key is saved automatically
139
+
140
+
141
+ ═══════════════════════════════════════════════════════════════
142
+ πŸ“ž Get Help
143
+ ═══════════════════════════════════════════════════════════════
144
+
145
+ DeepSeek Official Website: https://platform.deepseek.com
146
+ API Documentation: https://platform.deepseek.com/docs
147
+ Console: https://platform.deepseek.com/usage
148
+
149
+
150
+ ═══════════════════════════════════════════════════════════════
151
+ πŸŽ‰ Get Started
152
+ ═══════════════════════════════════════════════════════════════
153
+
154
+ Now double-click "start_app.command" or "index.html" to get started!
155
+
156
+ Wishing you success in your job search and a prosperous career! πŸš€βœ¨
157
+
158
+
159
+ ═══════════════════════════════════════════════════════════════
160
+ Version Information
161
+ ═══════════════════════════════════════════════════════════════
162
+
163
+ Version: v2.0
164
+ Update Date: November 2024
165
+ AI Engine: DeepSeek
166
+ License: MIT
QUICK_REFERENCE.md ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # πŸ“‹ CareerForge AI - Quick Reference Card
2
+
3
+ ## πŸ”‘ First Time Use
4
+
5
+ ```
6
+ 1. Visit https://platform.deepseek.com
7
+ 2. Register β†’ Create API Key β†’ Top up Β₯10
8
+ 3. Open index.html
9
+ 4. Paste the API Key at the top of the page
10
+ 5. Start using!
11
+ ```
12
+
13
+ ---
14
+
15
+ ## πŸ“Š 6 Core Features at a Glance
16
+
17
+ | Feature | Input | Output | Time |
18
+ |---|---|---|---|
19
+ | 🎯 **Resume Optimization** | Personal Info + Job Description | Optimized Resume + Matching Analysis | 5-20s |
20
+ | πŸ’Ό **Interview Coach** | Position + Level + Skills | Interview Questions + Answer Strategy | 5-15s |
21
+ | πŸ“š **Learning Path** | Current Skills + Target Role | Learning Plan + Project Suggestions | 10-20s |
22
+ | βœ‰οΈ **Cover Letter** | Company + Position + Achievement | Professional Cover Letter | 5-15s |
23
+ | πŸ’Ό **LinkedIn** | Current Profile + Target | Optimized Profile + Hashtags | 5-15s |
24
+ | πŸ’° **Salary Analysis** | Position + Location + Experience | Salary Range + Negotiation Strategy | 5-15s |
25
+
26
+ ---
27
+
28
+ ## πŸ’‘ Usage Tips
29
+
30
+ ### βœ… Do
31
+
32
+ - **Resume**: Provide the complete job description
33
+ - **Interview**: List all relevant skills
34
+ - **Learning**: Detail your current skill level
35
+ - **Cover Letter**: Describe specific achievement data
36
+ - **LinkedIn**: Clearly define your target industry
37
+ - **Salary**: Fill in accurate location and experience
38
+
39
+ ### ❌ Don't
40
+
41
+ - Don't enter overly brief information
42
+ - Don't frequently regenerate the same content
43
+ - Don't save your API Key on a public computer
44
+ - Don't share your API Key
45
+
46
+ ---
47
+
48
+ ## πŸ’° Cost Reference
49
+
50
+ | Use Case | Monthly Usage | Monthly Cost |
51
+ |---|---|---|
52
+ | Intensive Job Search | 50 times | Β₯0.5-1 |
53
+ | Regular Optimization | 20 times | Β₯0.2-0.5 |
54
+ | Occasional Use | 5 times | Β₯0.05-0.1 |
55
+
56
+ **Conclusion: A Β₯10 top-up will last a long time!**
57
+
58
+ ---
59
+
60
+ ## πŸ”§ Quick Troubleshooting
61
+
62
+ | Issue | Solution |
63
+ |---|---|
64
+ | ❌ API Key not configured | Enter API Key at the top of the page |
65
+ | ❌ 401 Error | Check if the API Key is correct |
66
+ | ❌ Insufficient balance | Log in to DeepSeek to top up |
67
+ | ❌ Generation failed | Check network, try again later |
68
+ | ❌ Formatting issues | Refresh the page and regenerate |
69
+
70
+ ---
71
+
72
+ ## 🎯 Recommended Workflow
73
+
74
+ ### Complete Job Search Process
75
+
76
+ ```
77
+ Step 1: Learning Path
78
+ ↓
79
+ Assess skill gaps, start learning
80
+ ↓
81
+ Step 2: Resume Optimization
82
+ ↓
83
+ Customize resume for each position
84
+ ↓
85
+ Step 3: Cover Letter
86
+ ↓
87
+ Write a personalized cover letter
88
+ ↓
89
+ Step 4: LinkedIn Optimization
90
+ ↓
91
+ Build a professional online presence
92
+ ↓
93
+ Step 5: Interview Preparation
94
+ ↓
95
+ Prepare for interview questions and answers
96
+ ↓
97
+ Step 6: Salary Analysis
98
+ ↓
99
+ Understand the market, prepare for negotiation
100
+ ↓
101
+ πŸŽ‰ Successfully hired!
102
+ ```
103
+
104
+ ---
105
+
106
+ ## πŸ“ž Quick Links
107
+
108
+ - **DeepSeek Official Website**: https://platform.deepseek.com
109
+ - **API Documentation**: https://platform.deepseek.com/docs
110
+ - **Console**: https://platform.deepseek.com/usage
111
+
112
+ ---
113
+
114
+ ## πŸ” Security Tips
115
+
116
+ βœ… API Key is stored locally only
117
+ βœ… Not uploaded to third-party servers
118
+ βœ… Code is fully open-source and auditable
119
+ ⚠️ Change your API Key regularly
120
+ ⚠️ Do not use on public computers
121
+
122
+ ---
123
+
124
+ ## πŸŽ“ Secrets to Improving Quality
125
+
126
+ 1. **The more detailed the input, the more accurate the output**
127
+ 2. **Generate multiple times, choose the best result**
128
+ 3. **AI generation is the foundation, manual optimization is key**
129
+ 4. **Save satisfactory results to avoid repeated consumption**
130
+ 5. **Adjust appropriately based on the actual situation**
131
+
132
+ ---
133
+
134
+ ## πŸ“± Status Indicators
135
+
136
+ - βšͺ **Gray** - Not configured
137
+ - πŸ”„ **Spinning** - Generating
138
+ - βœ… **Green** - Success
139
+ - ❌ **Red** - Failed
140
+
141
+ ---
142
+
143
+ ## πŸš€ Get Started Now
144
+
145
+ 1. Open `index.html`
146
+ 2. Enter your API Key
147
+ 3. Choose a feature
148
+ 4. Fill in the information
149
+ 5. Click generate
150
+ 6. View the results
151
+
152
+ **It's that simple!**
153
+
154
+ ---
155
+
156
+ *Enjoy using it!* πŸŽ‰
README.md CHANGED
@@ -1,11 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
- title: CareerForge AI
3
- emoji: πŸ“ˆ
4
- colorFrom: indigo
5
- colorTo: red
6
- sdk: docker
7
- pinned: false
8
- license: mit
 
 
 
 
 
 
 
 
 
 
 
9
  ---
10
 
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # πŸš€ CareerForge AI - AI-Powered Career Development Platform
2
+
3
+ > A comprehensive career development tool fully driven by AI to help you optimize your resume, prepare for interviews, plan your learning path, and more.
4
+
5
+ <div align="center">
6
+
7
+ ![Status](https://img.shields.io/badge/status-active-success.svg)
8
+ ![AI](https://img.shields.io/badge/AI-DeepSeek-blue.svg)
9
+ ![License](https://img.shields.io/badge/license-MIT-green.svg)
10
+
11
+ [Quick Start](#quick-start) β€’ [Features](#features) β€’ [User Guide](./INSTRUCTIONS.md)
12
+
13
+ </div>
14
+
15
+ ---
16
+
17
+ ## ✨ Features
18
+
19
+ This is a **purely frontend, zero-backend** AI application with 6 core features:
20
+
21
+ ### 🎯 1. Smart Resume
22
+ Based on the job description, AI automatically generates an optimized resume and a matching analysis.
23
+
24
+ ### πŸ’Ό 2. Interview Coach
25
+ Generates interview questions, key points to assess, and answering strategies for a specific position.
26
+
27
+ ### πŸ“š 3. Learning Path
28
+ Based on your current skills and target position, AI plans a personalized learning path.
29
+
30
+ ### βœ‰οΈ 4. Cover Letter
31
+ AI writes a professional, personalized cover letter.
32
+
33
+ ### πŸ’Ό 5. LinkedIn Optimizer
34
+ Optimizes your LinkedIn headline, summary, and personal brand.
35
+
36
+ ### πŸ’° 6. Salary Intelligence
37
+ Analyzes market salaries and provides negotiation strategies.
38
+
39
+ ---
40
+
41
+ ## πŸš€ Quick Start
42
+
43
+ ### Step 1: Get API Key
44
+
45
+ 1. Visit [DeepSeek Official Website](https://platform.deepseek.com)
46
+ 2. Register and log in
47
+ 3. Go to the "API Keys" page and create a new key
48
+ 4. Copy the API Key
49
+ 5. Top up your account (Β₯10-20 recommended)
50
+
51
+ ### Step 2: Open the Application
52
+
53
+ Double-click the `index.html` file to open the application in your browser.
54
+
55
+ ### Step 3: Configure API
56
+
57
+ 1. Find the "πŸ”‘ DeepSeek API Key" input box at the top of the page
58
+ 2. Paste your API Key
59
+ 3. A βœ… indicates successful configuration
60
+
61
+ ### Step 4: Start Using
62
+
63
+ Select any feature tab, fill in the relevant information, and click the generate button!
64
+
65
+ ---
66
+
67
+ ## πŸ“‹ File Structure
68
+
69
+ ```
70
+ CareerForge-AI/
71
+ β”œβ”€β”€ index.html # Main application (single-file app)
72
+ β”œβ”€β”€ INSTRUCTIONS.md # Detailed user guide
73
+ └── README.md # This file
74
+ ```
75
+
76
+ ---
77
+
78
+ ## πŸ’° Cost
79
+
80
+ - **API Cost**: Approx. Β₯0.005-0.02 / generation
81
+ - **Top-up Suggestion**: Β₯10 can be used for hundreds of generations
82
+ - **Total Cost**: Extremely low, suitable for personal use
83
+
84
+ ---
85
+
86
+ ## 🎯 Use Cases
87
+
88
+ ### Job Seekers
89
+ - Customize resumes for different positions
90
+ - Prepare for interview questions and answers
91
+ - Understand market salary trends
92
+
93
+ ### Career Planning
94
+ - Assess skill gaps
95
+ - Create a learning plan
96
+ - Plan your career development path
97
+
98
+ ### Personal Branding
99
+ - Optimize your LinkedIn profile
100
+ - Write professional cover letters
101
+ - Enhance your personal brand influence
102
+
103
+ ---
104
+
105
+ ## πŸ” Privacy & Security
106
+
107
+ - βœ… API Key is saved only in your browser's local storage
108
+ - βœ… Not uploaded to any third-party servers
109
+ - βœ… All requests are sent directly to DeepSeek
110
+ - βœ… Fully open-source, code is auditable
111
+
112
+ ---
113
+
114
+ ## πŸ› οΈ Technical Features
115
+
116
+ - **Pure Frontend Application** - No backend server required
117
+ - **Single-File Application** - One HTML file contains all features
118
+ - **AI-Driven** - All 6 features use DeepSeek AI
119
+ - **Responsive Design** - Supports desktop and mobile
120
+ - **Local Storage** - API Key is saved automatically
121
+
122
+ ---
123
+
124
+ ## πŸ“– Detailed Documentation
125
+
126
+ Check out [INSTRUCTIONS.md](./INSTRUCTIONS.md) to learn about:
127
+ - Detailed usage of each feature
128
+ - Troubleshooting guide
129
+ - Best practice recommendations
130
+ - Advanced usage tips
131
+
132
+ ---
133
+
134
+ ## πŸŽ“ Usage Tips
135
+
136
+ ### Writing High-Quality Input
137
+
138
+ **Resume Optimization:**
139
+ - Provide the complete job description
140
+ - Include specific technical requirements
141
+ - Explain the company background information
142
+
143
+ **Interview Preparation:**
144
+ - List all relevant skills
145
+ - Include both soft and hard skills
146
+ - Specify the job level
147
+
148
+ **Learning Path:**
149
+ - List your current skills in detail
150
+ - Specify your skill proficiency
151
+ - Clearly define your learning goals
152
+
153
  ---
154
+
155
+ ## ❓ FAQ
156
+
157
+ ### Q: How is the API Key saved?
158
+ A: It is saved in your browser's localStorage, only locally, and will not be uploaded.
159
+
160
+ ### Q: How much does it cost?
161
+ A: Each generation costs about Β₯0.005-0.02. A Β₯10 top-up will last a long time.
162
+
163
+ ### Q: Is an internet connection required?
164
+ A: Yes, an internet connection is needed to call the DeepSeek API.
165
+
166
+ ### Q: Does it support other languages?
167
+ A: It currently supports both Chinese and English input/output.
168
+
169
+ ### Q: Is my data secure?
170
+ A: Very secure. All data is transmitted only between your browser and DeepSeek.
171
+
172
  ---
173
 
174
+ ## πŸ”§ Troubleshooting
175
+
176
+ ### API Key Error
177
+ 1. Check if the API Key is copied completely
178
+ 2. Confirm it has been activated in the DeepSeek console
179
+ 3. Check if your account balance is sufficient
180
+
181
+ ### Generation Failed
182
+ 1. Check your internet connection
183
+ 2. Check the browser console for error messages (F12)
184
+ 3. Try again later
185
+
186
+ ### Content Formatting Issues
187
+ 1. Refresh the page and regenerate
188
+ 2. Simplify the input content
189
+ 3. Manually adjust the format
190
+
191
+ ---
192
+
193
+ ## πŸš€ Version History
194
+
195
+ ### v2.0 (Current Version)
196
+ - βœ… All 6 features are integrated with AI
197
+ - βœ… Simplified to DeepSeek only
198
+ - βœ… Optimized Prompt templates
199
+ - βœ… Improved error handling
200
+ - βœ… Enhanced Chinese support
201
+
202
+ ### v1.0
203
+ - Initial version
204
+ - Only the resume feature used AI
205
+
206
+ ---
207
+
208
+ ## πŸ“ž Get Help
209
+
210
+ - **DeepSeek Documentation**: [https://platform.deepseek.com/docs](https://platform.deepseek.com/docs)
211
+ - **DeepSeek Console**: [https://platform.deepseek.com/usage](https://platform.deepseek.com/usage)
212
+
213
+ ---
214
+
215
+ ## πŸ“„ License
216
+
217
+ This project is licensed under the MIT License - see the LICENSE file for details.
218
+
219
+ ---
220
+
221
+ ## πŸŽ‰ Get Started
222
+
223
+ Now open `index.html`, configure your API Key, and start using AI to boost your career development!
224
+
225
+ **Wishing you success in your job search and a prosperous career!** πŸš€βœ¨
226
+
227
+ ---
228
+
229
+ <div align="center">
230
+
231
+ Made with ❀️ | Powered by DeepSeek AI
232
+
233
+ </div>
234
+
app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import httpx
3
+ from fastapi import FastAPI, Request, HTTPException
4
+ from fastapi.responses import HTMLResponse
5
+ from fastapi.staticfiles import StaticFiles
6
+
7
+ # --- Configuration ---
8
+ # Get the API key from Hugging Face Secrets
9
+ DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
10
+ DEEPSEEK_ENDPOINT = "https://api.deepseek.com/v1/chat/completions"
11
+
12
+ # --- FastAPI App Initialization ---
13
+ app = FastAPI()
14
+
15
+ # Create a reusable HTTP client
16
+ client = httpx.AsyncClient()
17
+
18
+ # --- API Endpoint ---
19
+ @app.post("/call-deepseek")
20
+ async def proxy_deepseek(request: Request):
21
+ """
22
+ This endpoint receives the request from our frontend (index.html),
23
+ adds the secret API key, and forwards it to the DeepSeek API.
24
+ """
25
+ # Check if the API key is configured in HF Secrets
26
+ if not DEEPSEEK_API_KEY:
27
+ raise HTTPException(
28
+ status_code=500,
29
+ detail="DEEPSEEK_API_KEY is not set on the server."
30
+ )
31
+
32
+ try:
33
+ # Get the original JSON body from the frontend
34
+ body = await request.json()
35
+
36
+ # Prepare the authorization headers for DeepSeek
37
+ headers = {
38
+ "Content-Type": "application/json",
39
+ "Authorization": f"Bearer {DEEPSEEK_API_KEY}"
40
+ }
41
+
42
+ # Make the asynchronous request to DeepSeek
43
+ response = await client.post(
44
+ DEEPSEEK_ENDPOINT,
45
+ json=body, # Forward the body from the frontend
46
+ headers=headers,
47
+ timeout=30.0 # Set a 30-second timeout
48
+ )
49
+
50
+ # Check if DeepSeek returned an error
51
+ response.raise_for_status()
52
+
53
+ # Return DeepSeek's successful response directly to the frontend
54
+ return response.json()
55
+
56
+ except httpx.HTTPStatusError as e:
57
+ # Handle errors from the DeepSeek API
58
+ print(f"Error from DeepSeek API: {e.response.text}")
59
+ raise HTTPException(
60
+ status_code=e.response.status_code,
61
+ detail=e.response.text
62
+ )
63
+ except Exception as e:
64
+ # Handle any other unexpected errors
65
+ print(f"Internal server error: {str(e)}")
66
+ raise HTTPException(
67
+ status_code=500,
68
+ detail=f"Internal server error: {str(e)}"
69
+ )
70
+
71
+ # --- Static File Serving ---
72
+ # Mount the 'static' directory to serve index.html and other assets
73
+ app.mount("/static", StaticFiles(directory="static"), name="static")
74
+
75
+ @app.get("/")
76
+ async def read_root():
77
+ """
78
+ Serves the main index.html file from the 'static' directory.
79
+ """
80
+ try:
81
+ with open("static/index.html") as f:
82
+ return HTMLResponse(content=f.read(), status_code=200)
83
+ except FileNotFoundError:
84
+ return HTMLResponse(
85
+ content="<h1>Error: index.html not found</h1><p>Ensure index.html is in a 'static' folder.</p>",
86
+ status_code=404
87
+ )
index.html ADDED
@@ -0,0 +1,1251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>CareerForge AI - Complete Career Platform</title>
7
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
8
+ <style>
9
+ /* Previous CSS styles remain the same */
10
+ :root {
11
+ --primary: #2563eb;
12
+ --primary-dark: #1d4ed8;
13
+ --secondary: #64748b;
14
+ --success: #10b981;
15
+ --warning: #f59e0b;
16
+ --error: #ef4444;
17
+ --background: #f8fafc;
18
+ --surface: #ffffff;
19
+ --text: #1e293b;
20
+ --text-light: #64748b;
21
+ }
22
+
23
+ * {
24
+ margin: 0;
25
+ padding: 0;
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ body {
30
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
31
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
32
+ min-height: 100vh;
33
+ padding: 20px;
34
+ color: var(--text);
35
+ }
36
+
37
+ .container {
38
+ max-width: 1200px;
39
+ margin: 0 auto;
40
+ background: var(--surface);
41
+ border-radius: 20px;
42
+ box-shadow: 0 20px 40px rgba(0,0,0,0.1);
43
+ overflow: hidden;
44
+ }
45
+
46
+ .header {
47
+ background: linear-gradient(135deg, var(--primary), var(--primary-dark));
48
+ color: white;
49
+ padding: 40px;
50
+ text-align: center;
51
+ }
52
+
53
+ .header h1 {
54
+ font-size: 2.5em;
55
+ margin-bottom: 10px;
56
+ font-weight: 700;
57
+ }
58
+
59
+ .tabs {
60
+ display: flex;
61
+ background: var(--background);
62
+ border-bottom: 1px solid #e2e8f0;
63
+ overflow-x: auto;
64
+ }
65
+
66
+ .tab-button {
67
+ padding: 20px 30px;
68
+ background: none;
69
+ border: none;
70
+ font-size: 1.1em;
71
+ font-weight: 600;
72
+ color: var(--text-light);
73
+ cursor: pointer;
74
+ transition: all 0.3s ease;
75
+ white-space: nowrap;
76
+ border-bottom: 3px solid transparent;
77
+ }
78
+
79
+ .tab-button:hover {
80
+ color: var(--primary);
81
+ background: rgba(37, 99, 235, 0.05);
82
+ }
83
+
84
+ .tab-button.active {
85
+ color: var(--primary);
86
+ border-bottom-color: var(--primary);
87
+ background: white;
88
+ }
89
+
90
+ .tab-content {
91
+ display: none;
92
+ padding: 40px;
93
+ min-height: 600px;
94
+ }
95
+
96
+ .tab-content.active {
97
+ display: block;
98
+ animation: fadeIn 0.5s ease;
99
+ }
100
+
101
+ @keyframes fadeIn {
102
+ from { opacity: 0; transform: translateY(10px); }
103
+ to { opacity: 1; transform: translateY(0); }
104
+ }
105
+
106
+ .form-grid {
107
+ display: grid;
108
+ grid-template-columns: 1fr 1fr;
109
+ gap: 30px;
110
+ margin-bottom: 30px;
111
+ }
112
+
113
+ .form-section {
114
+ background: var(--surface);
115
+ padding: 30px;
116
+ border-radius: 15px;
117
+ border: 1px solid #e2e8f0;
118
+ }
119
+
120
+ .form-section h3 {
121
+ margin-bottom: 20px;
122
+ color: var(--primary);
123
+ font-size: 1.3em;
124
+ }
125
+
126
+ .form-group {
127
+ margin-bottom: 20px;
128
+ }
129
+
130
+ label {
131
+ display: block;
132
+ margin-bottom: 8px;
133
+ font-weight: 600;
134
+ color: var(--text);
135
+ }
136
+
137
+ input, select, textarea {
138
+ width: 100%;
139
+ padding: 12px 16px;
140
+ border: 2px solid #e2e8f0;
141
+ border-radius: 10px;
142
+ font-size: 1em;
143
+ transition: border-color 0.3s ease;
144
+ }
145
+
146
+ input:focus, select:focus, textarea:focus {
147
+ outline: none;
148
+ border-color: var(--primary);
149
+ }
150
+
151
+ textarea {
152
+ resize: vertical;
153
+ min-height: 100px;
154
+ }
155
+
156
+ .btn {
157
+ padding: 15px 30px;
158
+ border: none;
159
+ border-radius: 10px;
160
+ font-size: 1.1em;
161
+ font-weight: 600;
162
+ cursor: pointer;
163
+ transition: all 0.3s ease;
164
+ display: inline-flex;
165
+ align-items: center;
166
+ gap: 10px;
167
+ }
168
+
169
+ .btn-primary {
170
+ background: var(--primary);
171
+ color: white;
172
+ }
173
+
174
+ .btn-primary:hover {
175
+ background: var(--primary-dark);
176
+ transform: translateY(-2px);
177
+ }
178
+
179
+ .output-grid {
180
+ display: grid;
181
+ grid-template-columns: 1fr 1fr;
182
+ gap: 30px;
183
+ margin-top: 30px;
184
+ }
185
+
186
+ .output-box {
187
+ background: var(--surface);
188
+ border: 1px solid #e2e8f0;
189
+ border-radius: 15px;
190
+ padding: 25px;
191
+ min-height: 400px;
192
+ max-height: 600px;
193
+ overflow-y: auto;
194
+ }
195
+
196
+ .output-box h3 {
197
+ margin-bottom: 15px;
198
+ color: var(--primary);
199
+ display: flex;
200
+ align-items: center;
201
+ gap: 10px;
202
+ }
203
+
204
+ .resume-content {
205
+ line-height: 1.6;
206
+ }
207
+
208
+ .resume-content h1 {
209
+ color: var(--primary);
210
+ border-bottom: 3px solid var(--primary);
211
+ padding-bottom: 10px;
212
+ margin-bottom: 20px;
213
+ }
214
+
215
+ .match-score {
216
+ font-size: 2em;
217
+ font-weight: bold;
218
+ text-align: center;
219
+ margin: 20px 0;
220
+ padding: 20px;
221
+ border-radius: 10px;
222
+ background: linear-gradient(135deg, var(--success), #34d399);
223
+ color: white;
224
+ }
225
+
226
+ .action-buttons {
227
+ display: flex;
228
+ gap: 15px;
229
+ margin-top: 20px;
230
+ flex-wrap: wrap;
231
+ }
232
+
233
+ .question-item {
234
+ background: #f8fafc;
235
+ padding: 15px;
236
+ margin: 10px 0;
237
+ border-radius: 10px;
238
+ border-left: 4px solid var(--primary);
239
+ }
240
+
241
+ .skill-category {
242
+ margin: 20px 0;
243
+ padding: 15px;
244
+ background: #f0f9ff;
245
+ border-radius: 10px;
246
+ }
247
+
248
+ .salary-breakdown {
249
+ display: grid;
250
+ grid-template-columns: repeat(3, 1fr);
251
+ gap: 15px;
252
+ margin: 20px 0;
253
+ }
254
+
255
+ .salary-item {
256
+ text-align: center;
257
+ padding: 15px;
258
+ background: #f8fafc;
259
+ border-radius: 10px;
260
+ }
261
+
262
+ .salary-value {
263
+ font-size: 1.5em;
264
+ font-weight: bold;
265
+ color: var(--primary);
266
+ }
267
+
268
+ @media (max-width: 768px) {
269
+ .form-grid, .output-grid {
270
+ grid-template-columns: 1fr;
271
+ }
272
+ .salary-breakdown {
273
+ grid-template-columns: 1fr;
274
+ }
275
+ }
276
+ </style>
277
+ </head>
278
+ <body>
279
+ <div class="container">
280
+ <div class="header">
281
+ <h1>πŸš€ CareerForge AI</h1>
282
+ <p>Your All-in-One Intelligent Career Platform</p>
283
+
284
+ <!-- API Configuration -->
285
+ <div style="margin-top: 25px; background: rgba(255,255,255,0.1); padding: 15px; border-radius: 10px; max-width: 700px; margin-left: auto; margin-right: auto;">
286
+ <div style="font-size: 0.95em; opacity: 0.95; line-height: 1.5; text-align: center;">
287
+ πŸ’‘ This platform is powered by AI. All features are now active.
288
+ <span id="api-status" style="font-size: 1.2em; margin-left: 10px;">βšͺ</span>
289
+ </div>
290
+ </div>
291
+ </div>
292
+
293
+ <div class="tabs">
294
+ <button class="tab-button active" onclick="openTab('resume-tab')">🎯 Smart Resume</button>
295
+ <button class="tab-button" onclick="openTab('interview-tab')">πŸ’Ό Interview Coach</button>
296
+ <button class="tab-button" onclick="openTab('skills-tab')">πŸ“š Learning Path</button>
297
+ <button class="tab-button" onclick="openTab('coverletter-tab')">βœ‰οΈ Cover Letters</button>
298
+ <button class="tab-button" onclick="openTab('linkedin-tab')">πŸ’Ό LinkedIn</button>
299
+ <button class="tab-button" onclick="openTab('salary-tab')">πŸ’° Salary Intel</button>
300
+ </div>
301
+
302
+ <!-- Resume Optimizer Tab -->
303
+ <div id="resume-tab" class="tab-content active">
304
+ <div class="form-grid">
305
+ <div class="form-section">
306
+ <h3>πŸ‘€ Your Profile</h3>
307
+ <div class="form-group">
308
+ <label for="name">Full Name</label>
309
+ <input type="text" id="name" placeholder="John Doe">
310
+ </div>
311
+ <div class="form-group">
312
+ <label for="current-role">Current Role</label>
313
+ <input type="text" id="current-role" placeholder="Software Developer">
314
+ </div>
315
+ <div class="form-group">
316
+ <label for="experience">Years of Experience</label>
317
+ <input type="number" id="experience" placeholder="5">
318
+ </div>
319
+ <div class="form-group">
320
+ <label for="skills">Skills (comma separated)</label>
321
+ <textarea id="skills" placeholder="Python, Project Management, Data Analysis..."></textarea>
322
+ </div>
323
+ </div>
324
+
325
+ <div class="form-section">
326
+ <h3>🎯 Target Opportunity</h3>
327
+ <div class="form-group">
328
+ <label for="job-title">Desired Job Title</label>
329
+ <input type="text" id="job-title" placeholder="Senior Software Engineer">
330
+ </div>
331
+ <div class="form-group">
332
+ <label for="job-description">Job Description</label>
333
+ <textarea id="job-description" placeholder="Paste the job description here..."></textarea>
334
+ </div>
335
+ <div class="form-group">
336
+ <label for="company-name">Company Name</label>
337
+ <input type="text" id="company-name" placeholder="Tech Company Inc.">
338
+ </div>
339
+ </div>
340
+ </div>
341
+
342
+ <button class="btn btn-primary" onclick="generateResume()">πŸš€ Generate Optimized Resume</button>
343
+
344
+ <div class="output-grid">
345
+ <div class="output-box">
346
+ <h3>πŸ“„ AI-Optimized Resume</h3>
347
+ <div id="resume-output" class="resume-content"></div>
348
+ </div>
349
+ <div class="output-box">
350
+ <h3>πŸ“Š Matching Analysis</h3>
351
+ <div id="analysis-output"></div>
352
+ </div>
353
+ </div>
354
+
355
+ <div class="action-buttons">
356
+ <button class="btn btn-success" onclick="exportToPDF()">πŸ“₯ Export as PDF</button>
357
+ <button class="btn btn-secondary" onclick="copyToClipboard('resume-output')">πŸ“‹ Copy Text</button>
358
+ </div>
359
+ </div>
360
+
361
+ <!-- Interview Coach Tab -->
362
+ <div id="interview-tab" class="tab-content">
363
+ <div class="form-grid">
364
+ <div class="form-section">
365
+ <h3>🎯 Interview Setup</h3>
366
+ <div class="form-group">
367
+ <label for="interview-role">Target Role</label>
368
+ <input type="text" id="interview-role" placeholder="Senior Developer">
369
+ </div>
370
+ <div class="form-group">
371
+ <label for="interview-level">Experience Level</label>
372
+ <select id="interview-level">
373
+ <option value="entry">Entry Level</option>
374
+ <option value="mid">Mid Level</option>
375
+ <option value="senior">Senior Level</option>
376
+ <option value="lead">Lead/Manager</option>
377
+ </select>
378
+ </div>
379
+ <div class="form-group">
380
+ <label for="interview-skills">Key Skills to Test</label>
381
+ <textarea id="interview-skills" placeholder="Python, System Design, Leadership..."></textarea>
382
+ </div>
383
+ <button class="btn btn-primary" onclick="generateInterviewQuestions()">🎯 Generate Questions</button>
384
+ </div>
385
+
386
+ <div class="form-section">
387
+ <h3>πŸ’‘ Interview Results</h3>
388
+ <div id="interview-output"></div>
389
+ </div>
390
+ </div>
391
+ </div>
392
+
393
+ <!-- Learning Path Tab -->
394
+ <div id="skills-tab" class="tab-content">
395
+ <div class="form-grid">
396
+ <div class="form-section">
397
+ <h3>πŸ“š Skill Assessment</h3>
398
+ <div class="form-group">
399
+ <label for="current-skills">Current Skills</label>
400
+ <textarea id="current-skills" placeholder="List your current skills..."></textarea>
401
+ </div>
402
+ <div class="form-group">
403
+ <label for="target-role-learning">Target Role</label>
404
+ <input type="text" id="target-role-learning" placeholder="AI Engineer">
405
+ </div>
406
+ <div class="form-group">
407
+ <label for="timeline">Learning Timeline</label>
408
+ <select id="timeline">
409
+ <option value="3">3 months</option>
410
+ <option value="6">6 months</option>
411
+ <option value="12">1 year</option>
412
+ </select>
413
+ </div>
414
+ <button class="btn btn-primary" onclick="generateLearningPath()">πŸ› οΈ Create Learning Path</button>
415
+ </div>
416
+
417
+ <div class="form-section">
418
+ <h3>🎯 Personalized Roadmap</h3>
419
+ <div id="learning-output"></div>
420
+ </div>
421
+ </div>
422
+ </div>
423
+
424
+ <!-- Cover Letter Tab -->
425
+ <div id="coverletter-tab" class="tab-content">
426
+ <div class="form-grid">
427
+ <div class="form-section">
428
+ <h3>βœ‰οΈ Letter Details</h3>
429
+ <div class="form-group">
430
+ <label for="cl-company">Company Name</label>
431
+ <input type="text" id="cl-company" placeholder="Tech Innovations Inc.">
432
+ </div>
433
+ <div class="form-group">
434
+ <label for="cl-role">Job Title</label>
435
+ <input type="text" id="cl-role" placeholder="Senior Developer">
436
+ </div>
437
+ <div class="form-group">
438
+ <label for="cl-highlight">Key Achievement to Highlight</label>
439
+ <textarea id="cl-highlight" placeholder="Describe your most relevant achievement..."></textarea>
440
+ </div>
441
+ <div class="form-group">
442
+ <label for="cl-tone">Writing Tone</label>
443
+ <select id="cl-tone">
444
+ <option value="professional">Professional</option>
445
+ <option value="enthusiastic">Enthusiastic</option>
446
+ <option value="formal">Formal</option>
447
+ </select>
448
+ </div>
449
+ <button class="btn btn-primary" onclick="generateCoverLetter()">✨ Generate Cover Letter</button>
450
+ </div>
451
+
452
+ <div class="form-section">
453
+ <h3>πŸ“ Custom Cover Letter</h3>
454
+ <div id="coverletter-output"></div>
455
+ </div>
456
+ </div>
457
+ </div>
458
+
459
+ <!-- LinkedIn Optimizer Tab -->
460
+ <div id="linkedin-tab" class="tab-content">
461
+ <div class="form-grid">
462
+ <div class="form-section">
463
+ <h3>πŸ’Ό Profile Information</h3>
464
+ <div class="form-group">
465
+ <label for="li-headline">Current Headline</label>
466
+ <input type="text" id="li-headline" placeholder="Software Developer at Current Company">
467
+ </div>
468
+ <div class="form-group">
469
+ <label for="li-about">Current About Section</label>
470
+ <textarea id="li-about" placeholder="Your current LinkedIn summary..."></textarea>
471
+ </div>
472
+ <div class="form-group">
473
+ <label for="li-target">Target Industry/Roles</label>
474
+ <input type="text" id="li-target" placeholder="AI Engineering, Tech Leadership">
475
+ </div>
476
+ <button class="btn btn-primary" onclick="optimizeLinkedIn()">πŸš€ Optimize Profile</button>
477
+ </div>
478
+
479
+ <div class="form-section">
480
+ <h3>🎯 Optimized Results</h3>
481
+ <div id="linkedin-output"></div>
482
+ </div>
483
+ </div>
484
+ </div>
485
+
486
+ <!-- Salary Intelligence Tab -->
487
+ <div id="salary-tab" class="tab-content">
488
+ <div class="form-grid">
489
+ <div class="form-section">
490
+ <h3>πŸ’° Salary Research</h3>
491
+ <div class="form-group">
492
+ <label for="salary-role">Job Title</label>
493
+ <input type="text" id="salary-role" placeholder="Senior Software Engineer">
494
+ </div>
495
+ <div class="form-group">
496
+ <label for="salary-location">Location</label>
497
+ <input type="text" id="salary-location" placeholder="San Francisco, CA or Remote">
498
+ </div>
499
+ <div class="form-group">
500
+ <label for="salary-experience">Years of Experience</label>
501
+ <input type="number" id="salary-experience" placeholder="5">
502
+ </div>
503
+ <div class="form-group">
504
+ <label for="salary-company">Company Size</label>
505
+ <select id="salary-company">
506
+ <option value="startup">Startup (1-50)</option>
507
+ <option value="small">Small (51-200)</option>
508
+ <option value="medium">Medium (201-1000)</option>
509
+ <option value="large">Large (1001-5000)</option>
510
+ <option value="enterprise">Enterprise (5000+)</option>
511
+ </select>
512
+ </div>
513
+ <button class="btn btn-primary" onclick="analyzeSalary()">πŸ’‘ Get Salary Insights</button>
514
+ </div>
515
+
516
+ <div class="form-section">
517
+ <h3>πŸ“Š Market Intelligence</h3>
518
+ <div id="salary-output"></div>
519
+ </div>
520
+ </div>
521
+ </div>
522
+ </div>
523
+
524
+ <script>
525
+ // Career Database - Real data for all functionalities
526
+ const careerDatabase = {
527
+ skillsRoadmaps: {
528
+ 'AI Engineer': {
529
+ foundation: ['Python Programming', 'Linear Algebra', 'Statistics & Probability', 'Data Structures'],
530
+ intermediate: ['Machine Learning Fundamentals', 'Deep Learning', 'Data Preprocessing', 'Model Evaluation'],
531
+ advanced: ['Neural Networks', 'Natural Language Processing', 'Computer Vision', 'Reinforcement Learning'],
532
+ tools: ['TensorFlow', 'PyTorch', 'scikit-learn', 'Keras', 'OpenCV'],
533
+ projects: ['Sentiment Analysis Model', 'Image Classification System', 'Recommendation Engine']
534
+ },
535
+ 'Full Stack Developer': {
536
+ foundation: ['HTML/CSS/JavaScript', 'Git Version Control', 'Basic Algorithms', 'Responsive Design'],
537
+ intermediate: ['React/Vue.js', 'Node.js/Express', 'Database Design', 'RESTful APIs'],
538
+ advanced: ['System Design', 'DevOps & CI/CD', 'Cloud Services (AWS/Azure)', 'Microservices'],
539
+ tools: ['Docker', 'MongoDB/PostgreSQL', 'AWS Services', 'Jenkins'],
540
+ projects: ['E-commerce Platform', 'Social Media App', 'Real-time Chat Application']
541
+ },
542
+ 'Data Scientist': {
543
+ foundation: ['Python/R Programming', 'SQL Databases', 'Statistics', 'Data Visualization'],
544
+ intermediate: ['Machine Learning', 'Experimental Design', 'Feature Engineering', 'Data Wrangling'],
545
+ advanced: ['Big Data Technologies', 'Advanced ML Models', 'Business Intelligence', 'MLOps'],
546
+ tools: ['Pandas/NumPy', 'Tableau/PowerBI', 'Apache Spark', 'Jupyter Notebooks'],
547
+ projects: ['Predictive Analytics Model', 'Customer Segmentation', 'Sales Forecasting']
548
+ },
549
+ 'Product Manager': {
550
+ foundation: ['Market Research', 'User Stories', 'Agile Methodology', 'Basic Analytics'],
551
+ intermediate: ['Product Strategy', 'Roadmap Planning', 'Stakeholder Management', 'A/B Testing'],
552
+ advanced: ['Go-to-Market Strategy', 'Product Metrics', 'Team Leadership', 'Business Case Development'],
553
+ tools: ['Jira/Asana', 'Figma', 'Google Analytics', 'SQL for PMs'],
554
+ projects: ['Product Launch Plan', 'Feature Prioritization Framework', 'User Research Report']
555
+ }
556
+ },
557
+
558
+ interviewQuestions: {
559
+ technical: {
560
+ entry: [
561
+ "Explain the difference between let, const, and var in JavaScript",
562
+ "What is a REST API and how does it work?",
563
+ "Describe your experience with version control systems like Git",
564
+ "How would you approach debugging a software issue?"
565
+ ],
566
+ mid: [
567
+ "Explain system design principles for a scalable application",
568
+ "How do you ensure code quality and maintainability?",
569
+ "Describe your experience with database optimization",
570
+ "What's your approach to testing and test-driven development?"
571
+ ],
572
+ senior: [
573
+ "Design a system that handles 1 million concurrent users",
574
+ "How do you mentor junior developers and improve team processes?",
575
+ "Explain your strategy for technical debt management",
576
+ "Describe a complex technical challenge you solved and your approach"
577
+ ],
578
+ lead: [
579
+ "How do you align technical strategy with business goals?",
580
+ "Describe your experience building and leading engineering teams",
581
+ "What's your approach to incident management and post-mortems?",
582
+ "How do you handle technical disagreements within your team?"
583
+ ]
584
+ },
585
+ behavioral: [
586
+ "Tell me about a time you faced a significant challenge and how you overcame it",
587
+ "Describe a situation where you had to work with a difficult team member",
588
+ "How do you handle tight deadlines and competing priorities?",
589
+ "Share an example of a project failure and what you learned from it"
590
+ ]
591
+ },
592
+
593
+ salaryData: {
594
+ 'Software Engineer': { base: 120000, bonus: 0.15, equity: 0.10 },
595
+ 'Senior Software Engineer': { base: 150000, bonus: 0.20, equity: 0.15 },
596
+ 'Data Scientist': { base: 130000, bonus: 0.15, equity: 0.12 },
597
+ 'AI Engineer': { base: 160000, bonus: 0.20, equity: 0.18 },
598
+ 'Product Manager': { base: 140000, bonus: 0.25, equity: 0.15 },
599
+ 'Full Stack Developer': { base: 125000, bonus: 0.15, equity: 0.10 }
600
+ },
601
+
602
+ locationMultipliers: {
603
+ 'San Francisco, CA': 1.4,
604
+ 'New York, NY': 1.35,
605
+ 'Seattle, WA': 1.25,
606
+ 'Boston, MA': 1.2,
607
+ 'Austin, TX': 1.1,
608
+ 'Remote': 0.95,
609
+ 'Default': 1.0
610
+ },
611
+
612
+ companyMultipliers: {
613
+ 'startup': { base: 0.9, equity: 2.0 },
614
+ 'small': { base: 1.0, equity: 1.5 },
615
+ 'medium': { base: 1.1, equity: 1.2 },
616
+ 'large': { base: 1.2, equity: 1.0 },
617
+ 'enterprise': { base: 1.3, equity: 0.8 }
618
+ }
619
+ };
620
+
621
+ // Tab navigation
622
+ function openTab(tabName) {
623
+ const tabContents = document.getElementsByClassName('tab-content');
624
+ const tabButtons = document.getElementsByClassName('tab-button');
625
+
626
+ for (let i = 0; i < tabContents.length; i++) {
627
+ tabContents[i].classList.remove('active');
628
+ tabButtons[i].classList.remove('active');
629
+ }
630
+
631
+ document.getElementById(tabName).classList.add('active');
632
+ event.currentTarget.classList.add('active');
633
+ }
634
+
635
+ // 1. RESUME OPTIMIZER - ACTUAL FUNCTIONALITY
636
+ async function generateResume() {
637
+ const name = document.getElementById('name').value || 'Your Name';
638
+ const currentRole = document.getElementById('current-role').value || 'Professional';
639
+ const experience = document.getElementById('experience').value || '3';
640
+ const skills = document.getElementById('skills').value || 'Various skills';
641
+ const jobTitle = document.getElementById('job-title').value || 'Target Role';
642
+ const company = document.getElementById('company-name').value || 'Target Company';
643
+ const jobDescription = document.getElementById('job-description').value;
644
+
645
+ // Show loading state
646
+ const resumeOutput = document.getElementById('resume-output');
647
+ const analysisOutput = document.getElementById('analysis-output');
648
+ resumeOutput.innerHTML = '<p>πŸš€ Generating AI-Optimized Resume...</p>';
649
+ analysisOutput.innerHTML = '<p>πŸ“Š Analyzing your profile against the job...</p>';
650
+
651
+ // Construct the prompt for the LLM
652
+ const prompt = `Based on the following information, generate an optimized resume and a matching analysis:
653
+
654
+ **User Profile:**
655
+ - Name: ${name}
656
+ - Current Position: ${currentRole}
657
+ - Years of Experience: ${experience} years
658
+ - Skills: ${skills}
659
+
660
+ **Target Position:**
661
+ - Job Title: ${jobTitle}
662
+ - Company Name: ${company}
663
+ - Job Description: ${jobDescription}
664
+
665
+ Please return a JSON object strictly containing two keys:
666
+ 1. "resume" - The complete resume content (in HTML format), including:
667
+ - Professional Summary (highlighting the match with the position)
668
+ - Core Skills (sorted by importance)
669
+ - Work Experience (can generate examples based on common experience, emphasizing achievements relevant to the target position)
670
+ - Education
671
+
672
+ 2. "analysis" - The matching analysis (in HTML format), including:
673
+ - A match score (0-100%) displayed in a styled div
674
+ - A list of matched skills
675
+ - 3-5 specific suggestions for improvement
676
+
677
+ JSON format example:
678
+ {
679
+ "resume": "<h1>Name</h1><h2>Professional Summary</h2><p>...</p>",
680
+ "analysis": "<div class='match-score' style='...'>85%</div><h3>Matched Skills</h3>..."
681
+ }`;
682
+
683
+ const systemPrompt = 'You are a professional career consultant and resume expert. Please strictly follow the JSON format for the response, ensuring the HTML is well-formed and professional.';
684
+
685
+ try {
686
+ // Call the LLM API
687
+ const aiReply = await callLLM(prompt, systemPrompt);
688
+ const llmResponse = parseAIResponse(aiReply);
689
+
690
+ if (llmResponse && llmResponse.resume && llmResponse.analysis) {
691
+ resumeOutput.innerHTML = llmResponse.resume;
692
+ analysisOutput.innerHTML = llmResponse.analysis;
693
+ } else {
694
+ // ε¦‚ζžœθ§£ζžε€±θ΄₯οΌŒη›΄ζŽ₯显瀺 AI ηš„ε›žε€
695
+ resumeOutput.innerHTML = `<div style="line-height: 1.6;">${aiReply.replace(/\n/g, '<br>')}</div>`;
696
+ analysisOutput.innerHTML = '<p>βœ… Resume generated (format may need adjustment)</p>';
697
+ }
698
+ } catch (error) {
699
+ resumeOutput.innerHTML = '<p style="color: red;">❌ Generation failed, please check API configuration</p>';
700
+ analysisOutput.innerHTML = '<p style="color: red;">❌ Generation failed</p>';
701
+ }
702
+ }
703
+
704
+ // 2. INTERVIEW COACH - AI-POWERED FUNCTIONALITY
705
+ async function generateInterviewQuestions() {
706
+ const role = document.getElementById('interview-role').value || 'Developer';
707
+ const level = document.getElementById('interview-level').value;
708
+ const skills = document.getElementById('interview-skills').value || 'Relevant Skills';
709
+
710
+ const levelText = {
711
+ 'entry': 'Entry Level',
712
+ 'mid': 'Mid Level',
713
+ 'senior': 'Senior Level',
714
+ 'lead': 'Lead/Manager'
715
+ }[level];
716
+
717
+ const outputDiv = document.getElementById('interview-output');
718
+ outputDiv.innerHTML = '<p>πŸ€” AI is generating customized interview questions for you...</p>';
719
+
720
+ const prompt = `As a senior interviewer and career consultant, generate comprehensive interview preparation materials for the following position:
721
+
722
+ **Position Information:**
723
+ - Position: ${role}
724
+ - Level: ${levelText}
725
+ - Key Skills: ${skills}
726
+
727
+ Please generate the following content (using HTML format):
728
+
729
+ 1. **Technical Interview Questions** (8-10 questions)
730
+ - Technical depth appropriate for the position level
731
+ - Covering the listed key skills
732
+ - Including system design, algorithms, best practices, etc.
733
+
734
+ 2. **Behavioral Interview Questions** (5-6 questions)
735
+ - Questions suitable for the STAR method
736
+ - Targeting leadership/collaboration skills for this level
737
+ - Scenarios for conflict resolution and challenges
738
+
739
+ 3. **For each question, provide:**
740
+ - The question itself
741
+ - The competencies the interviewer wants to assess
742
+ - Answering strategy/key points (brief)
743
+
744
+ 4. **Interview Preparation Advice**
745
+ - Key preparation points for this position
746
+ - Explanation of the STAR method
747
+ - 3-5 practical tips
748
+
749
+ Please use the following HTML structure:
750
+ - Use <div class="skill-category"> to wrap each major category
751
+ - Use <div class="question-item"> to wrap each question
752
+ - Use <div class="tips"> to wrap preparation advice`;
753
+
754
+ const systemPrompt = 'You are an experienced interviewer and career mentor, skilled at designing in-depth interview questions. Please provide practical, professional interview preparation materials.';
755
+
756
+ try {
757
+ const aiReply = await callLLM(prompt, systemPrompt);
758
+ // η›΄ζŽ₯使用 AI θΏ”ε›žηš„ HTML
759
+ outputDiv.innerHTML = aiReply;
760
+ } catch (error) {
761
+ outputDiv.innerHTML = '<p style="color: red;">❌ Generation failed, please check API configuration</p>';
762
+ }
763
+ }
764
+
765
+ // 3. LEARNING PATH - AI-POWERED FUNCTIONALITY
766
+ async function generateLearningPath() {
767
+ const currentSkills = document.getElementById('current-skills').value || 'Basic Skills';
768
+ const targetRole = document.getElementById('target-role-learning').value || 'Full Stack Developer';
769
+ const timeline = parseInt(document.getElementById('timeline').value);
770
+
771
+ const outputDiv = document.getElementById('learning-output');
772
+ outputDiv.innerHTML = '<p>πŸ“š AI is planning a personalized learning path for you...</p>';
773
+
774
+ const prompt = `As a senior career mentor and skill development expert, create a detailed learning path for the following situation:
775
+
776
+ **Current Status:**
777
+ - Existing Skills: ${currentSkills}
778
+ - Target Position: ${targetRole}
779
+ - Learning Timeline: ${timeline} months
780
+
781
+ Please generate a detailed learning path plan (in HTML format), including:
782
+
783
+ 1. **Skill Gap Analysis**
784
+ - Skills already possessed (mark with βœ…)
785
+ - Skills that need to be learned (mark with πŸ“š)
786
+ - Prioritization of skills
787
+
788
+ 2. **Phased Learning Plan**
789
+ Divided into 3 phases over ${timeline} months:
790
+ - **Foundation Phase** (first ${Math.floor(timeline/3)} months): Essential basic knowledge and tools
791
+ - **Intermediate Phase** (middle ${Math.floor(timeline/3)} months): Deepening core skills
792
+ - **Advanced Phase** (last ${Math.ceil(timeline/3)} months): Advanced skills and project practice
793
+
794
+ Each phase includes:
795
+ - Specific learning content
796
+ - Recommended types of learning resources
797
+ - Time allocation suggestions
798
+
799
+ 3. **Practical Project Suggestions**
800
+ - 3-5 progressive projects
801
+ - Skill application points for each project
802
+ - Increasing project difficulty
803
+
804
+ 4. **Learning Resource Recommendations**
805
+ - Online course platforms
806
+ - Book recommendations
807
+ - Practice platforms
808
+
809
+ 5. **Weekly Learning Plan**
810
+ - Suggested weekly study hours
811
+ - Learning methods (theory vs. practice ratio)
812
+ - Milestone checkpoints
813
+
814
+ Please use the following HTML structure:
815
+ - <div class="skill-category"> to wrap each learning phase
816
+ - Use colored divs to mark skill status: #d1fae5 for mastered, #fef3c7 for to-learn
817
+ - <div class="tips"> to wrap learning advice and resources`;
818
+
819
+ const systemPrompt = 'You are an experienced career mentor and learning planner, skilled at creating personalized, actionable learning paths. Please ensure the advice is specific and actionable.';
820
+
821
+ try {
822
+ const aiReply = await callLLM(prompt, systemPrompt);
823
+ outputDiv.innerHTML = aiReply;
824
+ } catch (error) {
825
+ outputDiv.innerHTML = '<p style="color: red;">❌ Generation failed, please check API configuration</p>';
826
+ }
827
+ }
828
+
829
+ // 4. COVER LETTER GENERATOR - AI-POWERED FUNCTIONALITY
830
+ async function generateCoverLetter() {
831
+ const company = document.getElementById('cl-company').value || 'Target Company';
832
+ const role = document.getElementById('cl-role').value || 'Target Role';
833
+ const achievement = document.getElementById('cl-highlight').value || 'My work experience and achievements';
834
+ const tone = document.getElementById('cl-tone').value;
835
+
836
+ const toneText = {
837
+ 'professional': 'Professional',
838
+ 'enthusiastic': 'Enthusiastic',
839
+ 'formal': 'Formal'
840
+ }[tone];
841
+
842
+ const outputDiv = document.getElementById('coverletter-output');
843
+ outputDiv.innerHTML = '<p>✍️ AI is writing a personalized cover letter for you...</p>';
844
+
845
+ const prompt = `As a professional cover letter writing expert, write a high-quality cover letter for the following job application scenario:
846
+
847
+ **Application Information:**
848
+ - Target Company: ${company}
849
+ - Position Applied For: ${role}
850
+ - Core Achievement: ${achievement}
851
+ - Writing Style: ${toneText}
852
+
853
+ Please generate a complete cover letter (in HTML format), including:
854
+
855
+ 1. **Salutation** (choose an appropriate opening based on the style)
856
+
857
+ 2. **Opening Paragraph**
858
+ - Express interest in the position
859
+ - Briefly explain why you are applying
860
+ - Reflect the ${toneText} style
861
+
862
+ 3. **Body Paragraphs** (2-3 paragraphs)
863
+ - First paragraph: Elaborate on the core achievement, supported by specific data and results
864
+ - Second paragraph: Explain why you are a good fit for ${company} and ${role}
865
+ - Third paragraph (optional): Show your knowledge and appreciation of the company
866
+
867
+ 4. **Closing Paragraph**
868
+ - Reiterate your interest and value
869
+ - Politely request an interview opportunity
870
+ - Thank the reader
871
+
872
+ 5. **Signature**
873
+ - Include a polite closing
874
+ - Placeholders for [Name], [Phone], [Email]
875
+
876
+ 6. **Customization Suggestions**
877
+ After the cover letter, add a <div class="tips"> containing 3-5 specific optimization suggestions
878
+
879
+ Note:
880
+ - Use <p> tags for paragraphs
881
+ - Line height 1.8, font Arial
882
+ - Maintain a consistent ${toneText} tone
883
+ - Avoid being too generic, be as specific as possible
884
+ - Keep the length moderate (300-400 words)`;
885
+
886
+ const systemPrompt = 'You are an experienced career consultant and expert cover letter writer. Please write a professional, persuasive, and personalized cover letter.';
887
+
888
+ try {
889
+ const aiReply = await callLLM(prompt, systemPrompt);
890
+ outputDiv.innerHTML = aiReply;
891
+ } catch (error) {
892
+ outputDiv.innerHTML = '<p style="color: red;">❌ Generation failed, please check API configuration</p>';
893
+ }
894
+ }
895
+
896
+ // 5. LINKEDIN OPTIMIZER - AI-POWERED FUNCTIONALITY
897
+ async function optimizeLinkedIn() {
898
+ const headline = document.getElementById('li-headline').value || 'Current Professional';
899
+ const about = document.getElementById('li-about').value || 'Experienced professional seeking new opportunities';
900
+ const target = document.getElementById('li-target').value || 'Technology field';
901
+
902
+ const outputDiv = document.getElementById('linkedin-output');
903
+ outputDiv.innerHTML = '<p>πŸ’Ό AI is optimizing your LinkedIn profile...</p>';
904
+
905
+ const prompt = `As a LinkedIn profile optimization expert and personal branding consultant, optimize the following LinkedIn profile:
906
+
907
+ **Current Profile:**
908
+ - Current Headline: ${headline}
909
+ - Current About Section: ${about}
910
+ - Target Industry/Roles: ${target}
911
+
912
+ Please generate an optimized LinkedIn profile (in HTML format), including:
913
+
914
+ 1. **Optimized Headline**
915
+ - Include job title, professional field, key skills
916
+ - Use | or β€’ as separators
917
+ - Make full use of the 220-character limit
918
+ - Include search keywords
919
+ - Display in <div class="question-item" style="font-size: 1.1em; font-weight: bold;">
920
+
921
+ 2. **Optimized About Section**
922
+ - Opening: An engaging self-introduction
923
+ - Core Competencies: 3-5 professional areas
924
+ - Skills List: Categorized (core competencies, technical skills, etc.)
925
+ - Career Highlights: 2-3 quantifiable achievements
926
+ - Closing: Open to opportunities and contact information
927
+ - Use <p> and <strong> tags
928
+ - Line height 1.6
929
+
930
+ 3. **Recommended Hashtags**
931
+ - 8-10 relevant industry hashtags
932
+ - Format: #hashtag
933
+
934
+ 4. **Optimization Suggestions**
935
+ Use <div class="tips"> to include:
936
+ - Suggestions for optimizing the skills section
937
+ - Content publishing strategy
938
+ - Networking expansion advice
939
+ - 5-7 practical tips
940
+
941
+ Note:
942
+ - Emphasize keywords related to ${target}
943
+ - Use industry-specific professional terminology
944
+ - Reflect personal brand and value
945
+ - SEO-friendly (to be easily found by search)
946
+ `;
947
+
948
+ const systemPrompt = 'You are a LinkedIn optimization expert and personal branding consultant, skilled at creating professional and attractive LinkedIn profiles.';
949
+
950
+ try {
951
+ const aiReply = await callLLM(prompt, systemPrompt);
952
+ outputDiv.innerHTML = aiReply;
953
+ } catch (error) {
954
+ outputDiv.innerHTML = '<p style="color: red;">❌ Generation failed, please check API configuration</p>';
955
+ }
956
+ }
957
+
958
+ // 6. SALARY INTELLIGENCE - AI-ENHANCED FUNCTIONALITY
959
+ async function analyzeSalary() {
960
+ const role = document.getElementById('salary-role').value || 'Software Engineer';
961
+ const location = document.getElementById('salary-location').value || 'San Francisco, CA';
962
+ const experience = parseInt(document.getElementById('salary-experience').value) || 3;
963
+ const companySize = document.getElementById('salary-company').value;
964
+
965
+ const outputDiv = document.getElementById('salary-output');
966
+ outputDiv.innerHTML = '<p>πŸ’° AI is analyzing market salary data...</p>';
967
+
968
+ const companySizeText = {
969
+ 'startup': 'Startup (1-50 employees)',
970
+ 'small': 'Small (51-200 employees)',
971
+ 'medium': 'Medium (201-1000 employees)',
972
+ 'large': 'Large (1001-5000 employees)',
973
+ 'enterprise': 'Enterprise (5000+ employees)'
974
+ }[companySize];
975
+
976
+ const prompt = `As a salary negotiation expert and market analyst, analyze the salary for the following position:
977
+
978
+ **Position Information:**
979
+ - Job Title: ${role}
980
+ - Location: ${location}
981
+ - Years of Experience: ${experience} years
982
+ - Company Size: ${companySizeText}
983
+
984
+ Please provide a detailed salary analysis report (in HTML format), including:
985
+
986
+ 1. **Salary Estimation**
987
+ Create 3 <div class="salary-item"> cards showing:
988
+ - Base Salary (annual range: low-average-high)
989
+ - Annual Bonus (as a percentage of base salary)
990
+ - Equity/RSUs (estimated value vesting over 4 years)
991
+
992
+ Each card format:
993
+ \
994
+ <div class="salary-item">
995
+ <div class="salary-value">$XXX,XXX</div>
996
+ <div>Item Name</div>
997
+ <small>Additional Info</small>
998
+ </div>
999
+ \
1000
+
1001
+ 2. **Total Compensation**
1002
+ Display using the following style:
1003
+ \
1004
+ <div class="match-score" style="background: linear-gradient(135deg, #f59e0b, #fbbf24);">
1005
+ Total Compensation: $XXX,XXX/year
1006
+ </div>
1007
+ \
1008
+
1009
+ 3. **Market Positioning Analysis**
1010
+ Include in a <div class="skill-category">:
1011
+ - Geographic Impact (${location} compared to national average)
1012
+ - Experience Premium (${experience} years vs. new graduate)
1013
+ - Company Size Impact (trade-off between base salary vs. equity)
1014
+ - Industry Comparison
1015
+
1016
+ 4. **Negotiation Strategy**
1017
+ Provide in a <div class="tips">:
1018
+ - Target salary range (considering a 10-15% negotiation buffer)
1019
+ - Equity negotiation advice
1020
+ - Benefits considerations
1021
+ - 5-7 practical negotiation tips
1022
+ - Market trend insights
1023
+
1024
+ Notes:
1025
+ - All amounts should use USD ($) and thousand separators
1026
+ - Salary data should be current for 2024-2025 market conditions
1027
+ - Consider the cost of living in ${location}
1028
+ - Differentiate salary structures for different company sizes
1029
+ - The advice given should be specific and actionable
1030
+
1031
+ Add a title before the salary cards:
1032
+ <h4>πŸ’° Salary Analysis: ${role}</h4>
1033
+ <div class="salary-breakdown">
1034
+ [three salary-item cards]
1035
+ </div>`;
1036
+
1037
+ const systemPrompt = 'You are a salary negotiation expert and market analyst, specializing in the tech industry compensation structure. Please provide accurate, practical salary analysis and negotiation advice.';
1038
+
1039
+
1040
+ try {
1041
+ const aiReply = await callLLM(prompt, systemPrompt);
1042
+ outputDiv.innerHTML = aiReply;
1043
+ } catch (error) {
1044
+ outputDiv.innerHTML = '<p style="color: red;">❌ Generation failed, please check API configuration</p>';
1045
+ }
1046
+ }
1047
+
1048
+ // UTILITY FUNCTIONS
1049
+ function extractKeywords(text) {
1050
+ if (!text) return ['various', 'skills', 'experience'];
1051
+ const commonWords = ['the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by'];
1052
+ return text.toLowerCase()
1053
+ .replace(/[^\w\s]/g, '')
1054
+ .split(/\s+/)
1055
+ .filter(word => word.length > 3 && !commonWords.includes(word))
1056
+ .slice(0, 15);
1057
+ }
1058
+
1059
+ function generateProfessionalSummary(name, currentRole, experience, jobTitle, company, matchedSkills) {
1060
+ return `Accomplished ${currentRole} with ${experience} years of experience seeking ${jobTitle} position at ${company}. Proven expertise in ${matchedSkills.slice(0,3).join(', ')} with track record of delivering innovative solutions and driving business growth. Strong background in full project lifecycle management and cross-functional collaboration.`;
1061
+ }
1062
+
1063
+ function getSkillDescription(skill) {
1064
+ const descriptions = {
1065
+ 'python': 'Python programming and development',
1066
+ 'javascript': 'JavaScript and modern frameworks',
1067
+ 'react': 'React.js and frontend development',
1068
+ 'node': 'Node.js and backend services',
1069
+ 'aws': 'Amazon Web Services cloud platform',
1070
+ 'docker': 'Containerization and DevOps',
1071
+ 'machine learning': 'ML algorithms and model development',
1072
+ 'data analysis': 'Data processing and insights generation',
1073
+ 'project management': 'Project planning and execution',
1074
+ 'leadership': 'Team leadership and mentorship'
1075
+ };
1076
+ return descriptions[skill.toLowerCase()] || 'relevant professional skill';
1077
+ }
1078
+
1079
+ function getScoreColor(score) {
1080
+ if (score >= 80) return 'linear-gradient(135deg, #10b981, #34d399)';
1081
+ if (score >= 60) return 'linear-gradient(135deg, #f59e0b, #fbbf24)';
1082
+ return 'linear-gradient(135deg, #ef4444, #f87171)';
1083
+ }
1084
+
1085
+ function exportToPDF() {
1086
+ const element = document.getElementById('resume-output');
1087
+ const opt = {
1088
+ margin: 10,
1089
+ filename: 'optimized_resume.pdf',
1090
+ image: { type: 'jpeg', quality: 0.98 },
1091
+ html2canvas: { scale: 2 },
1092
+ jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
1093
+ };
1094
+ html2pdf().set(opt).from(element).save();
1095
+ }
1096
+
1097
+ function copyToClipboard(elementId) {
1098
+ const element = document.getElementById(elementId);
1099
+ const text = element.innerText;
1100
+ navigator.clipboard.writeText(text).then(() => {
1101
+ alert('Copied to clipboard!');
1102
+ });
1103
+ }
1104
+
1105
+ // API CONFIGURATION - DeepSeek only
1106
+ const API_CONFIG = {
1107
+ model: 'deepseek-chat'
1108
+ };
1109
+
1110
+ // LLM API CALL - REAL IMPLEMENTATION
1111
+ async function callLLM(prompt, systemPrompt = 'You are a professional career consultant and AI assistant. Please provide valuable and practical advice.') {
1112
+ console.log("Sending request to HF Space backend...");
1113
+
1114
+ const statusIcon = document.getElementById('api-status');
1115
+
1116
+ // Set status to loading
1117
+ if (statusIcon) statusIcon.textContent = 'πŸ”„';
1118
+
1119
+ try {
1120
+ // This is the request body DeepSeek expects.
1121
+ // We build it here and send it to our backend proxy.
1122
+ const requestBody = {
1123
+ model: API_CONFIG.model,
1124
+ messages: [
1125
+ {
1126
+ role: 'system',
1127
+ content: systemPrompt
1128
+ },
1129
+ {
1130
+ role: 'user',
1131
+ content: prompt
1132
+ }
1133
+ ],
1134
+ temperature: 0.7,
1135
+ stream: false
1136
+ };
1137
+
1138
+ // Send the request to OUR backend endpoint '/call-deepseek'
1139
+ const response = await fetch('/call-deepseek', {
1140
+ method: 'POST',
1141
+ headers: {
1142
+ 'Content-Type': 'application/json',
1143
+ },
1144
+ body: JSON.stringify(requestBody) // Send the JSON payload
1145
+ });
1146
+
1147
+ if (!response.ok) {
1148
+ // Get error detail from our FastAPI backend
1149
+ const errorData = await response.json().catch(() => ({}));
1150
+ if (statusIcon) statusIcon.textContent = '❌';
1151
+ throw new Error(errorData.detail || `Server Error ${response.status}: ${response.statusText}`);
1152
+ }
1153
+
1154
+ // The 'data' is the full response from DeepSeek,
1155
+ // proxied through our backend
1156
+ const data = await response.json();
1157
+
1158
+ if (statusIcon) statusIcon.textContent = 'βœ…';
1159
+
1160
+ // Extract the AI reply as before
1161
+ let aiReply = data.choices[0].message.content;
1162
+ console.log("AI reply received, length:", aiReply.length);
1163
+
1164
+ return aiReply;
1165
+
1166
+ } catch (error) {
1167
+ if (statusIcon) statusIcon.textContent = '❌';
1168
+ console.error("API call error:", error);
1169
+
1170
+ alert(`❌ API call failed: ${error.message}\n\nPlease check the server status. If this persists, the app owner may need to check the Hugging Face logs.`);
1171
+
1172
+ throw error;
1173
+ }
1174
+ }
1175
+
1176
+ // 解析 JSON ε“εΊ”ηš„θΎ…εŠ©ε‡½ζ•°
1177
+ function parseAIResponse(aiReply) {
1178
+ try {
1179
+ // Clean up possible markdown code block markers
1180
+ let cleaned = aiReply.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim();
1181
+ return JSON.parse(cleaned);
1182
+ } catch (parseError) {
1183
+ console.warn("JSON parsing failed, trying to extract:", parseError);
1184
+
1185
+ // Try to extract the JSON object
1186
+ const jsonMatch = aiReply.match(/\{[\s\S]*\}/);
1187
+ if (jsonMatch) {
1188
+ try {
1189
+ return JSON.parse(jsonMatch[0]);
1190
+ } catch (e) {
1191
+ console.error("Secondary parsing failed:", e);
1192
+ }
1193
+ }
1194
+
1195
+ // Return the original text
1196
+ return null;
1197
+ }
1198
+ }
1199
+
1200
+ // Initialize with sample data
1201
+ document.addEventListener('DOMContentLoaded', function() {
1202
+
1203
+ // Set status to 'Ready'
1204
+ const statusIcon = document.getElementById('api-status');
1205
+ if (statusIcon) statusIcon.textContent = 'βœ…';
1206
+
1207
+ // Set sample data for demonstration
1208
+ document.getElementById('name').value = 'Alexandra Chen';
1209
+ document.getElementById('current-role').value = 'Senior Frontend Developer';
1210
+ document.getElementById('experience').value = '6';
1211
+ document.getElementById('skills').value = 'React, TypeScript, JavaScript ES6+, Redux, Node.js, RESTful APIs, GraphQL, AWS, Docker, Webpack, Jest, Agile Methodology, Team Leadership, Code Review, Performance Optimization';
1212
+ document.getElementById('job-title').value = 'Principal Frontend Engineer';
1213
+ document.getElementById('company-name').value = 'InnovateTech Solutions';
1214
+ document.getElementById('job-description').value = `We are seeking an experienced Principal Frontend Engineer to lead our frontend development team. The ideal candidate will have 6+ years of experience building scalable web applications and a deep understanding of modern JavaScript frameworks.
1215
+
1216
+ Responsibilities:
1217
+ - Lead and mentor a team of 8 frontend developers
1218
+ - Architect and implement complex frontend systems using React and TypeScript
1219
+ - Collaborate with product managers and designers to define technical requirements
1220
+ - Optimize applications for maximum performance and scalability
1221
+ - Establish and enforce coding standards and best practices
1222
+ - Conduct code reviews and provide constructive feedback
1223
+ - Drive technical innovation and stay current with industry trends
1224
+
1225
+ Requirements:
1226
+ - 6+ years of professional frontend development experience
1227
+ - Expertise in React, TypeScript, and modern JavaScript
1228
+ - Strong experience with state management (Redux, Context API)
1229
+ - Proficiency in build tools (Webpack, Babel) and testing frameworks
1230
+ - Experience with cloud platforms (AWS, Azure, or GCP)
1231
+ - Excellent leadership and communication skills
1232
+ - Bachelor's degree in Computer Science or related field`;
1233
+
1234
+ document.getElementById('interview-role').value = 'Senior Full Stack Developer';
1235
+ document.getElementById('interview-skills').value = 'Technical: React, Node.js, PostgreSQL, AWS, Docker, Microservices, System Design\nBehavioral: Team Leadership, Project Management, Conflict Resolution, Stakeholder Communication\nArchitecture: API Design, Database Optimization, Cloud Infrastructure, CI/CD Pipelines';
1236
+ document.getElementById('current-skills').value = 'JavaScript (Advanced), React (Intermediate), HTML/CSS (Advanced), Node.js (Basic), MongoDB (Basic), Git (Intermediate), REST APIs (Intermediate)';
1237
+ document.getElementById('target-role-learning').value = 'Full Stack Developer';
1238
+ document.getElementById('cl-company').value = 'TechNova Innovations';
1239
+ document.getElementById('cl-role').value = 'Senior Software Engineer';
1240
+ document.getElementById('cl-highlight').value = 'Led the development of a customer dashboard that improved user engagement by 45% and reduced loading time by 60%. Implemented React with TypeScript and optimized API calls, resulting in a 30% decrease in server costs. Managed a team of 3 junior developers and introduced code review processes that reduced bugs in production by 25%.';
1241
+ document.getElementById('li-headline').value = 'Frontend Developer at Current Company';
1242
+ document.getElementById('li-about').value = `I'm a frontend developer with experience in React and JavaScript. I enjoy building web applications and solving technical challenges. Looking for new opportunities in tech.`;
1243
+ document.getElementById('li-target').value = 'Tech Leadership, Senior Engineering Roles, FinTech';
1244
+ document.getElementById('salary-role').value = 'Senior Software Engineer';
1245
+ document.getElementById('salary-location').value = 'San Francisco, CA';
1246
+ document.getElementById('salary-experience').value = '6';
1247
+ });
1248
+
1249
+ </script>
1250
+ </body>
1251
+ </html>
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ fastapi
2
+ uvicorn[standard]
3
+ httpx