← back to Marketing Command Center
linkedin panel: add Follow list mode (ported from li-clicklist.html)
e347c430b9866b11d3b5d619f699bc00758b6081 · 2026-07-16 10:10:32 -0700 · steve
New segmented toggle in the LinkedIn panel: Compose a post | Follow list.
Follow list is data-driven from public/data/linkedin-followlist.json (179
people across Hospitality/New-leads/Warm sections + 8 saved-searches),
baked into the project so it deploys to Kamatera (the ~/li-*.json source
files only exist on the Mac). Per-person 'followed' checkmarks persist to
localStorage with a progress bar + name filter, mirroring the :9819 hub.
Files touched
A public/data/linkedin-followlist.jsonM public/panels/linkedin.htmlM public/panels/linkedin.js
Diff
commit e347c430b9866b11d3b5d619f699bc00758b6081
Author: steve <steve@designerwallcoverings.com>
Date: Thu Jul 16 10:10:32 2026 -0700
linkedin panel: add Follow list mode (ported from li-clicklist.html)
New segmented toggle in the LinkedIn panel: Compose a post | Follow list.
Follow list is data-driven from public/data/linkedin-followlist.json (179
people across Hospitality/New-leads/Warm sections + 8 saved-searches),
baked into the project so it deploys to Kamatera (the ~/li-*.json source
files only exist on the Mac). Per-person 'followed' checkmarks persist to
localStorage with a progress bar + name filter, mirroring the :9819 hub.
---
public/data/linkedin-followlist.json | 967 +++++++++++++++++++++++++++++++++++
public/panels/linkedin.html | 32 ++
public/panels/linkedin.js | 70 +++
3 files changed, 1069 insertions(+)
diff --git a/public/data/linkedin-followlist.json b/public/data/linkedin-followlist.json
new file mode 100644
index 0000000..5abccc2
--- /dev/null
+++ b/public/data/linkedin-followlist.json
@@ -0,0 +1,967 @@
+{
+ "source": "li-clicklist.html",
+ "updated": "2026-06-30",
+ "guidance": "Open each person's LinkedIn PROFILE in your normal Chrome (logged into LinkedIn) and click Follow (or More → Follow). Sales-Nav rows: View profile → Follow. Check them off as you go — progress is saved on this device.",
+ "sections": [
+ {
+ "id": "hospitality",
+ "title": "Hospitality reps — follow these",
+ "note": "Real hospitality / FF&E people. Each → their profile → Follow.",
+ "people": [
+ {
+ "name": "Joseph Wright",
+ "href": "https://www.linkedin.com/in/joseph-wright-421a74121/",
+ "kind": "profile"
+ },
+ {
+ "name": "Nicole Hance",
+ "href": "https://www.linkedin.com/in/nicole-h-7380564/",
+ "kind": "profile"
+ },
+ {
+ "name": "Caz Walker",
+ "href": "https://www.linkedin.com/in/caralynwalker/",
+ "kind": "profile"
+ },
+ {
+ "name": "Shelley Hughes Straughan",
+ "href": "https://www.linkedin.com/in/shelley-hughes-straughan-7581805a/",
+ "kind": "profile"
+ },
+ {
+ "name": "Florencia DeRoussel, NCIDQ",
+ "href": "https://www.linkedin.com/in/withinstudio/",
+ "kind": "profile"
+ },
+ {
+ "name": "Michele Tabat",
+ "href": "https://www.linkedin.com/in/michele-tabat-7305351/",
+ "kind": "profile"
+ },
+ {
+ "name": "Daniela Maniezzo",
+ "href": "https://www.linkedin.com/in/daniela-maniezzo-0631662/",
+ "kind": "profile"
+ },
+ {
+ "name": "Lora Hunsaker",
+ "href": "https://www.linkedin.com/in/lora-hunsaker-775476b/",
+ "kind": "profile"
+ },
+ {
+ "name": "Lisa Lacombe",
+ "href": "https://www.linkedin.com/in/lisalacombe/",
+ "kind": "profile"
+ },
+ {
+ "name": "Courtnye Blair",
+ "href": "https://www.linkedin.com/in/courtnyeblair/",
+ "kind": "profile"
+ },
+ {
+ "name": "Alicia Cannon",
+ "href": "https://www.linkedin.com/in/ajcdesign/",
+ "kind": "profile"
+ },
+ {
+ "name": "Macelle Albelda",
+ "href": "https://www.linkedin.com/in/macelle/",
+ "kind": "profile"
+ }
+ ]
+ },
+ {
+ "id": "new-leads",
+ "title": "New leads to follow",
+ "note": "Open each profile and click Follow. Sales-Nav-tagged rows: View profile → Follow.",
+ "people": [
+ {
+ "name": "Eran Chen",
+ "href": "https://www.linkedin.com/in/eran-chen",
+ "kind": "profile"
+ },
+ {
+ "name": "Ryan Ghere AIA - Lic. WA",
+ "href": "https://www.linkedin.com/in/ryanghere",
+ "kind": "profile"
+ },
+ {
+ "name": "Karin Jeske",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAABOzYBI1-WNQIAhzV_DKoao1aiK2H-KBE,NAME_SEARCH,lm1c",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Melanie Freeland",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAHv9V4B_RUNmw5FxU0IFPm_VA5gbCNJfWo,NAME_SEARCH,MVrM",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Gefa Banini",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAC7u2f8BOLkPPBU5ta65P2roJVUmxJfgI7g,NAME_SEARCH,GorY",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Melissa Van Zee",
+ "href": "https://www.linkedin.com/in/melissavanzee",
+ "kind": "profile"
+ },
+ {
+ "name": "FORD LININGER",
+ "href": "https://www.linkedin.com/in/ford-lininger-4b05004",
+ "kind": "profile"
+ },
+ {
+ "name": "Laura Muller",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAp8ZDkBO6jSyevO9bzqOUIjvew92qi4D9I,NAME_SEARCH,gPFP",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Stina Funch",
+ "href": "https://www.linkedin.com/in/stinafunch",
+ "kind": "profile"
+ },
+ {
+ "name": "Sarah Conly",
+ "href": "https://www.linkedin.com/in/sarah-conly-50531b21",
+ "kind": "profile"
+ },
+ {
+ "name": "Polly Bento",
+ "href": "https://www.linkedin.com/in/polly-bento-29132210",
+ "kind": "profile"
+ },
+ {
+ "name": "Designer Christopher Grubb",
+ "href": "https://www.linkedin.com/in/cgrubb",
+ "kind": "profile"
+ },
+ {
+ "name": "Brooke Schneider",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAJGIYEBTgyBXIx5mvHRJHd4sVFj4m3ZwCo,NAME_SEARCH,86zt",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Stephen Jones",
+ "href": "https://www.linkedin.com/in/sfjonesarchitects",
+ "kind": "profile"
+ },
+ {
+ "name": "MJ Carlson",
+ "href": "https://www.linkedin.com/in/mj-carlson-1b831b3a",
+ "kind": "profile"
+ },
+ {
+ "name": "Rem D Koolhaas",
+ "href": "https://www.linkedin.com/in/rem-d-koolhaas-64439636",
+ "kind": "profile"
+ },
+ {
+ "name": "Ashley N. Wilkins",
+ "href": "https://www.linkedin.com/in/ashleynwilkins",
+ "kind": "profile"
+ },
+ {
+ "name": "Evan Bliss",
+ "href": "https://www.linkedin.com/in/evanwbliss",
+ "kind": "profile"
+ },
+ {
+ "name": "Nicholas Cope",
+ "href": "https://www.linkedin.com/in/nick-cope",
+ "kind": "profile"
+ },
+ {
+ "name": "Josh Cormany",
+ "href": "https://www.linkedin.com/in/bcormany",
+ "kind": "profile"
+ },
+ {
+ "name": "Philip Stein",
+ "href": "https://www.linkedin.com/in/philip-stein-a9a2a56",
+ "kind": "profile"
+ },
+ {
+ "name": "Bayard Winthrop",
+ "href": "https://www.linkedin.com/in/bayard-winthrop-bbbb04b",
+ "kind": "profile"
+ },
+ {
+ "name": "Jon Sherman",
+ "href": "https://www.linkedin.com/in/jon-sherman-506a5a5",
+ "kind": "profile"
+ },
+ {
+ "name": "Sandro Marchesin",
+ "href": "https://www.linkedin.com/in/sandro-marchesin-28879339",
+ "kind": "profile"
+ },
+ {
+ "name": "Ari Marom",
+ "href": "https://www.linkedin.com/in/nylaseroutlet",
+ "kind": "profile"
+ },
+ {
+ "name": "Julie Rootes",
+ "href": "https://www.linkedin.com/in/julierootes",
+ "kind": "profile"
+ },
+ {
+ "name": "Joon Kim",
+ "href": "https://www.linkedin.com/in/joon-kim-64525913/",
+ "kind": "profile"
+ },
+ {
+ "name": "Olivia Erwin Rosenthal",
+ "href": "https://www.linkedin.com/in/olivia-erwin-rosenthal-693810a",
+ "kind": "profile"
+ },
+ {
+ "name": "Lisa Kanning",
+ "href": "https://www.linkedin.com/in/lisa-kanning-20308420",
+ "kind": "profile"
+ },
+ {
+ "name": "Mario Romano",
+ "href": "https://www.linkedin.com/in/mariosromano",
+ "kind": "profile"
+ },
+ {
+ "name": "Clare Vivier",
+ "href": "https://www.linkedin.com/in/clare-vivier-16904172",
+ "kind": "profile"
+ },
+ {
+ "name": "Erik Lindstrom",
+ "href": "https://www.linkedin.com/in/eriklindstromrugs",
+ "kind": "profile"
+ },
+ {
+ "name": "Andrea Ching",
+ "href": "https://www.linkedin.com/in/andreaching2009",
+ "kind": "profile"
+ },
+ {
+ "name": "Michael Allison",
+ "href": "https://www.linkedin.com/in/groupfourdesignstudio",
+ "kind": "profile"
+ },
+ {
+ "name": "Stephanie Rigolot, Assoc. AIA",
+ "href": "https://www.linkedin.com/in/stephanierigolot",
+ "kind": "profile"
+ },
+ {
+ "name": "Myan Alaa",
+ "href": "https://www.linkedin.com/in/myan-alaa",
+ "kind": "profile"
+ },
+ {
+ "name": "Jeff Dey",
+ "href": "https://www.linkedin.com/in/jeff-dey-36263310",
+ "kind": "profile"
+ },
+ {
+ "name": "Hannah Tringham",
+ "href": "https://www.linkedin.com/in/hannah-tringham",
+ "kind": "profile"
+ },
+ {
+ "name": "Nicole Murray",
+ "href": "https://www.linkedin.com/in/nicolemurray",
+ "kind": "profile"
+ },
+ {
+ "name": "Geoffrey De sousa",
+ "href": "https://www.linkedin.com/in/geoffrey-de-sousa-243b447",
+ "kind": "profile"
+ },
+ {
+ "name": "Donna Livingston",
+ "href": "https://www.linkedin.com/in/donna-livingston-354bb044",
+ "kind": "profile"
+ },
+ {
+ "name": "Donald Pollard Jr., MBA",
+ "href": "https://www.linkedin.com/in/donaldspollard",
+ "kind": "profile"
+ },
+ {
+ "name": "Donda Mullis",
+ "href": "https://www.linkedin.com/in/dondamullis",
+ "kind": "profile"
+ },
+ {
+ "name": "Ammie Kim",
+ "href": "https://www.linkedin.com/in/ammie-kim-150aa752",
+ "kind": "profile"
+ },
+ {
+ "name": "Jim Brett",
+ "href": "https://www.linkedin.com/in/jim-brett-419687a",
+ "kind": "profile"
+ },
+ {
+ "name": "Heesham Naji",
+ "href": "https://www.linkedin.com/in/heeshamnaji",
+ "kind": "profile"
+ },
+ {
+ "name": "John Feldman",
+ "href": "https://www.linkedin.com/in/jim-brett-419687a",
+ "kind": "profile"
+ },
+ {
+ "name": "Donna Puzifera",
+ "href": "https://www.linkedin.com/in/donna-puzifera-52566829",
+ "kind": "profile"
+ },
+ {
+ "name": "Kimberly Pucci",
+ "href": "https://www.linkedin.com/in/kimberlypucci",
+ "kind": "profile"
+ },
+ {
+ "name": "Marc Blackwell",
+ "href": "https://www.linkedin.com/in/marc-blackwell-20091a3",
+ "kind": "profile"
+ },
+ {
+ "name": "Melanie Wasilewski",
+ "href": "https://www.linkedin.com/in/melanie-wasilewski-9a768a15",
+ "kind": "profile"
+ },
+ {
+ "name": "Christian S.",
+ "href": "https://www.linkedin.com/in/christian-schulz-9952005",
+ "kind": "profile"
+ },
+ {
+ "name": "Charlotte Dunagan",
+ "href": "https://www.linkedin.com/in/charlotte-dunagan-143a6950",
+ "kind": "profile"
+ },
+ {
+ "name": "Keith Baltimore",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABXoZZ4BtCA0d4LT4o5SQ5w0ZQzWuj-yIeI,NAME_SEARCH,U_Od",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Sarah Lawson, NCIDQ, CID, LEED® AP",
+ "href": "https://www.linkedin.com/in/slawson413",
+ "kind": "profile"
+ },
+ {
+ "name": "Denise Wenacur",
+ "href": "https://www.linkedin.com/in/denise-wenacur-aa156321",
+ "kind": "profile"
+ },
+ {
+ "name": "Robert Passal",
+ "href": "https://www.linkedin.com/in/robert-passal-1284174",
+ "kind": "profile"
+ },
+ {
+ "name": "Steven Reed Love",
+ "href": "https://www.linkedin.com/in/steven-reed-love-b756214",
+ "kind": "profile"
+ },
+ {
+ "name": "Heidi Richardson",
+ "href": "https://www.linkedin.com/in/heidi-richardson-architect",
+ "kind": "profile"
+ },
+ {
+ "name": "Sean O'Connor",
+ "href": "https://www.linkedin.com/in/sean-o-connor-61218b4",
+ "kind": "profile"
+ },
+ {
+ "name": "Robert Koshgarian",
+ "href": "https://www.linkedin.com/in/sean-o-connor-61218b4",
+ "kind": "profile"
+ },
+ {
+ "name": "Robert Drury",
+ "href": "https://www.linkedin.com/in/robertmdrury",
+ "kind": "profile"
+ },
+ {
+ "name": "Gary Trudell",
+ "href": "https://www.linkedin.com/in/garytrudell",
+ "kind": "profile"
+ },
+ {
+ "name": "BOBBY BENVENISTE",
+ "href": "https://www.linkedin.com/in/bobbybenveniste",
+ "kind": "profile"
+ },
+ {
+ "name": "Lisa McClung",
+ "href": "https://www.linkedin.com/in/intllc",
+ "kind": "profile"
+ },
+ {
+ "name": "Jes Gordon",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAAywoUBRaWfGW6s4vIg5Et1zeL_fEQsuYY,NAME_SEARCH,KWQs",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Rick Howard",
+ "href": "https://www.linkedin.com/in/rick-howard-57866532",
+ "kind": "profile"
+ },
+ {
+ "name": "Jun Aizaki",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAADruAAB1zr0FunAmZG58gtszPwNNGvMf7A,NAME_SEARCH,OPm6",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Phil Norman, ASID",
+ "href": "https://www.linkedin.com/in/normandesigngroup",
+ "kind": "profile"
+ },
+ {
+ "name": "Mr. Shiv Talwar",
+ "href": "https://www.linkedin.com/in/mr-shiv-talwar-3a719b15",
+ "kind": "profile"
+ },
+ {
+ "name": "Jana Dadant, NCIDQ",
+ "href": "https://www.linkedin.com/in/janadadant",
+ "kind": "profile"
+ },
+ {
+ "name": "Douglas DeBoer",
+ "href": "https://www.linkedin.com/in/rebeldesign-douglasdeboer",
+ "kind": "profile"
+ },
+ {
+ "name": "Magdalena Gruszczynska",
+ "href": "https://www.linkedin.com/in/magdagruszczynska",
+ "kind": "profile"
+ },
+ {
+ "name": "Fatma Tekeci",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAA0ZgsEBqGBSedRzXS8YYK0rzLrUnGy-maU,NAME_SEARCH,j6b5",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Michael De Paulo",
+ "href": "https://www.linkedin.com/in/michael-de-paulo-64a15523",
+ "kind": "profile"
+ },
+ {
+ "name": "Kimberly Wong",
+ "href": "https://www.linkedin.com/in/kimberlyjwong",
+ "kind": "profile"
+ },
+ {
+ "name": "Eugenia Kim",
+ "href": "https://www.linkedin.com/in/eugeniakim",
+ "kind": "profile"
+ },
+ {
+ "name": "James Crisp",
+ "href": "https://www.linkedin.com/in/crisparchitects",
+ "kind": "profile"
+ },
+ {
+ "name": "Morgan Simpson-Thaggard",
+ "href": "https://www.linkedin.com/in/morgan-h-simpson",
+ "kind": "profile"
+ },
+ {
+ "name": "Robert Nebolon, AIA",
+ "href": "https://www.linkedin.com/in/robert-nebolon-aia-87a44213",
+ "kind": "profile"
+ },
+ {
+ "name": "Jill Seidner",
+ "href": "https://www.linkedin.com/in/jill-seidner-416b6542",
+ "kind": "profile"
+ },
+ {
+ "name": "Zia Hansen-Rockwood",
+ "href": "https://www.linkedin.com/in/ziahansen",
+ "kind": "profile"
+ },
+ {
+ "name": "Emily Mackie",
+ "href": "https://www.linkedin.com/in/emily-mackie-8729939",
+ "kind": "profile"
+ },
+ {
+ "name": "Chris Scarano",
+ "href": "https://www.linkedin.com/in/chris-scarano",
+ "kind": "profile"
+ },
+ {
+ "name": "Aurgho Jyoti, AIA",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAALSyAQBmCeYqqDfxveN-y4l-8v-MS8uHj8,NAME_SEARCH,-ioN",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Susannah Charbin",
+ "href": "https://www.linkedin.com/in/susannahcharbin",
+ "kind": "profile"
+ },
+ {
+ "name": "Robert Allred",
+ "href": "https://www.linkedin.com/in/robert-passal-1284174",
+ "kind": "profile"
+ },
+ {
+ "name": "Mary S.",
+ "href": "https://www.linkedin.com/in/mary-s-5b94854",
+ "kind": "profile"
+ },
+ {
+ "name": "Sandra Diaz-Velasco",
+ "href": "https://www.linkedin.com/in/sandra-diaz-velasco-7897b516",
+ "kind": "profile"
+ },
+ {
+ "name": "Michael Wolk",
+ "href": "https://www.linkedin.com/in/michael-wolk",
+ "kind": "profile"
+ },
+ {
+ "name": "Amir Habibabadi",
+ "href": "https://www.linkedin.com/in/amir-habibabadi-36834b6",
+ "kind": "profile"
+ },
+ {
+ "name": "Millie Kwong",
+ "href": "https://www.linkedin.com/in/millie-kwong-8a5b913",
+ "kind": "profile"
+ },
+ {
+ "name": "Jeff Arcari",
+ "href": "https://www.linkedin.com/in/jeffarcari",
+ "kind": "profile"
+ },
+ {
+ "name": "Petra Arko",
+ "href": "https://www.linkedin.com/in/jeffarcari",
+ "kind": "profile"
+ },
+ {
+ "name": "David Collins",
+ "href": "https://www.linkedin.com/in/david-sanchez-iii",
+ "kind": "profile"
+ },
+ {
+ "name": "Gini Jain",
+ "href": "https://www.linkedin.com/in/ginijain",
+ "kind": "profile"
+ },
+ {
+ "name": "Michelle Feinberg",
+ "href": "https://www.linkedin.com/in/michelle-feinberg-6242276",
+ "kind": "profile"
+ },
+ {
+ "name": "Brian Wickersham, FAIA",
+ "href": "https://www.linkedin.com/in/brian-wickersham-faia-13250547",
+ "kind": "profile"
+ },
+ {
+ "name": "Alex Sola",
+ "href": "https://www.linkedin.com/in/alex-sola",
+ "kind": "profile"
+ },
+ {
+ "name": "Diana Wagenbach",
+ "href": "https://www.linkedin.com/in/diana-wagenbach-151482302",
+ "kind": "profile"
+ }
+ ]
+ },
+ {
+ "id": "warm-leads",
+ "title": "Warm leads — already 1st-degree",
+ "note": "Connecting auto-follows, so these are largely done. Skim only to confirm.",
+ "people": [
+ {
+ "name": "Danielle Jerls",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACWPa6QBSdF1NoZcledzUSO0oj_QrGPXOMU,NAME_SEARCH,LbkF",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Ripley Stone",
+ "href": "https://www.linkedin.com/sales/lead/ACwAADK5gNEBwkSMYIIRTfOWtWNQ1AlS2xoL9Ag,NAME_SEARCH,_IrY",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Rambod Bahadory",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAleipMBERILZ1gURtusKa7KbgRX-Gd24Xg,NAME_SEARCH,CEFi",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Kate McGoldrick NCIDQ, LEED AP",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAIYJLkBgBFfia4Eg-jZjpDzGk2j2LQMah8,NAME_SEARCH,XYcx",
+ "kind": "salesnav"
+ },
+ {
+ "name": "June Stefancyk",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAcU_7IBa6p6MJ2jY6Q3NM0jvHPDzi04Vqo,NAME_SEARCH,c9wc",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Norbert Notthoff",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAFlXZgcBO4Y9nhJzKAVy2e-a6WY8u0Ao9AM,NAME_SEARCH,4eEe",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Lauren Sothern",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAGcPa74BhhkHwxJmSqhuQk2J5zjQK9oOJ_4,NAME_SEARCH,qhLl",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Susila K Mohan",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABmkXvIBGo91P9OxFKh_TrVNvDJoN8UWoB8,NAME_SEARCH,BFVI",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Aaron Birney AIA,LEED AP",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAViMMMBUbdXQjO6LF4GQTh4nAiMdJr5UhQ,NAME_SEARCH,OaRS",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Larissa Santos",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACneNm4BLXwwfzK0l-6PLLS_4MgkY2pPRM8,NAME_SEARCH,YzQv",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Ron Frantz",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAEoumMBLYwSFLuyhd6YjWU9FrEPdCGECVI,NAME_SEARCH,fUQl",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Charles Dalluge",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAG22JwBW16d3J-64Cx26qcbpvZ7mHM1Fug,NAME_SEARCH,nWt_",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Linda Sullivan, NCIDQ, ASID",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAOpY_IBeQ9kEKvuIPZmZHeE_UxzBt-AVDE,NAME_SEARCH,FZGz",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Lisa Lamprich",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAQZ-C0B745r0WuDQfciv0DUoJffh1A6hKY,NAME_SEARCH,ztLX",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Nicole Cwiklinski",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAB4z8IgBJNc95-zcjIkP4D8Sm0L1EqWQaRI,NAME_SEARCH,Tdmm",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Nathalie Noell",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAFuRL40B3775jIkGnMWCUovLu_rPmCU8zGc,NAME_SEARCH,oqkW",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Natt Puapornpong, NCIDQ",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAYqU8cBkWPZYfxO69KK3vKmvWQhgtc0lfA,NAME_SEARCH,U5xH",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Salman Ismael",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACYXzpMBBywZg09AcbgUPtjcdYVcwxytnmw,NAME_SEARCH,W1Ff",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Neil Cadman",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAADWeUQBKEwACKAfiozpXh98VGacshE1OdI,NAME_SEARCH,YpNl",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Grace Stevens",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACp9qawBCB161DAVTRjX75NKbnfmnoLhzPc,NAME_SEARCH,dODc",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Frances Ellen Shaw",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABkmJoIBew7BqpoYljYnypGAAYLTnOXL8xU,NAME_SEARCH,g4CP",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Elysse Concepcion",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAGDfSEB-o-ExPHSFvvarJGNsQ13Zrnn_sc,NAME_SEARCH,q7eh",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Simranjit Kaur, CID",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABaImT0BpurTpkZ9fWQAArn2p_E-gAb8nHU,NAME_SEARCH,826Z",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Clara Damgaard Franke",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACZddXkB8FX4po0gwYdX9XfYaFsLtJTG9SE,NAME_SEARCH,DldY",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Sajda Anwar",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACUSIAQBmF41OfmZofDtN7Z0Y3WRJ7QmssQ,NAME_SEARCH,oYZF",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Tracie Stearns",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAbbHgQBtQvfbMvnASSAi3P2gS5apwg9gls,NAME_SEARCH,0Dyb",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Robert Rizick",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAALZ3UkBXs_b2YrLUziUPA6JLFNv0uQlJrI,NAME_SEARCH,F9GP",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Anshul Khandelwal",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAASUXxkBPxUJkbDka3bPE8yCndKxtKYjpz4,NAME_SEARCH,D09Q",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Mateo Giraldo Saravia",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAY2j6YBBQGKR1Qty2uMrMac3ovUkZGYyLw,NAME_SEARCH,RYio",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Katie Sanchez",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACotqqABB8a-PwloSgzkD1VCvtAXUgx8MKc,NAME_SEARCH,3HRu",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Laura I.",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAwzW4oBBR8NGYbABRuxqZMv7kJ94J3r1UU,NAME_SEARCH,UfZv",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Emily Pool",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAJ9X3wB-oRoGyvS7h9VcfKhV0qwqlCYapc,NAME_SEARCH,_2rp",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Gayatri Desai Cortese",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAANbXgoBxKbbp1IMSmDVs5_QlKYLyRSpEes,NAME_SEARCH,hK2n",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Alex DeCarolis",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAB-HDqMBmJnrcqCXn4xrEcSxMS9KWxlB6j0,NAME_SEARCH,r-ty",
+ "kind": "salesnav"
+ },
+ {
+ "name": "ChiehSheng (Jason) Huang",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABjhxzoB1EtOtWmUF5ZzCWKjPsYuKatEnFA,NAME_SEARCH,7Jv9",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Julia Chigos",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAY92CUBCLeWdNbEgnA0db7ceCNeCAVRvMY,NAME_SEARCH,GIRb",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Erica Luongo",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAACeE68BDzKePUxv9Sm86XseesNBllgR1Nw,NAME_SEARCH,fJM_",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Aubree Rowe",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAhhRDcB9q_eKRY-GNx4tMZcdqTeN8Nrecc,NAME_SEARCH,6QE1",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Christina De Croce",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAMczosB0KbbDIH2tivGpOxpaidBft0-Vtk,NAME_SEARCH,yMID",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Beatrice Girelli",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAA4mPXEBaE4zXasttHEtiBlX_M5ff_4Nobs,NAME_SEARCH,obM0",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Sunmi Lee",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAEHsQ4cB_k_D28Eu_IElNekHy0Dqmr71lcM,NAME_SEARCH,PUi-",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Laura Gutierrez García",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABeFWgUBYdjluXLJ9WpmzZbhJinvXpvaJvk,NAME_SEARCH,IE3j",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Graham oram",
+ "href": "https://www.linkedin.com/sales/lead/ACwAADEWoY0BSXHKRoXcslMPGxvtriAsQOEMGB0,NAME_SEARCH,TC5D",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Mark Toth",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAGkbF0BKf5ho-2eAn-2t4nutHIBFQLRoY8,NAME_SEARCH,ut4e",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Brooke Walbuck, Assoc. DBIA",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAPiybYB0pT5dcgqSREVrovpYP0JMnSb4R8,NAME_SEARCH,iOCR",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Erin Havard",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAvnuogBIILd6VS46kqdZ6Ku3zqRnukc5NU,NAME_SEARCH,UBmL",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Maia Campos",
+ "href": "https://www.linkedin.com/sales/lead/ACwAADWDYs4B6qh6TPq5t0ob8vWzpPXqHoZDXqk,NAME_SEARCH,em_u",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Jamie Foehr",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAXw_OkBuHJ0vCWw5PW1Sc2IynbH3eAMzZQ,NAME_SEARCH,KI3u",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Sangeeta Mistry",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACl-Z5oB9d-ws3F2QgYsneKMC3f1FqX3m_0,NAME_SEARCH,sJVx",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Karen Williams",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAATdEA4Bobr4IYff12-tR-hN8BhncXU45Gw,NAME_SEARCH,3bsP",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Emily VanderBoon",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACrU0u8BpnNG9tBjPfijHlOBLzb0k_BytM0,NAME_SEARCH,kMiS",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Jon Gambrill",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAEZCyQBTN7idWXlSavKSyRNNqxpytS0ISM,NAME_SEARCH,CqBx",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Stella Abdoulin",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAG-kAoBHqiplnUySOhN6jR-eKoVpDE6epk,NAME_SEARCH,GxBF",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Assel N.",
+ "href": "https://www.linkedin.com/sales/lead/ACwAADEy7-cB5s2Ye7RrIvq89nGhLSD0Ww0p5rI,NAME_SEARCH,Ms02",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Ryan Bowman",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABLK-3UBsYd83wj1XaMIMjveDvhgA1gXw48,NAME_SEARCH,sOk6",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Dana Wight",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAH5MKIBBsr1KwP6F38DyR3jtJ6jJmg9uJ0,NAME_SEARCH,4GGR",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Lynn Milligan-Rosenblum",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAADlTqMB66oqc2rRJHB9THI2yVQX1upZ684,NAME_SEARCH,5Emr",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Omer Yosef",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABGBcLEB88yXrAzc3ajxTb__K5Fk-3dfjvI,NAME_SEARCH,NwC5",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Bahar Afshar",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAKU6usB-v5ZNTkOAzhlkKYAhzOhhx1ojnI,NAME_SEARCH,q5Nf",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Jennifer Cruz",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABbDnFgBhJdzPh8GPdnezoiYIsuMRzOCA3k,NAME_SEARCH,ktoE",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Deborah Montano",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAZK2aQBag21S4cPmm40nCdpo2Vr0km4-i8,NAME_SEARCH,9K1x",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Grant Jackson",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAABoBsUBFlvnBxVCnMMX0-eOzZFUN_OuZ4c,NAME_SEARCH,vD1Q",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Jezarely (Jessy) Miguel",
+ "href": "https://www.linkedin.com/sales/lead/ACwAABt6YV8BBt9AVdSEKLsBFZMs8T-S_TrGhqc,NAME_SEARCH,DaeN",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Maureen Osborne",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAFs_VABT6SNgJk5FbsPWZMrJQm_eMvgGJk,NAME_SEARCH,pjNP",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Matt DeShantz",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAMh9T8B2RcAcv5ZgduLgGwOjshXoQnIel0,NAME_SEARCH,5zBW",
+ "kind": "salesnav"
+ },
+ {
+ "name": "DeDe Hsu",
+ "href": "https://www.linkedin.com/sales/lead/ACwAACG8LFIBlPEqT_mkPLaZ7dGo5A1x5chnpGQ,NAME_SEARCH,MBLI",
+ "kind": "salesnav"
+ },
+ {
+ "name": "Marisa Smith, NCIDQ",
+ "href": "https://www.linkedin.com/sales/lead/ACwAAAFsAb0B7CShkKP3hIHJ4cDtzfzZ2rE83FE,NAME_SEARCH,tokd",
+ "kind": "salesnav"
+ }
+ ]
+ }
+ ],
+ "searches": [
+ {
+ "group": "Interior designers & architects",
+ "links": [
+ {
+ "label": "Interior designers — Los Angeles",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=interior%20designer%20Los%20Angeles"
+ },
+ {
+ "label": "Interior designers — United States",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=interior%20designer&geoUrn=%5B%22103644278%22%5D"
+ },
+ {
+ "label": "Interior designers — your network (2nd)",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=interior%20designer&network=%5B%22S%22%5D"
+ },
+ {
+ "label": "Interior designers — anywhere",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=interior%20designer"
+ },
+ {
+ "label": "Architects",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=architect%20interior"
+ }
+ ]
+ },
+ {
+ "group": "Hospitality reps",
+ "links": [
+ {
+ "label": "Hospitality FF&E reps",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=hospitality%20FF%26E%20sales%20representative"
+ },
+ {
+ "label": "Hospitality design reps",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=hospitality%20design%20representative"
+ },
+ {
+ "label": "Contract furniture / hospitality reps",
+ "href": "https://www.linkedin.com/search/results/people/?keywords=contract%20furniture%20hospitality%20rep"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/panels/linkedin.html b/public/panels/linkedin.html
index 8108f1e..135d706 100644
--- a/public/panels/linkedin.html
+++ b/public/panels/linkedin.html
@@ -1,6 +1,12 @@
<div id="li-root" style="max-width:880px;">
<div class="muted-banner" id="li-banner">Loading…</div>
+ <div class="row" id="li-modebar" style="gap:8px;margin-bottom:14px;">
+ <button class="btn gold" id="li-mode-compose-btn">✍️ Compose a post</button>
+ <button class="btn ghost" id="li-mode-follow-btn">👥 Follow list</button>
+ </div>
+
+ <div id="li-mode-compose">
<div class="card">
<h2>Compose a LinkedIn post</h2>
<div class="muted" style="font-size:12.5px;margin-bottom:12px;">Draft with DW B2B best-practices baked in, then <b>Copy</b> + <b>Open LinkedIn</b> to post manually (compliant today). Live one-click posting via the official API is Phase 2 (gated).</div>
@@ -36,4 +42,30 @@
<h2>Saved drafts <span id="li-dcount" class="pill">0</span></h2>
<div id="li-drafts" class="muted">No drafts yet.</div>
</div>
+ </div><!-- /li-mode-compose -->
+
+ <div id="li-mode-follow" hidden>
+ <div class="card">
+ <div style="display:flex;align-items:center;gap:10px;flex-wrap:wrap;">
+ <h2 style="margin:0;">Follow list</h2>
+ <span class="pill" id="li-fl-progress">0 / 0 followed</span>
+ <span style="flex:1;"></span>
+ <button class="btn ghost" id="li-fl-reset" style="font-size:11px;padding:5px 9px;">Reset checks</button>
+ </div>
+ <div class="muted" id="li-fl-guidance" style="font-size:12.5px;margin:10px 0 0;"></div>
+ <div class="progress-track" style="height:6px;border-radius:4px;background:var(--line,#e6e6e6);margin-top:12px;overflow:hidden;">
+ <div id="li-fl-bar" style="height:100%;width:0;background:var(--gold,#0a66c2);transition:width .2s;"></div>
+ </div>
+ <input id="li-fl-search" type="text" placeholder="Filter by name…" style="margin-top:12px;width:100%;">
+ </div>
+
+ <div class="card">
+ <h2 style="font-size:14px;">Saved searches</h2>
+ <div class="muted" style="font-size:12px;margin-bottom:8px;">Open a live LinkedIn people-search, then Follow from each profile.</div>
+ <div id="li-fl-searches"></div>
+ </div>
+
+ <div id="li-fl-sections"></div>
+ <p class="muted" id="li-fl-updated" style="font-size:11px;text-align:center;margin:18px 0;"></p>
+ </div><!-- /li-mode-follow -->
</div>
diff --git a/public/panels/linkedin.js b/public/panels/linkedin.js
index ac5654f..a77d683 100644
--- a/public/panels/linkedin.js
+++ b/public/panels/linkedin.js
@@ -96,6 +96,76 @@ window.MCC_PANELS['linkedin'] = {
msg(d.error ? '✗ ' + d.error : (d.posted ? '✓ Posted to LinkedIn.' : (d.message || 'Staged.')), !!d.error);
};
+ // ── Mode toggle: Compose ⇄ Follow list ──────────────────────────────────
+ function setMode(m) {
+ const follow = m === 'follow';
+ $('#li-mode-compose').hidden = follow;
+ $('#li-mode-follow').hidden = !follow;
+ $('#li-mode-compose-btn').className = 'btn ' + (follow ? 'ghost' : 'gold');
+ $('#li-mode-follow-btn').className = 'btn ' + (follow ? 'gold' : 'ghost');
+ try { localStorage.setItem('mcc_li_mode', m); } catch {}
+ if (follow) initFollowList();
+ }
+ $('#li-mode-compose-btn').onclick = () => setMode('compose');
+ $('#li-mode-follow-btn').onclick = () => setMode('follow');
+
+ // ── Follow list (from public/data/linkedin-followlist.json) ─────────────
+ const FL_KEY = 'mcc_li_followed'; // localStorage Set of followed hrefs
+ const flDone = () => { try { return new Set(JSON.parse(localStorage.getItem(FL_KEY) || '[]')); } catch { return new Set(); } };
+ const flSave = set => { try { localStorage.setItem(FL_KEY, JSON.stringify([...set])); } catch {} };
+ let FL = null, flLoaded = false;
+
+ async function initFollowList() {
+ if (flLoaded) return; flLoaded = true;
+ try { FL = await jget('/data/linkedin-followlist.json'); }
+ catch { $('#li-fl-sections').innerHTML = '<div class="card muted">Could not load the follow list.</div>'; return; }
+ $('#li-fl-guidance').textContent = FL.guidance || '';
+ $('#li-fl-updated').textContent = FL.updated ? `Source: ${esc(FL.source || 'li-clicklist')} · updated ${esc(FL.updated)}` : '';
+ $('#li-fl-searches').innerHTML = (FL.searches || []).map(g =>
+ `<div style="margin-bottom:10px;"><div class="muted" style="font-size:11.5px;margin-bottom:4px;">${esc(g.group)}</div>` +
+ g.links.map(l => `<a class="btn ghost" style="font-size:11px;padding:5px 10px;margin:0 6px 6px 0;display:inline-block;" target="_blank" rel="noopener" href="${esc(l.href)}">${esc(l.label)} ↗</a>`).join('') +
+ `</div>`).join('');
+ renderFollow();
+ $('#li-fl-search').oninput = renderFollow;
+ $('#li-fl-reset').onclick = () => { if (confirm('Clear all followed checkmarks on this device?')) { flSave(new Set()); renderFollow(); } };
+ }
+
+ function renderFollow() {
+ const done = flDone();
+ const q = ($('#li-fl-search').value || '').trim().toLowerCase();
+ let total = 0, doneCount = 0;
+ const html = (FL.sections || []).map(sec => {
+ const rows = sec.people.filter(p => !q || p.name.toLowerCase().includes(q));
+ total += sec.people.length;
+ sec.people.forEach(p => { if (done.has(p.href)) doneCount++; });
+ if (!rows.length) return '';
+ const secDone = sec.people.filter(p => done.has(p.href)).length;
+ return `<div class="card">
+ <h2 style="font-size:14px;">${esc(sec.title)} <span class="pill">${secDone}/${sec.people.length}</span></h2>
+ <div class="muted" style="font-size:11.5px;margin-bottom:10px;">${esc(sec.note || '')}</div>
+ <div>${rows.map(p => {
+ const on = done.has(p.href);
+ const badge = p.kind === 'salesnav' ? '<span class="pill" style="font-size:9px;">Sales Nav</span>' : '';
+ return `<label class="li-fl-row" style="display:flex;align-items:center;gap:9px;padding:5px 0;border-bottom:1px solid var(--line,#eee);cursor:pointer;${on ? 'opacity:.5;' : ''}">
+ <input type="checkbox" data-href="${esc(p.href)}" ${on ? 'checked' : ''} style="width:16px;height:16px;flex:none;">
+ <a href="${esc(p.href)}" target="_blank" rel="noopener" style="flex:1;${on ? 'text-decoration:line-through;' : ''}" onclick="event.stopPropagation()">${esc(p.name)} ↗</a>
+ ${badge}
+ </label>`;
+ }).join('')}</div>
+ </div>`;
+ }).join('');
+ $('#li-fl-sections').innerHTML = html || '<div class="card muted">No matches.</div>';
+ $('#li-fl-progress').textContent = `${doneCount} / ${total} followed`;
+ $('#li-fl-bar').style.width = total ? (100 * doneCount / total).toFixed(1) + '%' : '0';
+ $('#li-fl-sections').querySelectorAll('input[type=checkbox]').forEach(cb => cb.onchange = () => {
+ const set = flDone();
+ cb.checked ? set.add(cb.dataset.href) : set.delete(cb.dataset.href);
+ flSave(set); renderFollow();
+ });
+ }
+
await loadConn(); await loadTemplates(); await loadDrafts(); updateCount();
+ // Restore last mode (default compose).
+ setMode((() => { try { return localStorage.getItem('mcc_li_mode') || 'compose'; } catch { return 'compose'; } })());
},
};
← 063dc28 All Calendars: add Launched layer — already-live products on
·
back to Marketing Command Center
·
followlist: add build:followlist refresh script + CRCP broke bfbe222 →