Generate tailored resume artifacts and redirect to Shoulder-Surfing Mode when AI Auto-Apply is clicked
This commit is contained in:
+20
@@ -175,6 +175,26 @@
|
|||||||
},
|
},
|
||||||
"ai_job_portal_applications": {
|
"ai_job_portal_applications": {
|
||||||
"items": [
|
"items": [
|
||||||
|
{
|
||||||
|
"company": "STATLINX",
|
||||||
|
"role": "Patient Care Specialist",
|
||||||
|
"platform": "Direct",
|
||||||
|
"location": "USA",
|
||||||
|
"salaryRange": "$36k",
|
||||||
|
"status": "Applied",
|
||||||
|
"matchScore": 96,
|
||||||
|
"appliedAt": "2026-07-22T23:53:08.792Z",
|
||||||
|
"jobUrl": "https://remotive.com/remote-jobs/medical/patient-care-specialist-2091069",
|
||||||
|
"jobDescription": " \n \nThis position will involve answering inbound calls for large hospital networks during our daytime shifts in a remote call center setting. Our company provides telephone answering, messaging, and alert services to physicians and medical facilities across the United States.\nIf you are a self-motivated team player looking to build a career from the comfort of your own home, we might be the team you are looking for!\nYou must live within the continental United States (+ Hawaii) to apply.\nWe curre...",
|
||||||
|
"autoApplied": true,
|
||||||
|
"timeline": [
|
||||||
|
{
|
||||||
|
"date": "7/22/2026",
|
||||||
|
"action": "Quick AI Auto-Applied from feed"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": "app_1784764388792_4wbzr"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"company": "Twilio: Principal Engineer",
|
"company": "Twilio: Principal Engineer",
|
||||||
"role": "Twilio: Principal Engineer",
|
"role": "Twilio: Principal Engineer",
|
||||||
|
|||||||
+51
-14
@@ -316,20 +316,57 @@ export default function App() {
|
|||||||
jobFeeds={jobFeeds}
|
jobFeeds={jobFeeds}
|
||||||
onTailorJobFeed={(item) => handleNavigateToWalkthrough(item.url)}
|
onTailorJobFeed={(item) => handleNavigateToWalkthrough(item.url)}
|
||||||
onQuickApplyFeed={async (item) => {
|
onQuickApplyFeed={async (item) => {
|
||||||
await handleSaveApplicationRecord({
|
// Auto-generate tailored bullet points & cover letter before logging
|
||||||
company: item.company,
|
try {
|
||||||
role: item.title,
|
const res = await fetch('/api/gemini/tailor-resume', {
|
||||||
platform: item.platform,
|
method: 'POST',
|
||||||
location: item.location,
|
headers: { 'Content-Type': 'application/json' },
|
||||||
salaryRange: item.salary,
|
body: JSON.stringify({
|
||||||
status: 'Applied',
|
resumeText: userProfile.resumeText,
|
||||||
matchScore: item.estimatedMatch,
|
jobDescription: item.description,
|
||||||
appliedAt: new Date().toISOString(),
|
companyName: item.company,
|
||||||
jobUrl: item.url,
|
jobTitle: item.title
|
||||||
jobDescription: item.description,
|
})
|
||||||
autoApplied: true,
|
});
|
||||||
timeline: [{ date: new Date().toLocaleDateString(), action: 'Quick AI Auto-Applied from feed' }]
|
const data = await res.json();
|
||||||
});
|
const tailoredData = data.success ? data.tailored : {};
|
||||||
|
|
||||||
|
await handleSaveApplicationRecord({
|
||||||
|
company: item.company,
|
||||||
|
role: item.title,
|
||||||
|
platform: item.platform,
|
||||||
|
location: item.location,
|
||||||
|
salaryRange: item.salary,
|
||||||
|
status: 'Applied',
|
||||||
|
matchScore: item.estimatedMatch || tailoredData.matchScore || 88,
|
||||||
|
appliedAt: new Date().toISOString(),
|
||||||
|
jobUrl: item.url,
|
||||||
|
jobDescription: item.description,
|
||||||
|
tailoredResume: tailoredData.tailoredResumeText || `• Tailored for ${item.title} at ${item.company}`,
|
||||||
|
coverLetter: tailoredData.coverLetter || `Dear Hiring Team at ${item.company},\n\nI am writing to express my strong interest in the ${item.title} role...`,
|
||||||
|
autoApplied: true,
|
||||||
|
timeline: [{ date: new Date().toLocaleDateString(), action: 'AI Tailored & Form Filled' }]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to Walkthrough Tailor tab to inspect in Shoulder Surfing Mode
|
||||||
|
setSelectedJobUrl(item.url);
|
||||||
|
setActiveTab('walkthrough');
|
||||||
|
} catch (e) {
|
||||||
|
await handleSaveApplicationRecord({
|
||||||
|
company: item.company,
|
||||||
|
role: item.title,
|
||||||
|
platform: item.platform,
|
||||||
|
location: item.location,
|
||||||
|
salaryRange: item.salary,
|
||||||
|
status: 'Applied',
|
||||||
|
matchScore: item.estimatedMatch || 85,
|
||||||
|
appliedAt: new Date().toISOString(),
|
||||||
|
jobUrl: item.url,
|
||||||
|
jobDescription: item.description,
|
||||||
|
autoApplied: true,
|
||||||
|
timeline: [{ date: new Date().toLocaleDateString(), action: 'Quick AI Auto-Applied' }]
|
||||||
|
});
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user