A lead-magnet calculator for Von Peach FutureMakers — the personal-branding service line targeting C-suite executives. Inspired by the FIN tax-savings calculator (~20 leads/week conversion benchmark).
The user pastes their LinkedIn URL. We run a forensic audit using public signals only (LinkedIn data via ProxyCurl, Google footprint via SerpAPI, brand-clarity scoring via Claude Haiku), score the profile across six dimensions (0–3 each, total 0–18), and place them in one of four tiers. Email gate captures the lead into Mailchimp with full UTM attribution.
Frontend (index.html, static)
│
▼ POST /api/score { url }
api/score.js
├─ ProxyCurl → LinkedIn profile JSON
├─ SerpAPI → Google footprint
└─ Claude Haiku → brand clarity 0-3
▼ returns { total, subs, tier }
▼ POST /api/lead { email, goal, score, attribution }
api/lead.js
└─ Mailchimp → upsert with merge fields + tags
Hosted on Vercel: static frontend + serverless functions on the same domain. No CORS hops, single env-var dashboard, single deploy pipeline.
- v0.0–v0.2 (shipped) — Single-URL UX, six-dimension scoring, four tiers, ad-optimised hero, sample-peer pills, UTM capture. All client-side mock scoring on GitHub Pages.
- v1 (this repo, current) — Real backend on Vercel. ProxyCurl + SerpAPI + Claude Haiku → live scoring. Mailchimp wiring → live lead capture with attribution.
- v2 (planned, post-launch) — Once 200+ leads accumulated, swap synthetic peer baselines for a real cohort DB built from opted-in profiles. Relaunch moment.
- Team audit (current) — Manager-facing flow at
/team-audit. Magic-link sign-in, paste up to 10 LinkedIn URLs, get a team scorecard. Optional per-member tracking re-scores on a monthly cadence in the background (not advertised on the lander to avoid over-promising).
The team-audit feature needs Postgres + a session secret + a cron secret on top of the existing env vars.
- Provision Postgres: Vercel dashboard → Storage → Create Database → Postgres. Link it to the project. Vercel auto-injects
POSTGRES_URLetc. - Generate secrets:
Add both under Project Settings → Environment Variables.
openssl rand -hex 32 # → SESSION_SECRET openssl rand -hex 24 # → CRON_SECRET
- Cron is configured in
vercel.json—monthly-rescoreruns at 09:00 UTC on the 1st of each month,monthly-digestruns 30 min later. Vercel sendsAuthorization: Bearer ${CRON_SECRET}automatically. Legacyweekly-*task names still resolve via the dispatcher. - Schema bootstrap is automatic —
lib/db.jscreates the tables on first request. - Transactional email reuses
RESEND_API_KEY(already wired for ops alerts). Override the from-line withRESEND_FROM_TRANSACTIONALif you want sign-in / digest / opt-in emails to come from a different verified address than ops alerts.
Routes:
/team-audit— public lander, manager enters email, gets sign-in link./team-dashboard— authed dashboard (paste URLs, see scores, toggle tracking, send opt-in)./team-consent— landing page team members hit after clicking the opt-in email.
npm i -g vercel
vercel login
vercel link # link to your Vercel project
cp .env.example .env.local
# edit .env.local — paste your real keys
vercel dev # runs frontend + functions locally-
Sign in to vercel.com and click Add New → Project.
-
Import the GitHub repo (
visibility-index). -
Build settings: leave everything default — Vercel detects static + serverless functions automatically.
-
Environment Variables — add the following at Project Settings → Environment Variables. Set them for Production, Preview AND Development.
Variable Value source ANTHROPIC_API_KEYconsole.anthropic.com → API Keys PROXYCURL_API_KEYnubela.co/proxycurl → Dashboard → API Key SERPAPI_API_KEYserpapi.com/dashboard → API Key MAILCHIMP_API_KEYMailchimp → Account → Extras → API keys MAILCHIMP_AUDIENCE_IDAudience → Settings → Audience name and defaults → "Audience ID" MAILCHIMP_SERVER_PREFIXThe usXin your Mailchimp dashboard URL (e.g.us17)GA_API_SECRETGA4 → Admin → Data Streams → web stream → Measurement Protocol API secrets → Create. Used by /api/leadto fire a server-sidelead_capturedevent when the visitor declined the cookie banner (consent-mode-denied users would otherwise be invisible in GA reports).GA_MEASUREMENT_IDOptional. Defaults to G-2MKY8VPQBF(the production stream used intracking.js). Only set if you're pointing the server-side mirror at a different GA4 property. -
Deploy. The first deploy takes ~30 seconds.
-
Custom domain — Project Settings → Domains → add
visibility.vonpeach.comand follow the DNS instructions.
The /api/lead function writes merge fields to your Mailchimp audience. Add these custom fields before going live, or the merge values will be silently dropped.
-
Mailchimp → Audience → Settings → Audience fields and |MERGE| tags
-
Add the following:
Field name Tag Type Visibility Score VIS_SCORENumber Visibility Tier VIS_TIERText Visibility Goal VIS_GOALText Visibility LinkedIn VIS_LINKEDINText UTM Source UTM_SOURCEText UTM Campaign UTM_CAMPText UTM Medium UTM_MEDText
Tags are added automatically per submission: tier:<slug>, goal:<value>, campaign:<utm_campaign>. You can build segments and automations off these.
Total = sum of six dimensions, each 0–3. Range: 0–18.
| Dimension | Source |
|---|---|
| Digital Footprint | LinkedIn presence (photo, banner, About length) + SerpAPI organic results count + press domains |
| Brand Clarity | Claude Haiku scores LinkedIn headline + About against a 4-point rubric |
| Authority Signals | Recommendations, articles, honors, press keywords in headline/About |
| Content Cadence | Activities array length from ProxyCurl (recent posts) |
| Visual Identity | Profile photo + banner + About length + brand-clarity correlation |
| Network Recognition | Followers, connections, recommendations |
| Score | Tier | Tagline |
|---|---|---|
| 0–5 | The Hidden Gem | Real expertise. The world just doesn't know it yet. |
| 6–10 | The Rising Voice | Building momentum, but gaps are holding you back. |
| 11–15 | The Emerging Authority | Solid foundations. Time to scale your reach. |
| 16–18 | The Recognised Leader | Strong brand. Let's make it legacy-level. |
Built on the FutureMakers palette (Von Peach personal-branding service):
| Token | Hex |
|---|---|
| Deep navy | #0B0359 |
| Indigo | #3F36B2 |
| Lavender | #8683E5 |
| Ice | #EBF0FF |
Typography: Aileron (display, system fallback in v0–v1) + General Sans (body, Fontshare CDN). Aileron should be self-hosted from the brand assets in v1.1.
| Service | Approx. per audit |
|---|---|
| ProxyCurl | $0.01 |
| SerpAPI | $0.01 |
| Claude Haiku | $0.001 |
| Mailchimp | flat (per-list pricing) |
| Total | ~$0.025 per audit |
Rate limit defaults to 5 audits per IP per hour to bound spend on bots. Override via RATE_LIMIT_PER_HOUR env var.
Proprietary — Von Peach GmbH, 2026.