vipcare 0.4.0 โ 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/vip.js +41 -1
- package/lib/card.js +49 -13
- package/lib/templates.js +123 -100
- package/package.json +1 -1
package/bin/vip.js
CHANGED
|
@@ -522,7 +522,47 @@ program.command('card')
|
|
|
522
522
|
const dir = path.dirname(outputPath);
|
|
523
523
|
const file = path.basename(outputPath);
|
|
524
524
|
|
|
525
|
-
const server = http.createServer((req, res) => {
|
|
525
|
+
const server = http.createServer(async (req, res) => {
|
|
526
|
+
// API: regenerate a profile
|
|
527
|
+
if (req.url.startsWith('/api/regenerate/')) {
|
|
528
|
+
const slug = req.url.replace('/api/regenerate/', '').replace(/\//g, '');
|
|
529
|
+
res.setHeader('Content-Type', 'application/json');
|
|
530
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
531
|
+
|
|
532
|
+
console.log(c.cyan(` Regenerating ${slug}...`));
|
|
533
|
+
try {
|
|
534
|
+
const content = loadProfile(slug);
|
|
535
|
+
if (!content) { res.writeHead(404); res.end(JSON.stringify({ error: 'Profile not found' })); return; }
|
|
536
|
+
|
|
537
|
+
const { extractMetadata } = await import('../lib/monitor.js');
|
|
538
|
+
const meta = extractMetadata(content);
|
|
539
|
+
const personName = meta.name || slug;
|
|
540
|
+
|
|
541
|
+
const person = resolveFromName(personName);
|
|
542
|
+
if (meta.twitterHandle) person.twitterHandle = person.twitterHandle || meta.twitterHandle;
|
|
543
|
+
if (meta.linkedinUrl) person.linkedinUrl = person.linkedinUrl || meta.linkedinUrl;
|
|
544
|
+
|
|
545
|
+
const [rawData, sources] = gatherData(person);
|
|
546
|
+
if (!rawData.trim()) { res.writeHead(400); res.end(JSON.stringify({ error: 'No data found' })); return; }
|
|
547
|
+
|
|
548
|
+
const profile = await synthesizeProfile(rawData, sources);
|
|
549
|
+
saveProfile(personName, profile);
|
|
550
|
+
|
|
551
|
+
// Regenerate cards
|
|
552
|
+
regenerate();
|
|
553
|
+
|
|
554
|
+
console.log(c.green(` ${personName} regenerated.`));
|
|
555
|
+
res.writeHead(200);
|
|
556
|
+
res.end(JSON.stringify({ ok: true, name: personName }));
|
|
557
|
+
} catch (e) {
|
|
558
|
+
console.error(c.red(` Error: ${e.message}`));
|
|
559
|
+
res.writeHead(500);
|
|
560
|
+
res.end(JSON.stringify({ error: e.message }));
|
|
561
|
+
}
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// Static files
|
|
526
566
|
const filePath = req.url === '/' ? path.join(dir, file) : path.join(dir, req.url);
|
|
527
567
|
if (!fs.existsSync(filePath)) { res.writeHead(404); res.end('Not found'); return; }
|
|
528
568
|
const ext = path.extname(filePath);
|
package/lib/card.js
CHANGED
|
@@ -335,6 +335,7 @@ function renderCard(card, index) {
|
|
|
335
335
|
\${card.last_connection ? \`<div style="font-size:0.8em;color:#2563eb;margin:6px 0">๐ค \${card.last_connection}</div>\` : \`<div style="font-size:0.8em;color:#94a3b8;margin:6px 0">๐ก \${card.icebreakers?.[0] || 'No connection yet'}</div>\`}
|
|
336
336
|
\${card.talking_points?.length ? \`<div style="margin:8px 0"><div style="font-size:0.75em;color:#94a3b8;text-transform:uppercase;margin-bottom:4px">Talking Points</div>\${card.talking_points.slice(0,2).map(t => \`<div style="font-size:0.8em;color:#475569;padding:2px 0">โข \${t}</div>\`).join('')}</div>\` : ''}
|
|
337
337
|
\${card.annotations?.length ? \`<div style="border-top:1px solid #e2e8f0;margin-top:8px;padding-top:8px;font-size:0.75em;color:#64748b">๐ \${card.annotations[card.annotations.length-1]}</div>\` : ''}
|
|
338
|
+
<button onclick="event.stopPropagation();regenerateProfile('\${card.slug}',this)" style="margin-top:10px;width:100%;padding:6px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;color:#64748b;font-size:0.75em;cursor:pointer;transition:all 0.2s" onmouseover="this.style.borderColor='#2563eb';this.style.color='#2563eb'" onmouseout="this.style.borderColor='#e2e8f0';this.style.color='#64748b'">๐ Update Profile</button>
|
|
338
339
|
</div>\`;
|
|
339
340
|
}
|
|
340
341
|
|
|
@@ -351,37 +352,45 @@ function openModal(index) {
|
|
|
351
352
|
<img src="\${avatarUrl}" alt="" style="width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid #e2e8f0" onerror="this.style.display='none'">
|
|
352
353
|
<div>
|
|
353
354
|
<h1 style="color:#2563eb;margin-bottom:4px;font-size:1.5em">\${card.name}</h1>
|
|
354
|
-
<p style="color:#64748b">\${card.
|
|
355
|
+
<p style="color:#64748b">\${card.title || ''}\${card.company ? ' @ ' + card.company : ''}</p>
|
|
356
|
+
\${card.previous_role ? \`<p style="color:#94a3b8;font-size:0.8em">Previously: \${card.previous_role}</p>\` : ''}
|
|
355
357
|
\${card.twitter_handle ? \`<a href="https://twitter.com/\${card.twitter_handle}" target="_blank" style="color:#2563eb;font-size:0.85em;text-decoration:none">@\${card.twitter_handle}</a>\` : ''}
|
|
356
358
|
</div>
|
|
357
359
|
</div>
|
|
358
360
|
|
|
359
|
-
\${card.latest_news ? \`<div style="background:#f0f9ff;padding:10px 14px;border-radius:8px;font-size:0.85em;color:#1e40af;margin:12px 0">๐ฐ
|
|
361
|
+
\${card.latest_news ? \`<div style="background:#f0f9ff;padding:10px 14px;border-radius:8px;font-size:0.85em;color:#1e40af;margin:12px 0">๐ฐ \${card.latest_news}</div>\` : ''}
|
|
360
362
|
|
|
361
|
-
<h2>Current Focus
|
|
362
|
-
\${card.current_focus ? \`<p
|
|
363
|
-
\${card.wants ? \`<p><strong
|
|
363
|
+
<h2>Current Focus</h2>
|
|
364
|
+
\${card.current_focus ? \`<p>\${card.current_focus}</p>\` : '<p style="color:#94a3b8">No data available.</p>'}
|
|
365
|
+
\${card.wants ? \`<p><strong>Wants:</strong> \${card.wants}</p>\` : ''}
|
|
364
366
|
|
|
365
|
-
\${card.
|
|
367
|
+
\${card.philosophy?.length ? \`<h2>Core Philosophy</h2>\${card.philosophy.map(p => \`<blockquote style="border-left:3px solid #2563eb;padding:4px 12px;margin:8px 0;color:#475569;font-style:italic">"\${p}"</blockquote>\`).join('')}\` : ''}
|
|
366
368
|
|
|
367
|
-
|
|
368
|
-
<p><strong>MBTI:</strong> <span title="\${card.mbti_reason || ''}" style="cursor:help;border-bottom:1px dashed #94a3b8">\${card.mbti || '?'}</span>\${card.mbti_reason ? \` โ \${card.mbti_reason}\` : ''}</p>
|
|
369
|
-
<div style="display:flex;justify-content:center;margin:16px 0">\${radarSvg(s, 260)}</div>
|
|
369
|
+
\${card.competition?.length ? \`<h2>Competition</h2><p>\${card.competition.join(', ')}</p>\` : ''}
|
|
370
370
|
|
|
371
|
-
\${card.
|
|
371
|
+
\${card.talking_points?.length ? \`<h2>Talking Points</h2><ul>\${card.talking_points.map(t => \`<li>\${t}</li>\`).join('')}</ul>\` : ''}
|
|
372
372
|
|
|
373
373
|
<h2>How to Work With Them</h2>
|
|
374
|
-
\${card.last_connection ? \`<p><strong>๐ค Last
|
|
375
|
-
\${card.icebreakers?.length ? \`<p><strong>๐ก Icebreakers:</strong> \${card.icebreakers.join(', ')}</p>\` : ''}
|
|
374
|
+
\${card.last_connection ? \`<p><strong>๐ค Last:</strong> \${card.last_connection}</p>\` : ''}
|
|
376
375
|
\${card.dos?.length ? \`<p><strong>โ
Do:</strong> \${card.dos.join(' ยท ')}</p>\` : ''}
|
|
377
376
|
\${card.donts?.length ? \`<p><strong>โ Don't:</strong> \${card.donts.join(' ยท ')}</p>\` : ''}
|
|
378
377
|
\${card.gifts?.length ? \`<p><strong>๐ Gifts:</strong> \${card.gifts.join(', ')}</p>\` : ''}
|
|
379
378
|
|
|
379
|
+
\${card.key_quotes?.length ? \`<h2>Key Quotes</h2>\${card.key_quotes.slice(0,5).map(q => \`<p style="font-size:0.85em;color:#475569;padding:2px 0">โข "\${q}"</p>\`).join('')}\` : ''}
|
|
380
|
+
|
|
381
|
+
<h2>Personality</h2>
|
|
382
|
+
<p><strong>MBTI:</strong> <span style="cursor:help;border-bottom:1px dashed #94a3b8" title="\${card.mbti_reason || ''}">\${card.mbti || '?'}</span>\${card.mbti_reason ? \` โ \${card.mbti_reason}\` : ''}</p>
|
|
383
|
+
\${card.superpower ? \`<p><strong>โก Superpower:</strong> \${card.superpower}</p>\` : ''}
|
|
384
|
+
<div style="display:flex;justify-content:center;margin:16px 0">\${radarSvg(s, 240)}</div>
|
|
385
|
+
|
|
380
386
|
\${card.annotations?.length ? \`<h2>Your Notes</h2>\${card.annotations.map(a => \`<p style="font-size:0.85em;color:#64748b">๐ \${a}</p>\`).join('')}\` : ''}
|
|
381
387
|
|
|
382
388
|
\${card.tags?.length ? \`<div class="tags" style="margin-top:12px">\${card.tags.map(t => \`<span class="tag">\${t}</span>\`).join('')}</div>\` : ''}
|
|
383
389
|
|
|
384
|
-
|
|
390
|
+
<div style="display:flex;gap:10px;justify-content:center;margin-top:20px">
|
|
391
|
+
\${card.slug ? \`<a href="\${card.slug}.html" style="color:#2563eb;text-decoration:none;padding:8px 20px;border:1px solid #2563eb;border-radius:8px;display:inline-block">View Full Profile โ</a>\` : ''}
|
|
392
|
+
\${card.slug ? \`<button onclick="regenerateProfile('\${card.slug}',this)" style="padding:8px 20px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;color:#64748b;cursor:pointer;font-size:0.9em">๐ Update</button>\` : ''}
|
|
393
|
+
</div>
|
|
385
394
|
\`;
|
|
386
395
|
|
|
387
396
|
document.getElementById('modal').classList.add('active');
|
|
@@ -393,6 +402,33 @@ function closeModal() {
|
|
|
393
402
|
|
|
394
403
|
document.addEventListener('keydown', e => { if (e.key === 'Escape') closeModal(); });
|
|
395
404
|
|
|
405
|
+
async function regenerateProfile(slug, btn) {
|
|
406
|
+
const originalText = btn.textContent;
|
|
407
|
+
btn.textContent = 'โณ Updating...';
|
|
408
|
+
btn.disabled = true;
|
|
409
|
+
btn.style.opacity = '0.6';
|
|
410
|
+
|
|
411
|
+
try {
|
|
412
|
+
const resp = await fetch(\`/api/regenerate/\${slug}\`);
|
|
413
|
+
const data = await resp.json();
|
|
414
|
+
|
|
415
|
+
if (resp.ok) {
|
|
416
|
+
btn.textContent = 'โ
Updated!';
|
|
417
|
+
btn.style.color = '#16a34a';
|
|
418
|
+
// Reload page after a short delay to show new data
|
|
419
|
+
setTimeout(() => location.reload(), 1500);
|
|
420
|
+
} else {
|
|
421
|
+
btn.textContent = 'โ ' + (data.error || 'Failed');
|
|
422
|
+
btn.style.color = '#dc2626';
|
|
423
|
+
setTimeout(() => { btn.textContent = originalText; btn.disabled = false; btn.style.opacity = '1'; btn.style.color = ''; }, 3000);
|
|
424
|
+
}
|
|
425
|
+
} catch (e) {
|
|
426
|
+
btn.textContent = 'โ Error';
|
|
427
|
+
btn.style.color = '#dc2626';
|
|
428
|
+
setTimeout(() => { btn.textContent = originalText; btn.disabled = false; btn.style.opacity = '1'; btn.style.color = ''; }, 3000);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
396
432
|
// Render
|
|
397
433
|
const grid = document.getElementById('grid');
|
|
398
434
|
grid.innerHTML = cards.map((card, i) => renderCard(card, i)).join('');
|
package/lib/templates.js
CHANGED
|
@@ -1,140 +1,163 @@
|
|
|
1
|
-
export const PROFILE_SYSTEM_PROMPT = `You are an expert
|
|
2
|
-
Given the raw data below from public sources (tweets, LinkedIn
|
|
3
|
-
synthesize
|
|
4
|
-
|
|
5
|
-
## Analysis Framework
|
|
6
|
-
Use these theories to infer personality and behavior:
|
|
7
|
-
- **DISC Model** โ Dominance, Influence, Steadiness, Conscientiousness
|
|
8
|
-
- **Big Five (OCEAN)** โ Openness, Conscientiousness, Extraversion, Agreeableness, Neuroticism
|
|
9
|
-
- **Cialdini's Influence** โ Which persuasion principles this person uses/responds to
|
|
10
|
-
- **Situational Leadership** โ Their decision-making and leadership approach
|
|
1
|
+
export const PROFILE_SYSTEM_PROMPT = `You are an expert relationship intelligence analyst building a VIP contact dossier.
|
|
2
|
+
Given the raw data below from public sources (tweets, LinkedIn, web search, video transcripts, user annotations), \
|
|
3
|
+
synthesize an actionable profile focused on HOW to work with this person.
|
|
11
4
|
|
|
12
5
|
## Rules
|
|
13
|
-
- Only include information
|
|
14
|
-
- For personality
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- If
|
|
19
|
-
- Output ONLY the Markdown profile followed by the JSON metadata block
|
|
6
|
+
- Only include information supported by the provided data
|
|
7
|
+
- For personality/MBTI inferences, note these are estimates based on public behavior
|
|
8
|
+
- Focus on ACTIONABLE intelligence: what they care about NOW, what they want, how to approach them
|
|
9
|
+
- Include their own words whenever possible (direct quotes)
|
|
10
|
+
- If user annotations exist, incorporate them into interaction history
|
|
11
|
+
- If a section has no data, write "No data available."
|
|
12
|
+
- Output ONLY the Markdown profile followed by the JSON metadata block
|
|
20
13
|
|
|
21
14
|
## Output Format
|
|
22
15
|
|
|
23
|
-
# {Full Name}
|
|
16
|
+
# {Full Name} โ Profile
|
|
24
17
|
|
|
25
|
-
> {
|
|
18
|
+
> Current: {current role @ company}
|
|
19
|
+
> Previous: {most notable previous role}
|
|
20
|
+
> Updated: {today's date}
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
- **Title:** {Current role}
|
|
29
|
-
- **Company:** {Current company}
|
|
30
|
-
- **Location:** {City, Country}
|
|
31
|
-
- **Industry:** {Industry/domain}
|
|
22
|
+
---
|
|
32
23
|
|
|
33
|
-
##
|
|
34
|
-
-
|
|
35
|
-
- LinkedIn: {url}
|
|
36
|
-
- Website: {url if found}
|
|
37
|
-
|
|
38
|
-
## Bio
|
|
39
|
-
{2-3 paragraph biography synthesized from public sources}
|
|
40
|
-
|
|
41
|
-
## Personality & Communication Style
|
|
42
|
-
- **DISC Type:** {Primary type (D/I/S/C) with brief rationale}
|
|
43
|
-
- **MBTI Estimate:** {e.g. ENTJ โ with brief rationale}
|
|
44
|
-
- **Communication Style:** {Direct/Diplomatic/Analytical/Storyteller โ with evidence}
|
|
45
|
-
- **Decision-Making:** {Data-driven/Intuition-led/Consensus-seeking/Decisive}
|
|
46
|
-
- **Tone:** {Formal/Casual/Inspiring/Technical}
|
|
47
|
-
- **Key Phrases:** {Recurring phrases or vocabulary patterns they use}
|
|
48
|
-
|
|
49
|
-
## Expertise & Strengths
|
|
50
|
-
- **Core Expertise:** {The domains where they have deep knowledge and proven track record}
|
|
51
|
-
- **Superpower:** {What they do better than almost anyone โ their unique edge}
|
|
52
|
-
- **Known For:** {What peers/media consistently cite them for}
|
|
53
|
-
- **Skills Matrix:**
|
|
54
|
-
- {Skill 1}: {โ
โ
โ
โ
โ
level + brief evidence}
|
|
55
|
-
- {Skill 2}: {โ
โ
โ
โ
โ level + brief evidence}
|
|
56
|
-
- {Skill 3}: {โ
โ
โ
โ
โ level + brief evidence}
|
|
57
|
-
|
|
58
|
-
## Interests & Values
|
|
59
|
-
- **Core Beliefs:** {What they consistently advocate for}
|
|
60
|
-
- **Topics They Care About:** {Recurring themes from speeches, tweets, writing}
|
|
61
|
-
- **Public Positions:** {Publicly stated opinions on relevant issues}
|
|
62
|
-
- **Motivations:** {What drives them โ mission, money, impact, legacy, etc.}
|
|
63
|
-
|
|
64
|
-
## Character & Leadership
|
|
65
|
-
- **Leadership Style:** {Visionary/Operational/Servant-leader/Transformational โ with evidence}
|
|
66
|
-
- **Risk Tolerance:** {Conservative/Calculated/Aggressive โ with evidence}
|
|
67
|
-
- **Management Philosophy:** {How they describe running teams/companies}
|
|
68
|
-
- **Under Pressure:** {How they handle crises, based on public evidence}
|
|
69
|
-
- **Influence Strategy:** {Authority/Reciprocity/Vision/Data/Social-proof โ per Cialdini}
|
|
24
|
+
## Background
|
|
25
|
+
{3-5 bullet points of career highlights โ concise, factual}
|
|
70
26
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
- {
|
|
86
|
-
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Core Philosophy
|
|
30
|
+
{2-4 key beliefs/principles they consistently express, each as:}
|
|
31
|
+
|
|
32
|
+
**"{direct quote}"**
|
|
33
|
+
{1-line interpretation of what this means}
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Leadership & Work Style
|
|
38
|
+
- **Type:** {IC Leader/Delegator/Visionary/Operator โ with evidence}
|
|
39
|
+
- **Speed:** {How fast they move, what pace they expect}
|
|
40
|
+
- **Decision-making:** {Data-driven/Intuition/Consensus โ with evidence}
|
|
41
|
+
- **Communication:** {Direct/Diplomatic/Storyteller โ how they interact publicly}
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Current Focus
|
|
46
|
+
{What they are actively working on and talking about RIGHT NOW}
|
|
47
|
+
- {Focus area 1 with evidence}
|
|
48
|
+
- {Focus area 2 with evidence}
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## What They Want
|
|
53
|
+
{What they're trying to achieve, what they're looking for}
|
|
54
|
+
- {Goal/desire 1}
|
|
55
|
+
- {Goal/desire 2}
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Competition & Positioning
|
|
60
|
+
{Who they see as competition, how they position themselves}
|
|
61
|
+
|
|
62
|
+
---
|
|
87
63
|
|
|
88
64
|
## Recent Activity
|
|
89
|
-
|
|
65
|
+
{Chronological list of notable recent public actions, each as:}
|
|
90
66
|
|
|
91
|
-
|
|
92
|
-
{
|
|
67
|
+
### {Date} โ {Event type}
|
|
68
|
+
- {What happened, with context}
|
|
69
|
+
- {Link if available}
|
|
93
70
|
|
|
94
|
-
|
|
95
|
-
{Family info, hobbies, or personal details only if publicly shared}
|
|
71
|
+
---
|
|
96
72
|
|
|
97
|
-
##
|
|
98
|
-
{
|
|
73
|
+
## Interaction History
|
|
74
|
+
{User's own notes and meeting history โ from annotations and Notes section}
|
|
75
|
+
{If no interactions yet, write "No interactions recorded yet."}
|
|
99
76
|
|
|
100
77
|
---
|
|
101
|
-
|
|
78
|
+
|
|
79
|
+
## How to Work With Them
|
|
80
|
+
|
|
81
|
+
**Talking Points:**
|
|
82
|
+
- {Topic 1 โ why it would resonate}
|
|
83
|
+
- {Topic 2 โ why it would resonate}
|
|
84
|
+
- {Topic 3 โ why it would resonate}
|
|
85
|
+
|
|
86
|
+
**Do:**
|
|
87
|
+
- {Approach 1}
|
|
88
|
+
- {Approach 2}
|
|
89
|
+
- {Approach 3}
|
|
90
|
+
|
|
91
|
+
**Don't:**
|
|
92
|
+
- {Anti-pattern 1}
|
|
93
|
+
- {Anti-pattern 2}
|
|
94
|
+
- {Anti-pattern 3}
|
|
95
|
+
|
|
96
|
+
**Gift Ideas:** {Based on known interests}
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Key Quotes
|
|
101
|
+
{5-8 memorable quotes from this person, each on its own line with source context}
|
|
102
|
+
- "{quote}" โ {context}
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Personality (Inferred)
|
|
107
|
+
- **MBTI:** {type} โ {1-2 sentence rationale}
|
|
108
|
+
- **DISC:** {type}
|
|
109
|
+
- **Risk tolerance:** {Conservative/Calculated/Aggressive}
|
|
110
|
+
- **Influence style:** {Authority/Reciprocity/Vision/Data per Cialdini}
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Links
|
|
115
|
+
- Twitter: {url}
|
|
116
|
+
- LinkedIn: {url}
|
|
117
|
+
- Website/Blog: {url}
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
IMPORTANT: After the profile, output a JSON metadata block in EXACTLY this format:
|
|
102
121
|
|
|
103
122
|
<!-- VIP_DATA
|
|
104
123
|
{
|
|
105
124
|
"name": "{Full Name}",
|
|
106
125
|
"title": "{Current role}",
|
|
107
126
|
"company": "{Company}",
|
|
127
|
+
"previous_role": "{Most notable previous role}",
|
|
108
128
|
"location": "{City, Country}",
|
|
109
129
|
"industry": "{Industry}",
|
|
110
|
-
"
|
|
130
|
+
"one_liner": "{who is this person in <=10 words}",
|
|
111
131
|
"mbti": "{4-letter MBTI}",
|
|
112
|
-
"mbti_reason": "{1-2 sentence
|
|
132
|
+
"mbti_reason": "{1-2 sentence why this MBTI}",
|
|
133
|
+
"disc": "{D/I/S/C}",
|
|
113
134
|
"scores": {
|
|
114
135
|
"openness": {1-5},
|
|
115
136
|
"conscientiousness": {1-5},
|
|
116
137
|
"extraversion": {1-5},
|
|
117
138
|
"agreeableness": {1-5},
|
|
118
139
|
"resilience": {1-5},
|
|
119
|
-
"decision_style": {1-5
|
|
120
|
-
"risk_appetite": {1-5
|
|
121
|
-
"communication": {1-5
|
|
140
|
+
"decision_style": {1-5},
|
|
141
|
+
"risk_appetite": {1-5},
|
|
142
|
+
"communication": {1-5},
|
|
122
143
|
"influence": {1-5},
|
|
123
144
|
"leadership": {1-5}
|
|
124
145
|
},
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"latest_news": "{most recent notable thing from the data, with date if available}",
|
|
146
|
+
"current_focus": "{what they are focused on NOW}",
|
|
147
|
+
"wants": "{what they are trying to achieve}",
|
|
148
|
+
"latest_news": "{most recent notable event with date}",
|
|
149
|
+
"philosophy": ["{core belief 1}", "{core belief 2}"],
|
|
150
|
+
"key_quotes": ["{memorable quote 1}", "{memorable quote 2}", "{memorable quote 3}"],
|
|
131
151
|
"talking_points": ["{actionable topic 1}", "{actionable topic 2}", "{actionable topic 3}"],
|
|
132
|
-
"
|
|
152
|
+
"expertise": ["{area1}", "{area2}", "{area3}"],
|
|
153
|
+
"superpower": "{unique edge in one phrase}",
|
|
154
|
+
"tags": ["{tag1}", "{tag2}", "{tag3}"],
|
|
133
155
|
"icebreakers": ["{topic1}", "{topic2}", "{topic3}"],
|
|
134
156
|
"dos": ["{do1}", "{do2}", "{do3}"],
|
|
135
157
|
"donts": ["{dont1}", "{dont2}", "{dont3}"],
|
|
136
|
-
"gifts": ["{
|
|
137
|
-
"
|
|
158
|
+
"gifts": ["{gift idea 1}", "{gift idea 2}"],
|
|
159
|
+
"competition": ["{competitor/rival 1}", "{competitor/rival 2}"],
|
|
160
|
+
"twitter_handle": "{handle without @}"
|
|
138
161
|
}
|
|
139
162
|
-->`;
|
|
140
163
|
|
|
@@ -143,7 +166,7 @@ export const CHANGE_DETECTION_PROMPT = `Compare the OLD profile and NEW data bel
|
|
|
143
166
|
- New achievements or milestones
|
|
144
167
|
- Notable new public statements or positions
|
|
145
168
|
- Changes in focus areas or interests
|
|
146
|
-
-
|
|
169
|
+
- New competitive moves or product launches
|
|
147
170
|
|
|
148
171
|
If there are significant changes, output a brief summary (2-3 sentences) of what changed.
|
|
149
172
|
If there are no significant changes, output exactly: NO_SIGNIFICANT_CHANGES
|