vipcare 0.4.0 โ†’ 0.5.0

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.
Files changed (3) hide show
  1. package/lib/card.js +17 -12
  2. package/lib/templates.js +123 -100
  3. package/package.json +1 -1
package/lib/card.js CHANGED
@@ -351,32 +351,37 @@ function openModal(index) {
351
351
  <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
352
  <div>
353
353
  <h1 style="color:#2563eb;margin-bottom:4px;font-size:1.5em">\${card.name}</h1>
354
- <p style="color:#64748b">\${card.one_liner || card.title || ''}\${card.company ? ' @ ' + card.company : ''}</p>
354
+ <p style="color:#64748b">\${card.title || ''}\${card.company ? ' @ ' + card.company : ''}</p>
355
+ \${card.previous_role ? \`<p style="color:#94a3b8;font-size:0.8em">Previously: \${card.previous_role}</p>\` : ''}
355
356
  \${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
357
  </div>
357
358
  </div>
358
359
 
359
- \${card.latest_news ? \`<div style="background:#f0f9ff;padding:10px 14px;border-radius:8px;font-size:0.85em;color:#1e40af;margin:12px 0">๐Ÿ“ฐ <strong>Latest:</strong> \${card.latest_news}</div>\` : ''}
360
+ \${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
361
 
361
- <h2>Current Focus & Goals</h2>
362
- \${card.current_focus ? \`<p><strong>๐ŸŽฏ Focus:</strong> \${card.current_focus}</p>\` : ''}
363
- \${card.wants ? \`<p><strong>๐Ÿ’Ž Wants:</strong> \${card.wants}</p>\` : ''}
362
+ <h2>Current Focus</h2>
363
+ \${card.current_focus ? \`<p>\${card.current_focus}</p>\` : '<p style="color:#94a3b8">No data available.</p>'}
364
+ \${card.wants ? \`<p><strong>Wants:</strong> \${card.wants}</p>\` : ''}
364
365
 
365
- \${card.talking_points?.length ? \`<h2>Talking Points</h2><ul>\${card.talking_points.map(t => \`<li>\${t}</li>\`).join('')}</ul>\` : ''}
366
+ \${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
367
 
367
- <h2>Personality</h2>
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>
368
+ \${card.competition?.length ? \`<h2>Competition</h2><p>\${card.competition.join(', ')}</p>\` : ''}
370
369
 
371
- \${card.superpower ? \`<p><strong>โšก Superpower:</strong> \${card.superpower}</p>\` : ''}
370
+ \${card.talking_points?.length ? \`<h2>Talking Points</h2><ul>\${card.talking_points.map(t => \`<li>\${t}</li>\`).join('')}</ul>\` : ''}
372
371
 
373
372
  <h2>How to Work With Them</h2>
374
- \${card.last_connection ? \`<p><strong>๐Ÿค Last connection:</strong> \${card.last_connection}</p>\` : ''}
375
- \${card.icebreakers?.length ? \`<p><strong>๐Ÿ’ก Icebreakers:</strong> \${card.icebreakers.join(', ')}</p>\` : ''}
373
+ \${card.last_connection ? \`<p><strong>๐Ÿค Last:</strong> \${card.last_connection}</p>\` : ''}
376
374
  \${card.dos?.length ? \`<p><strong>โœ… Do:</strong> \${card.dos.join(' ยท ')}</p>\` : ''}
377
375
  \${card.donts?.length ? \`<p><strong>โŒ Don't:</strong> \${card.donts.join(' ยท ')}</p>\` : ''}
378
376
  \${card.gifts?.length ? \`<p><strong>๐ŸŽ Gifts:</strong> \${card.gifts.join(', ')}</p>\` : ''}
379
377
 
378
+ \${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('')}\` : ''}
379
+
380
+ <h2>Personality</h2>
381
+ <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>
382
+ \${card.superpower ? \`<p><strong>โšก Superpower:</strong> \${card.superpower}</p>\` : ''}
383
+ <div style="display:flex;justify-content:center;margin:16px 0">\${radarSvg(s, 240)}</div>
384
+
380
385
  \${card.annotations?.length ? \`<h2>Your Notes</h2>\${card.annotations.map(a => \`<p style="font-size:0.85em;color:#64748b">๐Ÿ“ \${a}</p>\`).join('')}\` : ''}
381
386
 
382
387
  \${card.tags?.length ? \`<div class="tags" style="margin-top:12px">\${card.tags.map(t => \`<span class="tag">\${t}</span>\`).join('')}</div>\` : ''}
package/lib/templates.js CHANGED
@@ -1,140 +1,163 @@
1
- export const PROFILE_SYSTEM_PROMPT = `You are an expert behavioral analyst building a comprehensive VIP contact profile.
2
- Given the raw data below from public sources (tweets, LinkedIn snippets, web search results, video transcripts), \
3
- synthesize a deep-analysis profile in the exact Markdown format provided.
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 you can directly support from the provided data
14
- - For personality analysis, these are INFERENCES based on public behavior โ€” always note this
15
- - Score each dimension 1-5 based on evidence strength
16
- - If a section has no data, write "No public information found."
17
- - Do not fabricate details
18
- - If video transcripts are included, pay special attention to the person's own words, speaking patterns, and how they frame arguments
19
- - Output ONLY the Markdown profile followed by the JSON metadata block โ€” no extra commentary
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
- > {One-line summary / tagline}
18
+ > Current: {current role @ company}
19
+ > Previous: {most notable previous role}
20
+ > Updated: {today's date}
26
21
 
27
- ## Basic Info
28
- - **Title:** {Current role}
29
- - **Company:** {Current company}
30
- - **Location:** {City, Country}
31
- - **Industry:** {Industry/domain}
22
+ ---
32
23
 
33
- ## Links
34
- - Twitter: {url}
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
- ## How to Work With Them
72
- - **Icebreaker Topics:** {3 conversation starters based on their interests}
73
- - **Do:** {3 things that would resonate positively}
74
- - **Don't:** {3 things to avoid based on known preferences}
75
- - **Gift Ideas:** {Based on hobbies, interests, values}
76
- - **Communication Tips:** {Best way to reach/engage this person}
77
- - **Meeting Prep:** {What to prepare before meeting them}
78
-
79
- ## Key Interests & Topics
80
- - {Topic 1}
81
- - {Topic 2}
82
- - {Topic 3}
83
-
84
- ## Notable Achievements
85
- - {Achievement 1}
86
- - {Achievement 2}
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
- - {Summary of recent public posts/tweets/news}
65
+ {Chronological list of notable recent public actions, each as:}
90
66
 
91
- ## Background
92
- {Education, career history, other public background}
67
+ ### {Date} โ€” {Event type}
68
+ - {What happened, with context}
69
+ - {Link if available}
93
70
 
94
- ## Personal
95
- {Family info, hobbies, or personal details only if publicly shared}
71
+ ---
96
72
 
97
- ## Notes
98
- {Any other relevant public information}
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
- IMPORTANT: After the Markdown profile above, output a JSON metadata block in EXACTLY this format:
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
- "disc": "{D/I/S/C primary type letter}",
130
+ "one_liner": "{who is this person in <=10 words}",
111
131
  "mbti": "{4-letter MBTI}",
112
- "mbti_reason": "{1-2 sentence explanation of why this MBTI type}",
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, 1=intuition 5=data-driven},
120
- "risk_appetite": {1-5, 1=conservative 5=aggressive},
121
- "communication": {1-5, 1=reserved 5=expressive},
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
- "expertise": ["{area1}", "{area2}", "{area3}"],
126
- "superpower": "{their unique edge in one phrase}",
127
- "one_liner": "{who is this person in <=10 words}",
128
- "current_focus": "{what they are focused on RIGHT NOW based on latest data}",
129
- "wants": "{what they are trying to achieve or looking for}",
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
- "tags": ["{tag1}", "{tag2}", "{tag3}", "{tag4}"],
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": ["{gift1}", "{gift2}"],
137
- "quote": "{a representative quote from this person}"
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
- - Personality insights from new data
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vipcare",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Auto-build VIP person profiles from Twitter/LinkedIn public data",
5
5
  "type": "module",
6
6
  "bin": {