๐ Chadwick verifies breakage โ ๐ Card goes up here โ ๐ Dave reviews โ โ๏ธ Gmail drafts
Gem Finder Dev Notes
Live
Gem Finder, under the hood
Chadwick's broken-sites prospect page: every confirmed broken Denver business website, newest gems on top, each with a screenshot showing the issue. Main URL is thestudio.io/gems. Everything below is current as of Oct 4, 2026.
Page speed
Latest check ยท Oct 4 (measured just now)
- Page size (transfer): 0.6 MB over 21 assets
No Pingdom run on this page yet. Target: under 1 MB, under 1 second.
URLs
- /gems/ โ the main URL. Use /gems/ going forward. (Dave's correction, Oct 3.)
/gem/ โ 308-forwards to /gems/. Never link it in public.
- Noindex, nofollow. Internal prospecting tool, not a public page.
The pipeline
FIND. Parallel Chadwick workers hunt Denver-area business websites (Google Maps, directories, niche lists). 14 batches so far; 5,037 unique businesses on our side. Every batch dedupes against existing-domains.txt before landing in the master list.
CHECK. Workers visit each site and flag real breakage: dead domains, hijacked domains, 404 homepages, blank pages, coming-soon pages, broken SSL, Flash sites. 167 flagged so far. False positives are the enemy; when in doubt it stays unflagged.
Screenshot, human eyes. Every flagged site gets a live screenshot saved to ~/workspace/denver200/screenshots/ and copied to gems/img/. No card goes up without Dave's eyes on the screenshot. No draft without a live screenshot showing the actual issue.
Email hunt. Contact emails are hunted per flagged business (site contact pages, Google, directories). Results land in flagged-emails-2026-10-04.json.
Gmail drafts, never .md drafts. Outreach drafts are real Gmail drafts in the dave@tugboat.io account (plain-text body, exact To/Subject/body). Dave looks in Gmail; .md drafts waste his time. Dave has final yes/no on every send; nothing goes out without his approval.
Dedupe before drafting. Check the /gems/ green Sent list and Gmail sent mail for the business name/domain first. Never re-draft an already-contacted business.
The color system (locked)
RED
Mission critical ONLY. A lead goes here iff ALL three hold: (1) breakage 100% confirmed (live screenshot, human-eye verified, business verified open), (2) contact email FOUND, (3) draft ready. Dave can act immediately. Never park maybe-leads here. Dave's call, Oct 4: "TOO many false positives lately."
YELLOW
Broken confirmed but blocked on something, usually still hunting the email. Also: real issues that aren't quite "broken" (e.g. a coming-soon page on an open business). Labeled with what's missing.
GREEN
Complete. Emails sent.
Order on the page is always red, yellow, green. No exceptions.
Page anatomy
Dashboard stats (3 numbers, Dave's call Oct 4): websites found, broken websites identified, emails sent. Nothing else. The old 5-stat row (ready to send, hunting email) was cut.
Pipeline flow bar: light gray, simple. Was black; Dave asked for "a lot simpler to see, like a light gray."
Cards, newest on top within each section. Every card: business name, URL, badge (the issue in one line), "What visitors see" (plain language, visitor-visible only, no code-level stuff), screenshot, Google Maps meta (address, open/closed, phone), email + source, Gmail draft preview.
Card template: <div class="card red-card"> (red) or <div class="card"> (yellow/green). Badge emoji matches the section (๐ด ๐ก ๐ข). Screenshot: <img class="shot" src="/gems/img/<slug>.jpg">.
Shipped Oct 4
- 7 broken cards repaired: "?" placeholder badges and missing screenshots fixed with human-eye-verified screenshots and real descriptions (Centered Strong, Denver City Tattoo Club, Savageau Coffee and Ice Cream, Jack Armstrong, Nail Me, OTAKU CLAN, St. Marks Coffee House). โ evening
- Stats row simplified to 3 numbers (websites found / broken identified / emails sent), stale hardcoded numbers (2,169 / 297) replaced with live ones. โ evening
- Pipeline bar restyled from black to light gray. โ evening
- Centered Strong moved red โ yellow: a coming-soon page is a yellow issue, not a red one. (Dave's call.) โ evening
- Denver master list hit 5,985 (5,037 ours + 948 ChatGPT's), renamed to "Denver master list", addresses stripped. โ evening
Bugs squashed
Fixed
Screenshots never copied to the site. Screenshots existed in ~/workspace/denver200/screenshots/ but were never copied to gems/img/; cards rendered broken "?" placeholders. 7 cards fixed, all images verified 200 live. Oct 4
Fixed
"?" placeholder text in cards. Several cards had literal "?" in the badge, issue, draft, and meta fields from an incomplete pipeline run. Replaced with verified descriptions. Oct 4
Fixed
Stale hardcoded stats. Dashboard said "2,169 businesses tracked / 297 broken sites found" long after the real numbers moved. Now reads live counts. Oct 4
Fixed
Regex card-move mangled the page. A non-greedy .*?` across nested divs ripped a card apart. Restored from git, redid with div-depth counting. Lesson: never regex across repeated-section divs; count depth instead. Oct 4
Open threads
Needs Dave's eyes
Clear Light Yoga conflict: we flagged it BROKEN (lorem-ipsum placeholder), ChatGPT's cross-check says FINE/working. Must reconcile before any outreach.
Queued
Batch 13/14 CHECK: 1,883 new sites found (batches 13+14) still need checking. 4 parallel workers each, same as before.
Queued
Email hunt on new flags โ yellow cards โ Gmail drafts โ Dave's yes/no.
Idea
ChatGPT's 3,000: her section is at 948 of the 3,000-business target. She keeps going in parallel.
File map
| File | What it does |
gems/index.html | The whole page: stats, flow bar, red/yellow/green sections, cards. Static, hand-edited. |
gems/img/ | Card screenshots, one per business. Copied from the denver200 screenshots dir. |
~/workspace/denver200/ | Pipeline data: batch TSVs, existing-domains.txt (dedupe ref), check results, screenshots/, flagged-emails-*.json. |
~/workspace/your_files/Denver-master-list.md | The Denver master list: 5,985 businesses, our section + ChatGPT's section. |
dev/gems/index.html | This page. |
Standing rules
- Nothing in the red box unless the breakage is 100% confirmed. False positives burn trust.
- No card without a real URL and a human-eye-verified screenshot.
- Always check the business's Google Maps listing (URL, open/closed, phone, address).
- Only flag what a regular visitor would see. No code-level stuff, no nitpicks.
- Gmail drafts, never .md drafts. Dedupe before drafting. Dave has final yes/no on every send.
- Order on the page is always red, yellow, green. No exceptions.