Kennedy Johnson Cursor commited on
Commit
877f148
·
1 Parent(s): df43d3d

Add LinkedIn and About Me expansion support for advisors.

Browse files

Wire 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 CHANGED
@@ -85,8 +85,8 @@
85
  "icon": "FilePenLine",
86
  "prompts": [
87
  "Rewrite my resume bullets for an internship in marketing analytics.",
88
- "What keywords should I add for ATS screening?",
89
- "Review my experience section for a junior-year candidate."
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
- - "What keywords should I add for ATS screening?"
93
- - "Review my experience section for a junior-year candidate."
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, and work style.
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
- Fitness level, goals, training focus, equipment, etc. Resets "Tell us about yourself."
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, ATS-safe layout, consistent headline.' },
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. Cover notes 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
- 'Channels: Handshake + LinkedIn · company portals underused',
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