← back to Rentv
social: collapsible left Growth·LinkedIn target rail — CRE conference-attendee roles + registry pull + per-name letter generator
835146a0b4525c3b5066ea01b4443a1cd4a40119 · 2026-07-30 20:18:27 -0700 · Steve
Files touched
Diff
commit 835146a0b4525c3b5066ea01b4443a1cd4a40119
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jul 30 20:18:27 2026 -0700
social: collapsible left Growth·LinkedIn target rail — CRE conference-attendee roles + registry pull + per-name letter generator
---
public/social.html | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/public/social.html b/public/social.html
index 6346d4b3..e3f9657d 100644
--- a/public/social.html
+++ b/public/social.html
@@ -310,9 +310,56 @@
document.getElementById('grailNewBtn').onclick=gAddCustom;
document.getElementById('grailNew').addEventListener('keydown',function(e){ if(e.key==='Enter') gAddCustom(); });
document.getElementById('grailList').addEventListener('click',function(e){
+ var lt=e.target.closest('[data-letter]'); if(lt){ genLetter(lt.getAttribute('data-letter')); return; }
var st=e.target.closest('[data-st]'); if(st){ var id=st.getAttribute('data-st'); var l=gload(); l.forEach(function(x){ if(x.id===id) x.status=((x.status||0)+1)%GSTL.length; }); gsave(l); grender(); return; }
var del=e.target.closest('[data-del]'); if(del){ var did=del.getAttribute('data-del'); gsave(gload().filter(function(x){return x.id!==did;})); grender(); }
});
+
+ // ── Pick a name (left) → generate a personalized outreach letter (fills compose, right) ──
+ var GSEL=null;
+ var GOPENERS=[
+ 'I’ve been following {a} and wanted to connect.',
+ 'Your work around {a} caught my eye — I wanted to reach out directly.',
+ 'I’m reaching out because of {a}, and thought it was worth connecting.'
+ ];
+ var GROLE={
+ 'Owners / Investors':{a:['your portfolio activity across the Western U.S.','how owners are positioning for the next cycle'],cta:'a complimentary seat at our next State of the Market conference'},
+ 'Developers':{a:['your current development pipeline','how developers are navigating capital and entitlements right now'],cta:'a panel seat and complimentary registration at the next RENTV summit'},
+ 'Brokers':{a:['the deals moving in your market','getting your listings and closings in front of our CRE audience'],cta:'a delegate invitation to the next State of the Market conference'},
+ 'Lenders & Capital Sources':{a:['where capital is flowing in Western CRE','the debt-and-equity picture heading into next quarter'],cta:'a capital-markets panel seat or a sponsorship at our next summit'},
+ 'Vendors / Service Providers':{a:['reaching CRE owners, developers and brokers directly','putting your firm in front of the decision-makers who attend'],cta:'an exhibitor or sponsor package at our next conference'},
+ 'Legal':{a:['the legal questions shaping CRE deals right now','sharing your expertise with our audience'],cta:'a thought-leadership panel seat at the next RENTV summit'},
+ 'Construction / GCs':{a:['the projects breaking ground across the West','showcasing your build pipeline to owners and developers'],cta:'a complimentary seat at our next State of the Market conference'},
+ 'Title & Escrow':{a:['keeping deals closing cleanly in this market','partnering on our deal coverage'],cta:'a partner or sponsor conversation ahead of the next summit'},
+ 'Other':{a:['your work in commercial real estate','connecting around Western-U.S. CRE'],cta:'an invitation to our next State of the Market conference'}
+ };
+ function firstName(n){ return String(n||'').trim().split(/\s+/)[0]; }
+ function looksFirm(n){ return /\b(inc|llc|corp|co|company|group|realty|properties|partners|capital|associates|holdings|ventures|bank|trust|advisors|management)\b/i.test(n); }
+ function letterFor(x,v){
+ var R=GROLE[x.cat]||GROLE['Other'], i=Math.max(0,(v||1)-1);
+ var a=R.a[i%R.a.length], opener=GOPENERS[i%GOPENERS.length].replace('{a}',a);
+ var isCat=x.kind==='category';
+ var greet=isCat?'there':(looksFirm(x.name)?(cap(x.name)+' team'):cap(firstName(x.name)));
+ var text='Hi '+greet+',\n\n'
+ +'I’m Steve with RENTV — since 1998 we’ve covered the deals that move Western U.S. commercial real estate: home of CRE Talk with Steve & Arnie, the State of the Market conferences, and The REview.\n\n'
+ +opener+'\n\n'
+ +'I’d love to offer you '+R.cta+', and to connect here on LinkedIn as we cover more of the Western-U.S. market.\n\n'
+ +'Best,\nSteve\nRENTV.com';
+ return { topic:'Outreach — '+(isCat?x.cat:x.name), text:text };
+ }
+ function genLetter(id){
+ var l=gload(), it=null; l.forEach(function(x){ if(x.id===id) it=x; });
+ if(!it)return;
+ it.lv=(it.lv||0)+1; gsave(l); // bump variant → regenerates a different angle each click
+ var out=letterFor(it,it.lv);
+ document.getElementById('pf').value='LinkedIn';
+ document.getElementById('topic').value=out.topic;
+ document.getElementById('text').value=out.text;
+ GSEL=id; grender();
+ var t=document.getElementById('text'); t.scrollIntoView({behavior:'smooth',block:'center'});
+ document.getElementById('msg').textContent='Letter ready for '+it.name+' — edit & Save draft →';
+ }
+
gsetOpen(localStorage.getItem(GOPEN)==='1'); // collapsed by default
grender();
</script>
← 47c8ac14 pr-intelligence: cycle-4 extractor upgrades — single-line Na
·
back to Rentv
·
role icons: 13-icon SVG vocabulary for all CRE user/role typ eaccaf1f →