Spaces:
Sleeping
Sleeping
Kennedy Johnson Cursor commited on
Commit ·
877f148
1
Parent(s): df43d3d
Add LinkedIn and About Me expansion support for advisors.
Browse filesWire about_me into profile/chat context and prompt Resume Optimizer and Career Path Mentor to offer employer-readable LinkedIn polish with user-chosen options.
Co-authored-by: Cursor <cursoragent@cursor.com>
- advisor-panel-draft.json +3 -3
- launchpad_config.yaml +8 -4
- multi_llm_chatbot_backend/app/api/routes/user_profile.py +2 -1
- personas/career_advisors/career_path_mentor.yaml +13 -2
- personas/career_advisors/internship_search_strategist.yaml +4 -1
- personas/career_advisors/resume_optimizer.yaml +12 -2
- phd-advisor-frontend/src/components/ClearDataModal.js +1 -1
- phd-advisor-frontend/src/components/ProfileWalkthrough.js +6 -0
- phd-advisor-frontend/src/components/canvas/CanvasDeliverables.js +16 -1
- phd-advisor-frontend/src/components/canvas/CanvasWidgets.js +1 -1
- phd-advisor-frontend/src/components/canvas/canvasData.js +2 -2
- phd-advisor-frontend/src/data/userGuide.js +1 -0
advisor-panel-draft.json
CHANGED
|
@@ -85,8 +85,8 @@
|
|
| 85 |
"icon": "FilePenLine",
|
| 86 |
"prompts": [
|
| 87 |
"Rewrite my resume bullets for an internship in marketing analytics.",
|
| 88 |
-
"
|
| 89 |
-
"
|
| 90 |
]
|
| 91 |
},
|
| 92 |
{
|
|
@@ -99,7 +99,7 @@
|
|
| 99 |
]
|
| 100 |
}
|
| 101 |
],
|
| 102 |
-
"chatInputPlaceholder": "Ask about application cadence, Handshake/LinkedIn search, resume edits, or interview prep...",
|
| 103 |
"sharedBasePrompt": "base_prompt: |\n **Formatting (Compact Markdown v1):**\n - Use GitHub-Flavored Markdown.\n - Output exactly three sections in this order:\n - `### Thought` -- one sentence that reflects on the user's situation from YOUR perspective.\n - `### What to do` -- exactly 3 bullets, one line each, with practical actions.\n - `### Next step` -- one imperative sentence telling the user what to do now.\n - Use `###` for headings and `-` for bullets.\n - Insert one blank line between sections.\n - Keep each section unique and non-repetitive.",
|
| 104 |
"includedPersonaIds": [
|
| 105 |
"internship_search_strategist",
|
|
|
|
| 85 |
"icon": "FilePenLine",
|
| 86 |
"prompts": [
|
| 87 |
"Rewrite my resume bullets for an internship in marketing analytics.",
|
| 88 |
+
"Expand my About Me into a LinkedIn headline and About employers can skim.",
|
| 89 |
+
"Polish my LinkedIn — give me rewrite vs light polish, and internship vs full-time options."
|
| 90 |
]
|
| 91 |
},
|
| 92 |
{
|
|
|
|
| 99 |
]
|
| 100 |
}
|
| 101 |
],
|
| 102 |
+
"chatInputPlaceholder": "Ask about application cadence, Handshake/LinkedIn search, resume edits, LinkedIn About, or interview prep...",
|
| 103 |
"sharedBasePrompt": "base_prompt: |\n **Formatting (Compact Markdown v1):**\n - Use GitHub-Flavored Markdown.\n - Output exactly three sections in this order:\n - `### Thought` -- one sentence that reflects on the user's situation from YOUR perspective.\n - `### What to do` -- exactly 3 bullets, one line each, with practical actions.\n - `### Next step` -- one imperative sentence telling the user what to do now.\n - Use `###` for headings and `-` for bullets.\n - Insert one blank line between sections.\n - Keep each section unique and non-repetitive.",
|
| 104 |
"includedPersonaIds": [
|
| 105 |
"internship_search_strategist",
|
launchpad_config.yaml
CHANGED
|
@@ -65,7 +65,7 @@ login:
|
|
| 65 |
- { value: "grad", label: "Graduate / recent grad" }
|
| 66 |
|
| 67 |
chat_page:
|
| 68 |
-
placeholder: "Ask about application cadence, Handshake/LinkedIn search, resume edits, or interview prep..."
|
| 69 |
examples:
|
| 70 |
- title: "Career Layout"
|
| 71 |
icon: "CalendarRange"
|
|
@@ -89,8 +89,8 @@ chat_page:
|
|
| 89 |
bg_color: "#FFFBEB"
|
| 90 |
suggestions:
|
| 91 |
- "Rewrite my resume bullets for an internship in marketing analytics."
|
| 92 |
-
- "
|
| 93 |
-
- "
|
| 94 |
- title: "Interview & Network"
|
| 95 |
icon: "MessagesSquare"
|
| 96 |
color: "#4F46E5"
|
|
@@ -116,10 +116,11 @@ personas:
|
|
| 116 |
- When discussing employer expectations, prefer NACE-backed themes: problem solving, teamwork, communication, initiative, work ethic, technical skills, adaptability, and analytical skills — and tell students to show evidence, not buzzwords.
|
| 117 |
- When discussing networking, coach alumni-tool outreach and informational interviews; never invent contacts or guaranteed referrals.
|
| 118 |
- Point students to docs/career_knowledge/ and Canvas Career Resources when they want citeable links.
|
| 119 |
-
- When a USER CAREER PROFILE is provided, personalize advice to academic standing, career focus, target roles, constraints,
|
| 120 |
- Treat career_focus as the primary trajectory switch:
|
| 121 |
- "Internship search" → prioritize internships, Handshake/career fairs, junior-friendly roles, return-offer paths.
|
| 122 |
- "Full-time / entry-level" → prioritize new-grad / entry-level FT search, stronger interview rigor, offer comparison.
|
|
|
|
| 123 |
- Never invent job openings, alumni contacts, metrics, or experience the user did not claim.
|
| 124 |
personas_dir: "personas/career_advisors"
|
| 125 |
|
|
@@ -136,6 +137,8 @@ orchestrator:
|
|
| 136 |
- "cover letter"
|
| 137 |
- "handshake"
|
| 138 |
- "linkedin"
|
|
|
|
|
|
|
| 139 |
- "interview"
|
| 140 |
- "behavioral"
|
| 141 |
- "recruiter"
|
|
@@ -162,6 +165,7 @@ orchestrator:
|
|
| 162 |
clarification_suggestions:
|
| 163 |
- "Ask for a weekly Handshake and LinkedIn search plan"
|
| 164 |
- "Upload your resume for ATS-focused edits"
|
|
|
|
| 165 |
- "Request behavioral interview practice for your target role"
|
| 166 |
- "Get a daily application cadence with tracking tips"
|
| 167 |
|
|
|
|
| 65 |
- { value: "grad", label: "Graduate / recent grad" }
|
| 66 |
|
| 67 |
chat_page:
|
| 68 |
+
placeholder: "Ask about application cadence, Handshake/LinkedIn search, resume edits, LinkedIn About, or interview prep..."
|
| 69 |
examples:
|
| 70 |
- title: "Career Layout"
|
| 71 |
icon: "CalendarRange"
|
|
|
|
| 89 |
bg_color: "#FFFBEB"
|
| 90 |
suggestions:
|
| 91 |
- "Rewrite my resume bullets for an internship in marketing analytics."
|
| 92 |
+
- "Expand my About Me into a LinkedIn headline and About employers can skim."
|
| 93 |
+
- "Polish my LinkedIn — give me rewrite vs light polish, and internship vs full-time options."
|
| 94 |
- title: "Interview & Network"
|
| 95 |
icon: "MessagesSquare"
|
| 96 |
color: "#4F46E5"
|
|
|
|
| 116 |
- When discussing employer expectations, prefer NACE-backed themes: problem solving, teamwork, communication, initiative, work ethic, technical skills, adaptability, and analytical skills — and tell students to show evidence, not buzzwords.
|
| 117 |
- When discussing networking, coach alumni-tool outreach and informational interviews; never invent contacts or guaranteed referrals.
|
| 118 |
- Point students to docs/career_knowledge/ and Canvas Career Resources when they want citeable links.
|
| 119 |
+
- When a USER CAREER PROFILE is provided, personalize advice to academic standing, career focus, target roles, constraints, work style, and about_me narrative.
|
| 120 |
- Treat career_focus as the primary trajectory switch:
|
| 121 |
- "Internship search" → prioritize internships, Handshake/career fairs, junior-friendly roles, return-offer paths.
|
| 122 |
- "Full-time / entry-level" → prioritize new-grad / entry-level FT search, stronger interview rigor, offer comparison.
|
| 123 |
+
- Proactively offer LinkedIn + About Me help when materials or narrative come up: ask rewrite vs light polish, internship vs full-time framing, and tone options; keep copy employer-readable and free of buzzword soup.
|
| 124 |
- Never invent job openings, alumni contacts, metrics, or experience the user did not claim.
|
| 125 |
personas_dir: "personas/career_advisors"
|
| 126 |
|
|
|
|
| 137 |
- "cover letter"
|
| 138 |
- "handshake"
|
| 139 |
- "linkedin"
|
| 140 |
+
- "about me"
|
| 141 |
+
- "headline"
|
| 142 |
- "interview"
|
| 143 |
- "behavioral"
|
| 144 |
- "recruiter"
|
|
|
|
| 165 |
clarification_suggestions:
|
| 166 |
- "Ask for a weekly Handshake and LinkedIn search plan"
|
| 167 |
- "Upload your resume for ATS-focused edits"
|
| 168 |
+
- "Expand my About Me into LinkedIn headline and About copy"
|
| 169 |
- "Request behavioral interview practice for your target role"
|
| 170 |
- "Get a daily application cadence with tracking tips"
|
| 171 |
|
multi_llm_chatbot_backend/app/api/routes/user_profile.py
CHANGED
|
@@ -25,6 +25,7 @@ PROFILE_FIELDS = [
|
|
| 25 |
"compliance_focus",
|
| 26 |
"current_goals",
|
| 27 |
"learning_preferences",
|
|
|
|
| 28 |
]
|
| 29 |
|
| 30 |
# Friendly labels injected into advisor prompts (storage keys stay stable).
|
|
@@ -39,6 +40,7 @@ PROFILE_FIELD_LABELS = {
|
|
| 39 |
"compliance_focus": "target_term_and_constraints",
|
| 40 |
"current_goals": "current_goals",
|
| 41 |
"learning_preferences": "search_work_style",
|
|
|
|
| 42 |
}
|
| 43 |
|
| 44 |
LIST_FIELDS = {"primary_domains", "certifications", "tools_stack"}
|
|
@@ -100,7 +102,6 @@ def _profile_response(doc: Dict[str, Any], user: User) -> UserProfileResponse:
|
|
| 100 |
return UserProfileResponse(
|
| 101 |
user_id=str(enriched.get("user_id", user.id)),
|
| 102 |
**fields,
|
| 103 |
-
advisor_notes=enriched.get("advisor_notes"),
|
| 104 |
updated_at=enriched.get("updated_at"),
|
| 105 |
completion_pct=_calc_completion(enriched),
|
| 106 |
)
|
|
|
|
| 25 |
"compliance_focus",
|
| 26 |
"current_goals",
|
| 27 |
"learning_preferences",
|
| 28 |
+
"advisor_notes",
|
| 29 |
]
|
| 30 |
|
| 31 |
# Friendly labels injected into advisor prompts (storage keys stay stable).
|
|
|
|
| 40 |
"compliance_focus": "target_term_and_constraints",
|
| 41 |
"current_goals": "current_goals",
|
| 42 |
"learning_preferences": "search_work_style",
|
| 43 |
+
"advisor_notes": "about_me",
|
| 44 |
}
|
| 45 |
|
| 46 |
LIST_FIELDS = {"primary_domains", "certifications", "tools_stack"}
|
|
|
|
| 102 |
return UserProfileResponse(
|
| 103 |
user_id=str(enriched.get("user_id", user.id)),
|
| 104 |
**fields,
|
|
|
|
| 105 |
updated_at=enriched.get("updated_at"),
|
| 106 |
completion_pct=_calc_completion(enriched),
|
| 107 |
)
|
personas/career_advisors/career_path_mentor.yaml
CHANGED
|
@@ -5,15 +5,24 @@ summary: "Strategic & encouraging"
|
|
| 5 |
icon: "GraduationCap"
|
| 6 |
temperature: 5
|
| 7 |
persona_prompt: |
|
| 8 |
-
You are a career path mentor for undergraduates. You help with networking, narrative, internship↔full-time pivots, and early offer decisions — with realistic expectations.
|
| 9 |
|
| 10 |
**YOUR EXPERTISE:**
|
| 11 |
- Alumni and recruiter outreach on LinkedIn (warm, concise, personalized)
|
| 12 |
- Deciding when to prioritize internships vs entry-level full-time (junior vs senior)
|
| 13 |
- Turning class projects, clubs, and part-time work into a coherent career story
|
|
|
|
| 14 |
- Career-fair conversations and follow-ups
|
| 15 |
- Offer comparison basics (learning, team, pay, location, return-offer odds) — respectful, not aggressive hardball
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
**WHEN USER PROFILE IS PRESENT:**
|
| 18 |
- Juniors: internship-first unless they explicitly want FT exploration
|
| 19 |
- Seniors/grads: help weigh internship vs FT based on goals and timeline
|
|
@@ -22,14 +31,16 @@ persona_prompt: |
|
|
| 22 |
**OUTPUT TEMPLATES (use when relevant):**
|
| 23 |
- Outreach message: subject/opening + 1 proof point + clear ask + soft close
|
| 24 |
- 60-second career story: past → present → future for fairs/screens
|
|
|
|
| 25 |
- Offer scorecard: 5 criteria with weights and notes
|
| 26 |
|
| 27 |
**HARD RULES:**
|
| 28 |
- Never invent alumni contacts, insider referrals, or guaranteed outcomes
|
|
|
|
| 29 |
- Encourage campus career services and real human networks
|
| 30 |
- Defer resume line edits to Resume Optimizer; defer apply cadence to Application Scheduler
|
| 31 |
|
| 32 |
**YOUR RESPONSE STYLE:**
|
| 33 |
- Strategic, encouraging, and honest about competitive markets
|
| 34 |
- Connect this week's actions to a 1–2 year arc without overwhelming them
|
| 35 |
-
- Give copy-ready outreach they can personalize in 60 seconds
|
|
|
|
| 5 |
icon: "GraduationCap"
|
| 6 |
temperature: 5
|
| 7 |
persona_prompt: |
|
| 8 |
+
You are a career path mentor for undergraduates. You help with networking, narrative, internship↔full-time pivots, and early offer decisions — with realistic expectations. You also help students expand and tie up their LinkedIn profile with their About Me so employers can quickly understand who they are and what they want.
|
| 9 |
|
| 10 |
**YOUR EXPERTISE:**
|
| 11 |
- Alumni and recruiter outreach on LinkedIn (warm, concise, personalized)
|
| 12 |
- Deciding when to prioritize internships vs entry-level full-time (junior vs senior)
|
| 13 |
- Turning class projects, clubs, and part-time work into a coherent career story
|
| 14 |
+
- LinkedIn profile narrative: About Me ↔ headline ↔ About section ↔ experience summaries that employers can scan
|
| 15 |
- Career-fair conversations and follow-ups
|
| 16 |
- Offer comparison basics (learning, team, pay, location, return-offer odds) — respectful, not aggressive hardball
|
| 17 |
|
| 18 |
+
**LINKEDIN & ABOUT ME (offer proactively):**
|
| 19 |
+
- Early in narrative/networking chats, offer to help expand or polish LinkedIn + About Me so the story is employer-readable
|
| 20 |
+
- Ask for options: rewrite vs light polish; internship vs full-time framing; tone variants (warm, crisp, technical)
|
| 21 |
+
- Use USER CAREER PROFILE about_me, goals, and career_focus when present; ask for a draft About or LinkedIn dump if missing
|
| 22 |
+
- Keep copy clear and professional — short paragraphs recruiters skim in 30 seconds; no buzzword soup
|
| 23 |
+
- Align outreach messages with the same narrative used in About Me / LinkedIn About
|
| 24 |
+
- Defer line-by-line resume ATS edits to Resume Optimizer, but own the career-story framing on LinkedIn
|
| 25 |
+
|
| 26 |
**WHEN USER PROFILE IS PRESENT:**
|
| 27 |
- Juniors: internship-first unless they explicitly want FT exploration
|
| 28 |
- Seniors/grads: help weigh internship vs FT based on goals and timeline
|
|
|
|
| 31 |
**OUTPUT TEMPLATES (use when relevant):**
|
| 32 |
- Outreach message: subject/opening + 1 proof point + clear ask + soft close
|
| 33 |
- 60-second career story: past → present → future for fairs/screens
|
| 34 |
+
- LinkedIn pack: headline + About + optional experience blurb, matching About Me
|
| 35 |
- Offer scorecard: 5 criteria with weights and notes
|
| 36 |
|
| 37 |
**HARD RULES:**
|
| 38 |
- Never invent alumni contacts, insider referrals, or guaranteed outcomes
|
| 39 |
+
- Never invent experience or metrics for LinkedIn/About Me
|
| 40 |
- Encourage campus career services and real human networks
|
| 41 |
- Defer resume line edits to Resume Optimizer; defer apply cadence to Application Scheduler
|
| 42 |
|
| 43 |
**YOUR RESPONSE STYLE:**
|
| 44 |
- Strategic, encouraging, and honest about competitive markets
|
| 45 |
- Connect this week's actions to a 1–2 year arc without overwhelming them
|
| 46 |
+
- Give copy-ready outreach and profile text they can personalize in 60 seconds
|
personas/career_advisors/internship_search_strategist.yaml
CHANGED
|
@@ -13,18 +13,21 @@ persona_prompt: |
|
|
| 13 |
- Building weekly target lists by industry, location, competitiveness, and rolling vs deadline postings
|
| 14 |
- Spotting red flags (unpaid scams, vague "sales" bait, fake recruiters) and prioritizing quality applications
|
| 15 |
- CU-relevant defaults: Handshake first, then LinkedIn + alumni, then company sites
|
|
|
|
| 16 |
|
| 17 |
**WHEN USER PROFILE IS PRESENT:**
|
| 18 |
- Respect academic standing, career focus, target industries, location/constraints, and hours/week
|
| 19 |
- Juniors → internship-first; seniors → internship or entry-level FT based on their stated focus
|
| 20 |
- Do not invent openings, recruiter names, or "guaranteed" callbacks
|
|
|
|
| 21 |
|
| 22 |
**OUTPUT TEMPLATES (use when relevant):**
|
| 23 |
- Search plan: primary lane, backup lane, 8–12 example role titles, filters to set, channels this week
|
| 24 |
- Company shortlist: columns for company / why fit / channel / deadline-or-rolling / next action
|
| 25 |
-
- Defer scheduling volume to Application Scheduler; defer bullet rewrites to Resume Optimizer
|
| 26 |
|
| 27 |
**YOUR RESPONSE STYLE:**
|
| 28 |
- Give concrete search queries, filters, and example role titles
|
| 29 |
- Prefer a short high-quality target list over endless scrolling
|
| 30 |
- Ask about major, location flexibility, and start term when those details are missing
|
|
|
|
|
|
| 13 |
- Building weekly target lists by industry, location, competitiveness, and rolling vs deadline postings
|
| 14 |
- Spotting red flags (unpaid scams, vague "sales" bait, fake recruiters) and prioritizing quality applications
|
| 15 |
- CU-relevant defaults: Handshake first, then LinkedIn + alumni, then company sites
|
| 16 |
+
- Flagging when a weak LinkedIn/About Me hurts discoverability — then hand off polish to Resume Optimizer or Career Path Mentor
|
| 17 |
|
| 18 |
**WHEN USER PROFILE IS PRESENT:**
|
| 19 |
- Respect academic standing, career focus, target industries, location/constraints, and hours/week
|
| 20 |
- Juniors → internship-first; seniors → internship or entry-level FT based on their stated focus
|
| 21 |
- Do not invent openings, recruiter names, or "guaranteed" callbacks
|
| 22 |
+
- If about_me is thin or missing, briefly suggest expanding LinkedIn + About Me (internship vs FT framing) before heavy outreach
|
| 23 |
|
| 24 |
**OUTPUT TEMPLATES (use when relevant):**
|
| 25 |
- Search plan: primary lane, backup lane, 8–12 example role titles, filters to set, channels this week
|
| 26 |
- Company shortlist: columns for company / why fit / channel / deadline-or-rolling / next action
|
| 27 |
+
- Defer scheduling volume to Application Scheduler; defer bullet rewrites and LinkedIn About copy to Resume Optimizer / Career Path Mentor
|
| 28 |
|
| 29 |
**YOUR RESPONSE STYLE:**
|
| 30 |
- Give concrete search queries, filters, and example role titles
|
| 31 |
- Prefer a short high-quality target list over endless scrolling
|
| 32 |
- Ask about major, location flexibility, and start term when those details are missing
|
| 33 |
+
|
personas/career_advisors/resume_optimizer.yaml
CHANGED
|
@@ -5,7 +5,7 @@ summary: "Precise & results-focused"
|
|
| 5 |
icon: "FilePenLine"
|
| 6 |
temperature: 3
|
| 7 |
persona_prompt: |
|
| 8 |
-
You are a resume optimizer for undergraduates seeking internships or entry-level roles. You rewrite materials so they clear ATS screens and impress human recruiters — without inventing experience.
|
| 9 |
|
| 10 |
**YOUR EXPERTISE:**
|
| 11 |
- Accomplishment bullets: action verb + context + tool/method + metric (when real)
|
|
@@ -13,6 +13,15 @@ persona_prompt: |
|
|
| 13 |
- ATS-friendly formatting (one column, standard headings, no text boxes/tables for core content)
|
| 14 |
- Tailoring one master resume into role-specific versions
|
| 15 |
- Honest gap-handling (course projects, clubs, and part-time work as proof — never fabrications)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
**HARD RULES:**
|
| 18 |
- Never invent jobs, titles, GPAs, skills, tools, or metrics the user did not claim
|
|
@@ -22,11 +31,12 @@ persona_prompt: |
|
|
| 22 |
**WHEN USER PASTES A RESUME OR JD:**
|
| 23 |
- Output: (1) top 3 issues, (2) rewritten bullets, (3) keywords to add only if supported by their experience, (4) one next edit
|
| 24 |
- For long resumes, focus on Experience / Projects first
|
|
|
|
| 25 |
|
| 26 |
**HANDOFFS:**
|
| 27 |
- Interview stories → Interview Coach
|
| 28 |
- Apply volume / deadlines → Application Scheduler
|
| 29 |
-
- Career narrative / networking → Career Path Mentor
|
| 30 |
|
| 31 |
**YOUR RESPONSE STYLE:**
|
| 32 |
- Be precise and editorial, not vague
|
|
|
|
| 5 |
icon: "FilePenLine"
|
| 6 |
temperature: 3
|
| 7 |
persona_prompt: |
|
| 8 |
+
You are a resume optimizer for undergraduates seeking internships or entry-level roles. You rewrite materials so they clear ATS screens and impress human recruiters — without inventing experience. You also help expand and polish LinkedIn (headline, About, experience) so it ties to the user's About Me / career narrative and reads clearly to employers.
|
| 9 |
|
| 10 |
**YOUR EXPERTISE:**
|
| 11 |
- Accomplishment bullets: action verb + context + tool/method + metric (when real)
|
|
|
|
| 13 |
- ATS-friendly formatting (one column, standard headings, no text boxes/tables for core content)
|
| 14 |
- Tailoring one master resume into role-specific versions
|
| 15 |
- Honest gap-handling (course projects, clubs, and part-time work as proof — never fabrications)
|
| 16 |
+
- LinkedIn + About Me: headline, About section, and experience blurbs that match the resume story and stay scannable for recruiters
|
| 17 |
+
|
| 18 |
+
**LINKEDIN & ABOUT ME (offer proactively):**
|
| 19 |
+
- When the user shares a resume, profile, or vague career story — or when USER CAREER PROFILE includes about_me — offer to expand/polish LinkedIn and About Me so employers can understand them in ~30 seconds
|
| 20 |
+
- Ask for options before rewriting: (1) full rewrite vs light polish, (2) internship vs full-time framing, (3) tone (warm/professional, concise/detail, technical/plain)
|
| 21 |
+
- Tie LinkedIn About + headline + top experience lines to their About Me / goals narrative — one coherent story, not buzzword soup
|
| 22 |
+
- Prefer clear, professional, scannable copy: short paragraphs or bullets employers can skim; cut empty adjectives ("passionate," "results-driven") unless backed by proof
|
| 23 |
+
- Output ready-to-paste headline (≤220 chars), About (3–5 short paragraphs or bullets), and 1–2 experience blurbs when relevant
|
| 24 |
+
- Never invent jobs, metrics, or skills; ask for missing proof points
|
| 25 |
|
| 26 |
**HARD RULES:**
|
| 27 |
- Never invent jobs, titles, GPAs, skills, tools, or metrics the user did not claim
|
|
|
|
| 31 |
**WHEN USER PASTES A RESUME OR JD:**
|
| 32 |
- Output: (1) top 3 issues, (2) rewritten bullets, (3) keywords to add only if supported by their experience, (4) one next edit
|
| 33 |
- For long resumes, focus on Experience / Projects first
|
| 34 |
+
- Offer a matching LinkedIn headline/About pass so profile and resume stay aligned
|
| 35 |
|
| 36 |
**HANDOFFS:**
|
| 37 |
- Interview stories → Interview Coach
|
| 38 |
- Apply volume / deadlines → Application Scheduler
|
| 39 |
+
- Career narrative / networking → Career Path Mentor (you still own LinkedIn About copy polish)
|
| 40 |
|
| 41 |
**YOUR RESPONSE STYLE:**
|
| 42 |
- Be precise and editorial, not vague
|
phd-advisor-frontend/src/components/ClearDataModal.js
CHANGED
|
@@ -123,7 +123,7 @@ const ClearDataModal = ({ authToken, onClose, onDataCleared }) => {
|
|
| 123 |
<div>
|
| 124 |
<div style={{ fontWeight: 600, fontSize: 14 }}>Profile Information</div>
|
| 125 |
<div style={{ fontSize: 12, color: isDark ? '#9ca3af' : '#6b7280', marginTop: 2 }}>
|
| 126 |
-
|
| 127 |
</div>
|
| 128 |
</div>
|
| 129 |
</div>
|
|
|
|
| 123 |
<div>
|
| 124 |
<div style={{ fontWeight: 600, fontSize: 14 }}>Profile Information</div>
|
| 125 |
<div style={{ fontSize: 12, color: isDark ? '#9ca3af' : '#6b7280', marginTop: 2 }}>
|
| 126 |
+
Academic standing, goals, About Me, search focus, etc. Resets "Tell us about yourself."
|
| 127 |
</div>
|
| 128 |
</div>
|
| 129 |
</div>
|
phd-advisor-frontend/src/components/ProfileWalkthrough.js
CHANGED
|
@@ -59,6 +59,12 @@ const buildSteps = (config) => {
|
|
| 59 |
{ key: 'compliance_focus', label: 'Target term + constraints', type: 'text', placeholder: 'e.g. Summer 2027; Denver/remote; paid only; 6 hrs/week for applications' },
|
| 60 |
{ key: 'current_goals', label: 'Current goals', type: 'textarea', placeholder: 'Land a summer internship, improve resume, prep for interviews...' },
|
| 61 |
{ key: 'learning_preferences', label: 'How you like to work the search', type: 'text', placeholder: 'Daily apply blocks, weekend deep work, career-fair focused...' },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
],
|
| 63 |
},
|
| 64 |
];
|
|
|
|
| 59 |
{ key: 'compliance_focus', label: 'Target term + constraints', type: 'text', placeholder: 'e.g. Summer 2027; Denver/remote; paid only; 6 hrs/week for applications' },
|
| 60 |
{ key: 'current_goals', label: 'Current goals', type: 'textarea', placeholder: 'Land a summer internship, improve resume, prep for interviews...' },
|
| 61 |
{ key: 'learning_preferences', label: 'How you like to work the search', type: 'text', placeholder: 'Daily apply blocks, weekend deep work, career-fair focused...' },
|
| 62 |
+
{
|
| 63 |
+
key: 'advisor_notes',
|
| 64 |
+
label: 'About Me / career narrative',
|
| 65 |
+
type: 'textarea',
|
| 66 |
+
placeholder: 'Who you are, what you want employers to know, and any LinkedIn About draft. Advisors can expand this into employer-readable LinkedIn copy.',
|
| 67 |
+
},
|
| 68 |
],
|
| 69 |
},
|
| 70 |
];
|
phd-advisor-frontend/src/components/canvas/CanvasDeliverables.js
CHANGED
|
@@ -41,7 +41,7 @@ export const TEMPLATES = [
|
|
| 41 |
{ id: 'intro', name: 'Goals & constraints', target: 1000, hint: 'Internship vs FT, location, unpaid OK?, hours/week available.', checks: ['hasNumber'] },
|
| 42 |
{ id: 'methods', name: 'Target roles & companies', target: 800, hint: 'Primary/backup lanes and a short company shortlist.', checks: [] },
|
| 43 |
{ id: 'results', name: 'Weekly cadence', target: 800, hint: 'Apply blocks, volume targets, and deadline handling.', checks: ['hasNumber'] },
|
| 44 |
-
{ id: 'discussion', name: 'Materials checklist', target: 1000, hint: 'Resume, LinkedIn, STAR stories, outreach scripts.', checks: [] },
|
| 45 |
{ id: 'refs', name: 'Tracking system', target: 0, hint: 'Board columns, metrics to review every Friday.', checks: [] },
|
| 46 |
],
|
| 47 |
},
|
|
@@ -142,6 +142,21 @@ export const TEMPLATES = [
|
|
| 142 |
{ id: 'close', name: 'Close', target: 60, hint: 'Thanks + clear next step + signature.', checks: [] },
|
| 143 |
],
|
| 144 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
{
|
| 146 |
id: 'irb-protocol',
|
| 147 |
name: 'Interview Prep Sheet',
|
|
|
|
| 41 |
{ id: 'intro', name: 'Goals & constraints', target: 1000, hint: 'Internship vs FT, location, unpaid OK?, hours/week available.', checks: ['hasNumber'] },
|
| 42 |
{ id: 'methods', name: 'Target roles & companies', target: 800, hint: 'Primary/backup lanes and a short company shortlist.', checks: [] },
|
| 43 |
{ id: 'results', name: 'Weekly cadence', target: 800, hint: 'Apply blocks, volume targets, and deadline handling.', checks: ['hasNumber'] },
|
| 44 |
+
{ id: 'discussion', name: 'Materials checklist', target: 1000, hint: 'Resume, LinkedIn & About Me, STAR stories, outreach scripts.', checks: [] },
|
| 45 |
{ id: 'refs', name: 'Tracking system', target: 0, hint: 'Board columns, metrics to review every Friday.', checks: [] },
|
| 46 |
],
|
| 47 |
},
|
|
|
|
| 142 |
{ id: 'close', name: 'Close', target: 60, hint: 'Thanks + clear next step + signature.', checks: [] },
|
| 143 |
],
|
| 144 |
},
|
| 145 |
+
{
|
| 146 |
+
id: 'linkedin-about',
|
| 147 |
+
name: 'LinkedIn & About Me',
|
| 148 |
+
desc: 'Headline, About, and experience blurbs employers can scan in 30 seconds.',
|
| 149 |
+
icon: 'user',
|
| 150 |
+
mode: 'document',
|
| 151 |
+
sections: [
|
| 152 |
+
{ id: 'framing', name: 'Framing choices', target: 80, hint: 'Rewrite vs polish · internship vs FT · tone (warm / crisp / technical).', checks: [] },
|
| 153 |
+
{ id: 'about-me', name: 'About Me narrative', target: 200, hint: 'Who you are, what you want, and proof points — plain language employers can skim.', checks: [] },
|
| 154 |
+
{ id: 'headline', name: 'LinkedIn headline', target: 40, hint: 'Role lane + proof + target (≤220 chars). No buzzword soup.', checks: [] },
|
| 155 |
+
{ id: 'about', name: 'LinkedIn About', target: 300, hint: '3–5 short paragraphs or bullets tied to About Me. Scannable for recruiters.', checks: ['hasNumber'] },
|
| 156 |
+
{ id: 'experience', name: 'Experience blurbs', target: 250, hint: 'Top 1–2 roles/projects with action + outcome lines matching your resume.', checks: ['hasNumber'] },
|
| 157 |
+
{ id: 'alignment', name: 'Resume ↔ LinkedIn check', target: 100, hint: 'Same story, titles, and tools — no invented metrics.', checks: [] },
|
| 158 |
+
],
|
| 159 |
+
},
|
| 160 |
{
|
| 161 |
id: 'irb-protocol',
|
| 162 |
name: 'Interview Prep Sheet',
|
phd-advisor-frontend/src/components/canvas/CanvasWidgets.js
CHANGED
|
@@ -1443,7 +1443,7 @@ export function DocumenterWidget({ state, setState }) {
|
|
| 1443 |
const PHD_MILESTONES = [
|
| 1444 |
{ id: 'courses', label: 'Clarify goals & academic standing', hint: 'Internship vs FT, target start term, hours/week available.' },
|
| 1445 |
{ id: 'prelim', label: 'Define target roles & industries', hint: 'Primary lane + 1 backup lane (e.g. analytics + marketing ops).' },
|
| 1446 |
-
{ id: 'lit-review', label: 'Audit resume & LinkedIn', hint: 'Quantified bullets
|
| 1447 |
{ id: 'topic', label: 'Build a company shortlist', hint: '20–40 targets across Handshake, LinkedIn, and career fairs.' },
|
| 1448 |
{ id: 'committee', label: 'Set weekly apply cadence', hint: 'Protect recurring apply blocks on your calendar.' },
|
| 1449 |
{ id: 'irb', label: 'Draft STAR story bank', hint: 'Leadership, teamwork, conflict, failure, impact — five stories.' },
|
|
|
|
| 1443 |
const PHD_MILESTONES = [
|
| 1444 |
{ id: 'courses', label: 'Clarify goals & academic standing', hint: 'Internship vs FT, target start term, hours/week available.' },
|
| 1445 |
{ id: 'prelim', label: 'Define target roles & industries', hint: 'Primary lane + 1 backup lane (e.g. analytics + marketing ops).' },
|
| 1446 |
+
{ id: 'lit-review', label: 'Audit resume & LinkedIn', hint: 'Quantified bullets; expand About Me into a scannable LinkedIn headline + About.' },
|
| 1447 |
{ id: 'topic', label: 'Build a company shortlist', hint: '20–40 targets across Handshake, LinkedIn, and career fairs.' },
|
| 1448 |
{ id: 'committee', label: 'Set weekly apply cadence', hint: 'Protect recurring apply blocks on your calendar.' },
|
| 1449 |
{ id: 'irb', label: 'Draft STAR story bank', hint: 'Leadership, teamwork, conflict, failure, impact — five stories.' },
|
phd-advisor-frontend/src/components/canvas/canvasData.js
CHANGED
|
@@ -32,10 +32,10 @@ export const INSIGHTS = [
|
|
| 32 |
icon: 'flask',
|
| 33 |
category: 'theory',
|
| 34 |
confidence: 71,
|
| 35 |
-
summary: 'Resume is ATS-readable but light on metrics.
|
| 36 |
bullets: [
|
| 37 |
'Resume: <strong>2 quantified bullets</strong> · target 5+ with tools + outcomes',
|
| 38 |
-
'
|
| 39 |
'Interview bank: <strong>3 STAR stories</strong> drafted · need leadership + conflict',
|
| 40 |
],
|
| 41 |
sources: 14,
|
|
|
|
| 32 |
icon: 'flask',
|
| 33 |
category: 'theory',
|
| 34 |
confidence: 71,
|
| 35 |
+
summary: 'Resume is ATS-readable but light on metrics. About Me and LinkedIn About are unfinished. Interview stories need STAR structure.',
|
| 36 |
bullets: [
|
| 37 |
'Resume: <strong>2 quantified bullets</strong> · target 5+ with tools + outcomes',
|
| 38 |
+
'LinkedIn: expand About Me into a scannable headline + About · channels underused',
|
| 39 |
'Interview bank: <strong>3 STAR stories</strong> drafted · need leadership + conflict',
|
| 40 |
],
|
| 41 |
sources: 14,
|
phd-advisor-frontend/src/data/userGuide.js
CHANGED
|
@@ -103,6 +103,7 @@ Open Canvas from the sidebar. Layout and widgets auto-save in your browser.`,
|
|
| 103 |
## Useful workflows
|
| 104 |
- **Search plan:** Internship Search Strategist + Application Scheduler
|
| 105 |
- **Materials polish:** Resume Optimizer + Internship Search Strategist
|
|
|
|
| 106 |
- **Interview week:** Interview Coach + Career Path Mentor
|
| 107 |
- **Stuck after rejections:** Ask multiple advisors to compare targeting, resume, and networking
|
| 108 |
- **Citeable research:** Upload files from \`docs/career_knowledge/\` (employers, recruiting, networking) so advisors can ground answers in NACE and university sources
|
|
|
|
| 103 |
## Useful workflows
|
| 104 |
- **Search plan:** Internship Search Strategist + Application Scheduler
|
| 105 |
- **Materials polish:** Resume Optimizer + Internship Search Strategist
|
| 106 |
+
- **LinkedIn & About Me:** Add your narrative in profile onboarding, then ask Resume Optimizer or Career Path Mentor for rewrite vs polish options (internship or full-time framing)
|
| 107 |
- **Interview week:** Interview Coach + Career Path Mentor
|
| 108 |
- **Stuck after rejections:** Ask multiple advisors to compare targeting, resume, and networking
|
| 109 |
- **Citeable research:** Upload files from \`docs/career_knowledge/\` (employers, recruiting, networking) so advisors can ground answers in NACE and university sources
|