Pitch Guard
Search the build
-
4932ed32026-06-30 auto-save: 2026-06-30T05:58:45 (1 files) — server.js -
aae41902026-06-30 feature: surface invoice-sent & samples-sent as warm followup signals + sort criteria -
ca012422026-06-30 Pitch Guard: auto-remove a draft from the list once its followup sends successfully (trash + drop card) -
bb14d712026-06-30 snapshot before invoice/samples-sent followup-signal feature -
7e21c182026-06-23 auto-save: 2026-06-23T09:50:51 (1 files) — server.js.tmp -
9b5953d2026-06-18 PitchGuard: explicitly send/draft from info@designerwallcoverings.com -
1e95bac2026-06-18 PitchGuard: red 'already sent' alert + 4th Already-Sent column -
bcb6aaa2026-06-18 Fix Send followup: pass George external-send approval token -
75b161a2026-06-18 Add Designer Wallcoverings logo to header; (GEORGE_URL fixed to Tailscale MagicDNS HTTPS in .env — gitignored) -
7308e452026-06-16 Refine: never bother clients who already transacted or were already followed up -
0d9ee552026-06-16 Fix non-deterministic followup-candidate scanner: single-flight lock + serve cache on reload, retry throttled Gmail checks instead of silently dropping (over-include w/ 'uncertain' flag), full paginated sent scan (80 contacts). Count now stable across reloads (was 11→10→6) -
bd416312026-06-16 pitch-guard: persist dates+letters sent per person (durable ledger) + surface George's SENT mail per contact -
c3d6f362026-05-31 Link favicon.svg in head (use branded SVG, not .ico fallback) -
9e6d2762026-05-31 Add per-site favicon (kills /favicon.ico 404) -
e610e4d2026-05-19 Broaden .gitignore to exclude .bak / .pre- snapshot files -
88b1ce42026-05-19 Add 404-guard middleware so .bak/.pre- snapshot files never serve from static root -
b193fc52026-05-19 Add rel=noreferrer to target=_blank link (mechanical safety pass) -
30852ed2026-05-19 Move George URL + auth to gitignored .env (was hardcoded in server.js); add .env.example -
a2e4c2f2026-05-19 Followup scanner now auto-runs: warms on startup + daily, candidates auto-load on page open -
b5dbc8d2026-05-19 Send no_source_tag to George so customer emails skip the From-job banner -
bfffaf92026-05-19 Pitch panel: Edit/Preview HTML toggle + Open-as-page; strip George From-job banner -
164394a2026-05-19 Add 5-day followup candidate scanner (dry-run) — Followup Candidates section + per-candidate Draft-it -
0bd7aef2026-05-19 Fix recent-followup detection — broad regex for all followup templates + body fallback when snippet misses -
e7305dd2026-05-19 Add Delete draft button to the Pitch panel footer -
fba50d02026-05-19 Add recent-followup signal, draft delete (trash), and sort by name/date/subject/risk -
e6f61db2026-05-19 Split drafts into Clients + collapsible Vendors section (vendor classifier from dw_unified) -
5c43a5e2026-05-19 Pitch Guard: resizable / collapsible / reorderable / pop-out panels -
dd9f2df2026-05-19 move Pitch Guard to port 8123 -
7b30caa2026-05-19 Pitch Guard — draft + correspondence viewer for info@ with pre-send risk gate
Authors
- Steve29
Agents used
Skills used
- /shipped3
- /send2
- /followup2
- /create2
- /samples1
- /swatch1
- /memo1
- /ordered1
- /order1
- /samples-sent1
- /draft1
- /louie1
- /jgarner1
- /sis9lives1
- /tmmd441
- /daddydas1
- /favicon1
- /date1
- /subject1
- /risk1
Creative ideas + design notes
aae4190 · 2026-06-30 · feature: surface invoice-sent & samples-sent as warm followup signals + sort criteria
- detectWarmSent(): in:sent scan for invoice/samples/swatch/memo (outbound only) - candidate scan tags warmSignals + sentInvoice/SamplesTs, sorts warm leads first - assessRisk now blocks only paid/shipped/ordered (an unpaid invoice we SENT is a warm lead, not a closed sale) — Samantha tripwire (paid/shipped/order) intact - UI: green INVOICE SENT / SAMPLES SENT chips on candidate rows + Invoice-sent / Samples-sent sort options
9b5953d · 2026-06-18 · PitchGuard: explicitly send/draft from info@designerwallcoverings.com
Pin From to 'Designer Wallcoverings <info@designerwallcoverings.com>' on both /api/send and /api/followup/create so outbound can never fall back to a Gmail default. (Sends already resolved to info@ via George's account mapping; this makes it explicit and override-proof.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1e95bac · 2026-06-18 · PitchGuard: red 'already sent' alert + 4th Already-Sent column
When a followup was already sent to the selected contact, show a red alert (with the exact date+time it went out) in the Pitch verdict, and add a 4th panel on the right listing every letter already sent to that contact — date+time stamped, the matched followup flagged red. Layout bumped to v2 so existing users pick up the new column. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
bcb6aaa · 2026-06-18 · Fix Send followup: pass George external-send approval token
George's externalSendGuard 403-blocks all sends to external (customer) recipients unless the request carries the human-approval token. PitchGuard's authenticated Send-followup click IS that approval, so include send_approval_token (from GEORGE_EXTERNAL_SEND_TOKEN) on every /api/send. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7308e45 · 2026-06-16 · Refine: never bother clients who already transacted or were already followed up
Root cause (2026-06-16): the paid/shipped risk-gate lived ONLY in the UI Send button, so a native Gmail-web send bypassed it — already-closed clients (incl. one PAID+ORDERED+SHIPPED) got pitched a quote followup. - assessRisk() + alreadyFollowedUp() shared probes - candidate scanner now EXCLUDES level>=2 (ORDERED/INVOICED/PAID/SHIPPED) and anyone followed up in last 21d — they never become candidates, so never drafted - /api/followup/create refuses to draft a transacted contact (defense-in-depth) - swept + trashed today's followup drafts to transacted clients (gsmsriedel/louie/ nicole/jgarner/sis9lives/tmmd44/daddydas) + duplicate drafts to already-sent ones