ProfitsLocal / WebJuice — 项目总览 · SSOT 页面

⭐ 这是 Matthew 指定的 唯一 SSOT 页面(2026-06-02)· 所有核心流程/决策/进展都汇到这里 · 实时维护(npm run pl:publish-business-map)· 从 docs/v3 预渲染。

🗺️业务全景逻辑图(实时维护 · 先看这个)

实时维护。这是整个业务怎么运转的唯一一张图:**多入口 → 收敛成一个公司身份 → 统一采集流程 → 成本分级筛选漏斗 → 逐层深挖 → master.md → 建站。** 架构细节见 docs/v3/SPEC-FUNNEL-ORCHESTRATION.md · docs/v3/SPEC-GATHER-MODULE.md。 图例:✅ 已建 · 🔄 在做/规划中 · ⚠️ 缺口(入口未接 / 未统一)。_更新于 2026-05-31。_
【入口 · 多个】────────────► 全部收敛成「一个公司身份」(名字 / 电话 / 地址 / 唯一标识)
  · Docker 地图爬 (pl:scrape-docker / gosom)               ✅
  · Google Places API (pl:places-search-intake)            ✅
  · 牌照数据库 — 42 万行 SQLite                             ✅
  · Google 搜索 → 拿结果 (tinyfish + ddg)                  ✅
  · 你发的一张图片                                          ⚠️ 入口未接
  · 你发的一个链接                                          ⚠️ 入口未接
                              │
                              ▼
【统一流程 · 所有入口共用这一条管子】
  1. 搜索(多引擎 · 5 条线)                                              ✅
  2. AI 判断相关性 + 是不是同一家(防同名冒牌 · 红线)                     ✅(身份判官 R143)
  3. 找到官方网站                                                         ✅
  4. 爬官网 + Google 地图 + Places API + 社媒(多来源)                    ✅(社媒抓取走 OpenCLI)
  5. 交叉验证 → 整理 → master.md                                          🔄(验证层 + 汇总 · R146)
                              │
                              ▼
【筛选漏斗 · 最便宜最快的先筛 · 尽早排除非客户】
  阶段 0(免费/秒级):无联系方式 / 已关店 / 测试名 → 排除                 ✅ exclusion-filter
  阶段 1(免费/查库):牌照吊销或过期 → 观察                              ✅ observe(确认同一家公司才标风险,不自动踢)
  阶段 2(便宜):    太大 / 连锁 / 政府 / 同行 → 排除                     ✅ exclusion-filter
  阶段 3(中等):    问题有多大 = 我们能帮多少(先 cheap audit,后详细审计) ✅ 审计分级
  阶段 4(中等):    在不在经营?付不付得起?(活跃度信号)              ⚠️ 部分
                              │   每一层踢掉不合格的;活下来的才往下走(越往下越贵)
                              ▼
【深度采集 · 只对走到这里的线索做 · 最贵的几步】
  · 全站爬取 + 真实照片 + 评价 + 社媒背景                                 ✅ 零件都有
  · → 丰富的 master.md(建站素材)                                       🔄 R146 Phase E
                              │
                              ▼
                          【给他做网站】

三条铁律:

  1. 入口千变万化,下游只有一条管子。 每条线索先收敛成唯一的公司身份,之后全部走同一条「搜索 → 判相关 → 找官网 → 多源采集 → master.md」流程。
  2. 漏斗 = 成本分级。 最便宜的排除先做(免费查库/启发式规则);最贵的活(全站爬取 + 拿照片)只对走到漏斗底部的线索做。绝不在不合格的线索上花钱。
  3. master.md 是漏斗底部的成品 —— 给「确定要做的客户」的丰富素材文档(有官网走 redesign 版;无官网走背景调研版)。

已扎实 vs 待办: 统一流程 + 漏斗的「零件」基本都有了(身份判官、社媒抓取、牌照门、外部内容挖掘都已落地)。待办:(a) 图片/链接入口还没接到收敛口;(b) 漏斗的成本分级总控(入口收敛 → 分阶段 gate → 逐层深挖)还不是一个显式控制器(pl:run-funnel 是雏形);(c) 采集骨干(页面规模准确、免费优先爬虫、验证层、master.md 汇总)是 SPEC-GATHER-MODULE.md 计划。

进展(2026-06-02):


🚦 快速筛选漏斗(代码级 · 从 SSOT 自动生成)

一条线索进来,按"最便宜的先筛"逐道过,全是便宜/快的信号;只有活下来的才进昂贵的详细审计。 此表从 core/leads/fast-filter.js(唯一真相源)直接渲染,不会和代码走偏。✅在用 · 🔄待前置(便宜但还没接进快筛) · 🔭观察。
#关卡信号工具成本动作状态
1niche_relevance类目 vs 搜索 niche 匹配LLM cascade (cached) / stem-match即时·$0排除✅在用
2gbp_triageGBP 信号: 电话/评分/评价数/网站/图片/类目gbpTriage即时·$0打分✅在用
3exclusion_precheck抓取前先排除明显不合格 (省下后面的抓取)runExclusionFilter (no cheapAudit)即时·$0排除✅在用
4licence_kill_observe牌照吊销/过期 (仅身份已确认)lookupLicense + observeLicenceKill免费·本地只观察🔭观察
5homepage_fetch抓首页 (markdown + 原始HTML)tinyfishFetchUrls免费·抓取补上下文✅在用
6site_quick_scanHTTPS/viewport/正文薄/CTA/陈旧年份siteQuickScan即时·$0打分✅在用
7page_scale_nav前端导航页 ≤20 (sitemap 不算)navScope + pageScaleGate即时·$0闸门(超阈值归档)✅在用
8pagespeed_mobile移动端性能分 + LCP (慢=更值得重做)pagespeedAudit(mobile) + pagespeedNeed免费·API~25s打分✅在用
9cheap_audit_decisionfinal_score = gbp*0.4 + redesign_need*0.6 → actioncheapAuditV2即时·$0打分✅在用
10exclusion_final3 层排除 (数据质量/业务类型/时机)runExclusionFilter (with cheapAudit)即时·$0排除✅在用

━━━ 昂贵分界线 ━━━

仅作证据(不当门):域名年龄 (WHOIS/Wayback · 老站=更可能想重做)

代码位置:1.core/leads/cheap-audit-queue.js · 2.core/scoring/cheap-audit-v2.js · 3.core/leads/exclusion-filter.js · 4.core/leads/cheap-audit-queue.js · 5.core/extractors/tinyfish.js · 6.core/scoring/site-quick-scan.js · 7.core/leads/cheap-audit-queue.js · 8.core/audit/pagespeed-insights.js · 9.core/scoring/cheap-audit-v2.js · 10.core/leads/exclusion-filter.js

Roofer 业务流程 6 阶段推进目标

2026-06-03。当前只考虑 roofer niche。目标不是手工做业务,而是把 lead 从进入系统到 Design / 建站可开工这条流程理顺、跑通、清掉冲突。

总目标

把 roofer lead 做成一条可重复的流水线:

发现客户
→ 判断入口是否已有可信官网 / Google Place / 基础身份
→ 有官网/Place:先便宜快速筛选
→ 无官网/Place:先搜索确认身份,找到官网再合流,找不到官网但是真公司就走无网站 starter
→ 分层采集和 audit
→ master.md 总档案
→ 销售资料 + Design / 建站资料包

这条线的硬原则:

双入口主线 · 2026-06-03 锁定

入口进来时通常有什么第一段该做什么搜索什么时候做合流点
Maps / Docker / Places API公司名、电话/地址、评分/评价、place_id,可能已有官网先跑便宜初筛:GBP、官网首页、PageSpeed、页面规模、license、ABN后期补背景、社媒、第三方资料初筛后进入详细审计 / 后置补强 / Design 资料包
图片 / 公司名 / license 数据可能只有名字、图片、license 记录;官网和 place_id 不确定先搜索找官网、Google Map、place_id、电话、地址第一步就搜索找到官网并确认同一家公司后,回到“有官网便宜初筛”;找不到官网但是真公司,走无网站 starter

这个锁定解决一个旧混乱:搜索不是一个固定阶段。 它的位置由入口资料决定。

已核实依据

阶段 1 · 身份确认和背景资料归属

目标 先把“搜出来的这个页面是不是同一个客户”跑稳。没有这个,后面会把别人的官网、评价、社媒、论坛帖子混进客户档案。

要解决

当前完成

本阶段验收

验收状态 · 2026-06-03

阶段 2 · master.md 分层写入

目标 每条 lead 的所有资料都进入 master.md,但不是混成一锅。要分清正式事实、外部背景、销售参考、待确认、丢弃原因。

要解决

本阶段验收

当前进度 · 2026-06-03

- clients/ace-roofing-service/v2/master.md:AI 高信心同一 5、需要登录后判断 3、不同公司 7。 - clients/adelaide-roofs/v2/master.md:AI 高信心同一 3、需要登录后判断 9、不同公司 6。 - clients/spalding-roofing/v2/master.md:AI 高信心同一 6、需要登录后判断 8、不同公司 1。

阶段 3 · roofer 初筛和排除标准

目标 把一直变化的筛选标准定成一张表:哪些直接排除,哪些只是观察,哪些会提高优先级,哪些进入人工少量复核。

要解决

本阶段验收

当前进度 · 2026-06-03

- 牌照风险只观察,不自动踢。 - PageSpeed 慢是销售证据,不是淘汰门。 - 页面规模是硬门:前端导航页太多会提前归档。 - 快筛幸存者统一 predict=C + audit_now=true;真正 A/B/C/D 在详细审计后给。

阶段 4 · 分层 audit 和资料采集

目标 把 audit 拆成便宜快跑和贵的深跑。先用免费工具和本地工具筛出值得深挖的客户,再跑 PageSpeed、完整网站 audit、视觉审计、Places 付费接口等。

要解决

本阶段验收

当前进度 · 2026-06-03

- Playwright 详细抓站:core/audit/site-fetch-full.js,本地免费但慢,用于 HTML、手机端、表单、性能、截图。 - Docker reviews:core/reviews/fetch-reviews-local.js,本地免费但 30-60 秒,适合 A/B 候选或高价值客户。 - Places reviews:core/reviews/fetch-reviews.js,付费少量评价,不作为每条 lead 默认动作。 - Places Details:scripts/cli/pl-places-enrich.js,手动或 grade ≥ B 触发,有额度保护。 - Firecrawl:core/audit/multi-page-crawl.js,默认不跑,只有免费抓取失败且明确开兜底才跑。

- docs/v3/COST-LAYERED-SCREENING-CN.md - docs/v3/MODULE-05-DEEP-AUDIT-CN.md - docs/v3/DATA-SOURCES-TO-MASTER-MD-CN.md

- “Firecrawl 默认抓多页”退役;现在默认免费优先。 - “每条 lead 都拉评论”退役;评论深挖只给 A/B 候选或人工指定。

- iFix Roofing:B/ready,Docker reviews + Places Details 已完成;下一步变成 Design / 建站资料包。 - A & J Roofing Solutions:C/outreach,不默认拉评论、不默认跑 Places。 - Ultra Roof Restorations:无网站但 93 reviews,Docker reviews + Places Details 已完成;继续走无网站资料补强,不跑 Playwright / Firecrawl。 - Brisbane Roofing Solutions:已归档 D,即使 118 reviews,也停止所有慢/付费工具。 - Vicwest Roofing:已有 Places + reviews,不重复跑。

阶段 5 · 销售资料和 Design / 建站资料包

目标master.md 自动抽出两类资料:销售要用的说服材料,Design / 建站要用的开工材料。

要解决

本阶段验收

当前进度 · 2026-06-04

已新增一条只读回放命令,专门回答“快筛之后,哪些客户已经能给 Design / 建站准备资料,哪些还缺东西”:

npm run pl:design-material-readiness -- --all-roofers --markdown

它不联网、不调用 Docker、不调用 Places、不改客户档案,只读现有 entity、快筛判断、starter 资料判断、详细审计 fixture、截图、master.md 和 audit HTML。

当前 247 个 roofer 全量回放结果:

资料状态数量意义
not_design_candidate219快筛后不该给 Design:快速排除、先补身份、轻触达等
website_material_ready24有网站问题 / 值得深挖客户,已有详细审计、截图、master.md,可准备 Design 资料包
starter_material_ready4无网站强候选,已有基础资料 + 至少 2 个硬证据,可准备 starter 页面输入
starter_material_gap0当前无网站强候选已无资料缺口

4 个无网站强候选已经全部从 starter_material_gap 升到 starter_material_ready,并且已经接入当前建站事实链。现在不再只是“资料够”,而是已经能生成 starter 版 core-extract.json,再进入 site-ctx.jsonsingle-page-brief.yaml

新增主线命令:

npm run pl:build-starter-core-extract -- --entity-key <entity-key>
npm run pl:extract-site-ctx -- --slug <slug> --force --write-content
npm run pl:build-single-page-brief -- --slug <slug>

边界:这条命令只读本地 entity / GBP / Places / confirmed licence,不联网、不调用 LLM、不读取搜索候选正文;弱牌照候选、搜索结果、需要登录的社交资料都不能进入 real_facts

当前具体补法:

客户现在已有下一步
Mr Roof Solutions基础资料 + Google reviews + QBCC confirmed licence / ABN已生成 core-extract.json / site-ctx.json / single-page-brief.yaml;还缺品牌 tokens、更多服务区
NP Roof Repairs基础资料 + Google reviews + 6 张 Places 商户照片已生成 core-extract.json / site-ctx.json / single-page-brief.yaml;牌照仍只作弱匹配候选,不当事实
Ultra Roof Restorations基础资料 + Google reviews + 6 张 Places 商户照片已生成 core-extract.json / site-ctx.json / single-page-brief.yaml;牌照仍只作弱匹配候选,不当事实
Prime Roof Restorations基础资料 + Google reviews + 6 张 Places 商户照片已生成 core-extract.json / site-ctx.json / single-page-brief.yaml;牌照仍只作弱匹配候选,不当事实

这条检查把阶段 3/4 和阶段 5 接起来:

前置快筛
→ 无网站候选:starter 资料够不够
→ starter core-extract:只把确认事实和带标记的 starter 默认内容接入主线
→ external-material:把身份确认过的搜索/enrich 正文分成 Design 可参考、销售参考、禁止使用
→ 有网站问题候选:详细审计、截图、master.md 是否够
→ 够了再给 Design / 建站资料包
→ 不够就只补缺口,不扩大乱搜

阶段 6 · 清理、退役和固定主路

目标 把冲突、过期、被证伪的文档和代码处理掉,让项目只剩一条清楚主路。

要解决

本阶段验收

当前推进点

现在继续阶段 2 的下半段。

3 个真实 roofer 的 master.md 样例已经接上:

data/leads/search-result-identity-queue/<entity-key>.json
→ npm run leads:build-master-md -- --entity-key <entity-key>
→ clients/<slug>/v2/master.md

下一步检查重点:

阶段 2B 的非社交正文验证命令:

npm run pl:observe-search-identity -- --limit 1 --niche roof --judge-provider ollama --route-result-limit 3 --max-candidates 18 --fetch-open-web --open-web-fetch-limit 1

这个命令仍然是观察模式:写观察报告和搜索来源队列,不改客户正式档案、不发 Discord。

阶段 2C 的社交登录验证命令:

ENABLE_OPENCLI_FETCH=1 AUTH_FETCH_PROFILE=z3wvy2xe npm run pl:observe-search-identity -- --limit 1 --niche roof --judge-provider ollama --route-result-limit 3 --max-candidates 18 --opencli --concurrency 1

这个命令同样是观察模式:OpenCLI 只读 Facebook / Instagram / LinkedIn 候选页,读完后重新判断是不是同一客户;读到的内容仍然先留在候选来源区,不直接进入 Design / 建站事实。

ProfitsLocal 客户筛选标准(中文)

2026-06-03 · 第一版。目的:把不断变化过的客户筛选逻辑重新分清楚。 核心问题不是“谁分数高”,而是“谁是我们这种单页网站产品真正能服务的客户”。

一句话

我们的目标客户不是所有本地商家,而是:

有真实业务、有转化机会、现有线上形象有明显问题,并且一个标准单页网站就能明显改善结果的客户。

所以筛选要分三层:

  1. 先把所有便宜、快速、不花钱的工具前置跑一遍。
  2. 能排除的先排除,先清资源。
  3. 再从幸存者里判断谁是强目标。
  4. 最后才决定是否投入慢工具、付费 API、深度审计和 Design 资料包。

这一层对应命令:

npm run pl:frontloaded-screening-plan -- --markdown

慢工具和付费工具不用于第一轮找客户。第一轮只用原始字段、GBP 字段、官网类型、Tinyfish / direct fetch 首页、页面规模、PageSpeed 免费额度、license/ABN/WHOIS/Wayback、搜索结果归属判断和 master.md 覆盖检查。

第一轮快筛的结果只允许进入这些桶:

筛选桶怎么进来下一步
快速排除已归档 / skipped / D、无身份、三层排除命中、已关店、评分很低且评价不少停止投入,不跑慢工具和付费工具
先补身份没官网、没 place_id、没电话地址,或搜索结果无法确认同一家公司先搜索和 AI 判断同一客户
无网站候选无独立官网、可联系、rating ≥ 4.5、review_count ≥ 20补评价、官方资料、图片候选、starter 页面素材
有网站问题候选有独立官网,首页快扫 / PageSpeed / cheap audit 发现明显问题进入详细审计或高价值后置补强
轻触达有一点机会,但口碑、评价数或网站问题强度不够批量外联,不默认深挖
太好或太复杂页面太多、业务复杂、网站运营成熟,单页产品不适合不进入标准产品投入
值得深挖快筛活下来,且有明确业务基础或明显网站问题才允许 Docker / Playwright / Places 等资源

对应命令:

npm run pl:frontloaded-screening-rules -- --sample --markdown

覆盖检查命令:

npm run pl:frontloaded-screening-doctor -- --markdown

当前不能把“工具存在”和“已经第一轮自动用上”混在一起。覆盖检查现在的结论是:

状态数量意义
已第一轮使用12原始字段、GBP、行业判断、排除预检、官网类型、Tinyfish 首页、首页快扫、页面规模、PageSpeed、ABN/WHOIS/Wayback、搜索结果归属判断、master.md 覆盖等已经在第一轮或进入慢工具前使用
只观察但已跑1license 本地库已跑,但只记录风险,不自动踢客户
还没全自动第一轮0暂无

搜索结果归属判断现在的边界:

规则意义
只在无官网 / 无 Place / 身份不稳时自动跑避免每条强身份 lead 都重复搜索
data/leads/search-result-identity-queue/<entityKey>.json进入 master.md 候选来源区
不写官网 / 社媒 / Design 正式事实防止同名公司污染
社媒默认标记需要登录等 OpenCLI 登录态读取后再重新判断

5 个真实样本当前快筛桶:

客户快筛桶意义
iFix Roofing有网站问题候选有官网,快筛看到重做机会
Ultra Roof Restorations无网站候选无官网,高口碑,可联系
A & J Roofing Solutions轻触达有问题但不默认加重投入
Vicwest Roofing轻触达有资料但不重复深挖
Brisbane Roofing Solutions快速排除已归档 / D,不再花资源

筛选的真正目的

筛选不是为了“减少 lead 数量”,而是为了在大数据里找出少数高把握客户。

当前要找的强目标只有两类:

强目标必须满足为什么值得投入
无网站强目标真 roofer、可联系、有 Place / GBP / 评价 / 营业时间 / 图片等身份和素材信号、没有独立官网我们做一个单页网站,价值最直接
有网站强问题目标有真实口碑和业务基础,但网站慢、旧、手机端差、CTA 弱、信任证据没展示,且页面规模适合单页我们能用一个强单页解决明显转化问题

不是强目标的客户也可能保留,但只走轻触达或观察,不默认消耗慢工具和付费工具。

目标客户识别回放

当前有一个 report-only 回放命令,用来检查 5 个真实 roofer 样本是不是被分到正确目标类型:

npm run pl:target-fit-replay -- --sample --markdown

它回答的不是“工具要不要跑”,而是:

当前样本结果:

客户目标类型处理
iFix Roofing有网站强问题目标已到 Design 资料包
Ultra Roof Restorations无网站强目标继续补无网站 starter 资料
A & J Roofing Solutions有问题但先轻触达不默认加重投入
Vicwest Roofing有问题但先轻触达不重复跑慢工具
Brisbane Roofing Solutions不适合当前产品已归档停止

这个判断已经写回 master.md 的“筛选与去向记录”:target_fit、值得继续的证据、卡点 / 排除理由会和 entry_routesearch_timingnext_step 放在一起。打开单个 lead 的总档案,就能知道它为什么继续、为什么轻触达、为什么停。

快筛之后怎么决定能不能给 Design

筛出来以后,不是马上建站。还要过一层“资料能不能开工”的只读检查:

npm run pl:design-material-readiness -- --all-roofers --markdown

这条命令回答:

当前全 roofer 回放:

资料状态数量下一步
not_design_candidate219不给 Design;按快筛桶停止、补身份或轻触达
website_material_ready24可以准备有网站 redesign 资料包
starter_material_ready4可以准备无网站 starter 页面输入
starter_material_gap0当前无网站强候选已无资料缺口

这个结果说明:第一轮筛选的核心不是“找到很多客户”,而是把 247 个 roofer 压到少数值得花设计/建站资源的客户;无网站客户虽然价值高,但必须先补硬证据,否则页面会变成 AI 猜测。当前 4 个无网站强候选都已补到 starter ready,并已通过 pl:build-starter-core-extract 接进当前事实链:core-extract.json → site-ctx.json → single-page-brief.yaml

已跑通的 4 个无网站 starter:

客户已进入事实链仍然不能当事实的内容
Mr Roof SolutionsQBCC / ABN + GBP 基础资料未补商户照片前不做项目图片 claim
NP Roof RepairsGBP 基础资料 + 6 张 Places 商户照片牌照弱匹配候选不进 real_facts
Ultra Roof RestorationsGBP 基础资料 + 6 张 Places 商户照片牌照弱匹配候选不进 real_facts
Prime Roof RestorationsGBP 基础资料 + 6 张 Places 商户照片牌照弱匹配候选不进 real_facts

补充进展:搜索/enrich 资料不再只是旁边放着。现在已新增一层 external_material

当前 4 个 starter 已重跑 site-ctx,但 external_material 仍为 0;原因是这 4 个还没跑外部正文挖掘。下一步不是再定规则,而是对这 4 个的候选来源跑 pl:mine-background,把搜索结果变成可用素材。

2026-06-03 真实回放补充:


目标客户画像

我们想要的客户

类型为什么适合
没有独立网站,但有真实业务和口碑我们做一个网站,价值很直接
有网站,但网站老、慢、难用、手机端差我们能用单页网站直接改善转化
GBP 口碑不错,但网站表现拖后腿有可信业务基础,重做网站有销售理由
服务范围清楚,业务不复杂单页网站能覆盖主要目标
电话、地址、服务、评价等资料能核实能写成可信页面,不靠编

我们不想要的客户

类型为什么不适合
明显不是目标行业做了也卖不出去
假数据 / 测试数据 / 已关店不是真客户
已经做得很好没有明显重做理由
页面很多、业务复杂标准单页站解决不了
电商、会员、booking、portal 很重会牵涉系统迁移,不是当前产品
大企业 / 连锁 / 政府 / 学校 / charity决策复杂,不是快交付客户
口碑太差网站不是核心问题

两条主路径

这里要先分清:搜索不是固定早期,也不是固定后期。

搜索放在哪里,取决于 lead 进来时有没有可信的官网 / Google Place / 基础身份。

入口类型进来时有什么搜索放在哪里第一段主动作
入口 A · Maps / Docker / Places公司名、电话/地址、评分/评价、可能已有官网 / place_id后期为主先跑便宜初筛:GBP、官网首页、PageSpeed、页面规模、license、ABN
入口 B · 图片 / 公司名 / license 数据可能只有名字、图片、license 记录,官网和 place_id 不确定第一步先搜索找官网、Google Map、place_id、电话、地址,并用 AI 判断是不是同一家公司

合流规则:

搜索结果下一步
找到可信官网,并且 AI 判断是同一家公司回到“有官网入口”的便宜初筛流程
没找到官网,但确认是真公司、有联系方式或口碑走“无网站 starter”路径,这是主要目标客户之一
找到多个疑似官网 / 同名公司 / 信息冲突进入身份和资料补查,不给 Design 用
找不到足够身份资料暂缓或归档,不能硬编

所以真正的主线是:

入口已有官网/Place 基础资料
→ 先便宜初筛
→ 后期再搜索补背景

入口没有官网/Place 基础资料
→ 先搜索确认身份
→ 找到官网就合流到便宜初筛
→ 没官网但是真公司就走无网站 starter

路径 A · 没有网站

业务逻辑

没有网站的客户,理论上最容易说明价值:我们给他一个可打开、可提交表单、能介绍服务的站。

但它的问题是:资料更少。没有官网可抓,就要靠 Google Search、Places、GBP、评价、外部结果去确认这家公司到底是谁。

关键判断

问题判断
是不是真公司必须用电话、地址、Places、评价、牌照或外部资料确认
有没有足够业务信号至少要有名称、电话或地址、服务类别、地区
有没有口碑或活动痕迹GBP 评分 / 评价 / 照片 / 营业时间有帮助
能不能写页面服务、地区、联系方式不够就不能硬编

适合继续的情况

容易卡住的情况

路径 B · 有网站

业务逻辑

有网站的客户,我们不能只说“你有网站”。我们要找到会影响转化的核心问题:

关键判断

问题判断
问题够不够大网站问题要能影响转化
我们能不能解决单页网站能解决,而不是要迁一整个复杂系统
页面规模合不合适前端导航页太多就不适合标准产品
是否已有成熟运营如果广告、分析、blog、CRM 都很重,可能不是目标客户

适合继续的情况

不适合继续的情况


当前筛选层级

第 1 层 · 直接排除

这些情况不值得继续投入。

当前主要依据:core/leads/exclusion-filter.jscore/scoring/lead-grading.js

信号处理原因
没电话、没邮箱、没网站,补资料后仍没有归档无法联系 / 无法确认
已关店归档不是真目标
测试名 / demo 名归档数据污染
行业不匹配归档不是目标客户
政府 / 学校 / charity归档不符合产品
web design / SEO / marketing 同行归档不是客户
大企业 / 评论数远超行业阈值归档不是快交付客户
评分很低且评价不少归档口碑问题比网站问题更大
近 12 个月刚重做网站归档销售时机不对
页面规模超过产品包归档一个标准单页解决不了

第 2 层 · 只观察,不直接踢

这些信号有用,但不应该单独决定归档。

信号当前处理原因
牌照过期 / 吊销观察必须先确认同一家公司,避免误伤
PageSpeed 慢加重做价值慢是机会,不是坏客户
没 ABN / 没牌照观察 / 发布前谨慎不能编造,但不一定挡内部预览
外部资料说法参考需要身份确认和来源标记
社媒 / 外部提及参考可做背景,不自动变核心事实

第 3 层 · 加权判断

这些决定客户优先级,不一定直接挡住。

信号用途
GBP 评分判断业务可信度
评价数判断业务规模和口碑基础
是否有网站分成没网站路径 / 有网站路径
图片数量判断素材是否足够
官网问题判断重做价值
手机端体验判断是否影响转化
CTA / 表单问题判断我们能否改善

A/B/C/D 和 ready-to-build 不一样

这里必须分清。

A/B/C/D · 销售优先级

当前依据:core/scoring/lead-grading.js

等级含义
A值得全力追,口碑强、网站问题明显
B值得做预览试探
C批量轻触,不主动重投入
D跳过 / 归档

A/B/C/D 回答的是:这个客户值不值得我们投入销售精力。

ready-to-build · 资料够不够开工

当前依据:core/scoring/qualification-scorecard.jspl:data-checkpoint

ready-to-build 回答的是:资料够不够给 Design / 建站用。

一个客户可以是 B,但资料不够开工。 一个客户也可以资料够,但销售优先级不高。


初筛之后 · 下一步怎么选

初筛结束后,不是直接跑所有工具。先把 lead 分到下一条路。

当前下一步只允许这些:

下一步什么时候选继续做什么不做什么
停止后续投入已归档、D 级、行业不对、页面规模超出、明显不是目标客户保留 master.md 和归档原因不再跑 Docker reviews / Places / Firecrawl / Playwright
身份和资料补查没官网、资料薄、同名多、官网/社媒/目录页不确定是不是同一家公司搜索、OpenCLI、Tinyfish 读正文、电话/地址/地区核对不把候选来源直接给 Design
无网站高口碑 · 补资料没官网,但有电话/地址,rating ≥ 4.5,review_count ≥ 20Docker reviews、Places Details、图片候选、服务/地区补全不跑 Playwright / Firecrawl,因为没有官网
有网站 · 进详细审计有独立官网,通过页面规模和排除规则,但还没有 detailed auditPlaywright 抓站、截图、表单、手机端、详细打分不先跑 Firecrawl;Firecrawl 只兜底
看缺口补强A/B、ready-to-build、或人工指定,且 reviews / Places 资料还缺先看 master.md 缺什么;Docker reviews、Places Details;Places reviews 只做 Docker 失败补充不给 C/D 默认跑慢工具或付费工具
补资料缺口qa-pending,或者资料不够给 Design补电话、服务、地区、评价、图片、ABN/牌照状态不硬编内容
准备 Design / 建站资料包ready-to-build,且已核实事实足够master.md 抽已核实事实、真实评价、图片和截图证据不抽搜索候选、AI 猜测、风险观察
轻触达 / 不加重投入C 级、outreach-active,已有基础报告但不值得继续花慢工具批量销售、轻量外联、保留已有 audit 证据不默认跑 Docker reviews、Places、Firecrawl
少量人工复核系统信号冲突,无法稳定判断人看 master.md 缺口和风险记录不让自动流程强行推进

机器回放样本

工具视角回放用这个命令:

npm run pl:l6-l7-trigger-replay -- --markdown

业务资源阶段回放用这个命令:

npm run pl:resource-plan-replay -- --sample --markdown

全 roofer 本地回放用这个命令:

npm run pl:frontloaded-screening-rules -- --all-roofers --markdown
npm run pl:resource-plan-replay -- --all-roofers --markdown

它把“目标客户判断”和“工具是否可跑”合在一起,回答:这条 lead 现在应该停止、补身份、补无网站资料、进详细审计、高价值补强、准备 Design,还是轻触达。

当前资源阶段结果:

客户资源阶段原因
iFix Roofing准备 Design 资料包有网站强问题目标,reviews / Places / detailed audit 已补齐
A & J Roofing Solutions轻触达 / 不加重投入有问题但口碑和销售把握不够,不默认再花钱
Ultra Roof Restorations无网站资料补强无官网但 5★ / 93 reviews,reviews / Places 已补,下一步看图片候选和 starter 素材缺口
Brisbane Roofing Solutions停止后续投入已归档 D,即使 118 reviews 也不继续投入
Vicwest Roofing轻触达 / 不加重投入有问题但先轻触达,且已有 Places + reviews,不重复跑

这个资源阶段已经写回 master.md 的“筛选与去向记录”:resource_band、现在可跑、暂缓 / 兜底、明确不跑,会跟 target_fit 放在一起。

这就是“初筛之后选择下一步”的标准,不是按工具顺序硬跑。

2026-06-04 · 全 roofer 回放结果

这次回放只读本地资料,不联网、不调用 Docker、不调用 Places、不写客户档案。

快筛桶结果:

快筛桶数量当前理解
快速排除149不再花慢工具 / 付费工具;保留 master.md 和原因
先补身份12先确认官网、Place、电话地址是不是同一家公司
无网站候选4直接符合“没官网但口碑强,可做 starter 页面”的主目标
有网站问题候选14有官网且快筛看到明显重做机会
轻触达58有一点机会,但不默认继续花资源
太好或太复杂0当前本地资料里没有被页面规模挡住的样本
值得深挖10已有明确业务基础或已到 ready-to-build

资源投入结果:

资源阶段数量下一步
停止投入149不跑 Docker / Places / Playwright / Firecrawl
轻触达39保留证据,走轻量销售,不加重研究
先补身份17搜索确认同一家公司,候选来源不能给 Design
允许详细审计16先跑本地 Playwright / detailed audit,不先用 Firecrawl
看缺口补强16只在确实缺 reviews / Places / 图片时补;不是“必须花钱”
无网站资料补强4Docker reviews、Places Details、图片候选、服务/地区补全
准备 Design 资料包3从 master.md 抽已核实事实、真实评价、截图和图片候选
少量人工复核2信号冲突,先看 master.md 缺口和风险
花资源前复核1工具有可跑项,但业务阶段不够清楚

这说明当前筛选线已经能先排掉大部分低价值线索,再把资源集中到 4 个无网站强候选、14 个有网站问题候选、以及少量已 ready 的客户上。

当前默认决定

这些先作为默认规则执行,后面如果真实样本证明误伤,再改阈值。

代码里的统一来源是 core/leads/screening-defaults.js。快筛、入口下一步、目标客户判断都从这里读。

问题决定说明
无网站强候选阈值rating ≥ 4.5、reviews ≥ 20、可联系、有 Place 身份先作为硬规则;这是我们最想找的客户
低口碑排除rating < 3.0 且 reviews ≥ 5 直接快速排除自动流程不留例外;只有你点名某客户时才人工覆盖
轻触达客户默认不跑 Docker / Places / Firecrawl只保留已有证据,走批量轻外联
补强阶段名字用“看缺口补强”避免误解成“高价值就立刻花钱”
社交 / 登录来源Facebook 第一,Instagram 第二,LinkedIn 第三Facebook/Instagram 更常给真实照片、服务、营业痕迹;LinkedIn 多用于销售背景
页面规模前端导航页 > 20 才挡;sitemap > 500 安全挡保持当前单页产品边界
Discord 旧 404单独开清理,不挡筛选主线本地资料是干净的;远端旧 thread/card 404 另做修复

页面规模标准

页面规模是最容易混乱的标准之一。

当前正确理解:

情况当前处理
前端导航页 ≤ 20可继续
前端导航页 > 20归档 / 超出标准产品
没拿到导航页用 sitemap 内容页 fallback
sitemap 内容页 > 500安全归档,通常太复杂

当前依据:core/audit/page-scale-gate.js

重点:不再把 sitemap 噪音当成真实页面规模。真正看用户前端能点到多少页面。


我们要解决的问题类型

我们适合解决:

问题为什么适合
没网站单页站直接补空白
网站视觉旧模板和素材能明显改善
手机端差单页响应式能解决
CTA 不清楚结构和文案能解决
服务讲不清建站资料包能整理
信任证据没展示评价、评分、照片、资质能补
表单 / 电话不明显单页转化结构能补

我们不适合解决:

问题为什么不适合
大型多页迁移当前产品不是迁站项目
电商 / checkout牵涉交易系统
客户 portal / dashboard牵涉软件系统
大量 blog / 内容迁移超出标准单页
复杂 booking / CRM风险高,重建会破坏现有业务
口碑差 / 服务差网站不是根因

本轮要统一的筛选表

下一步要把所有筛选信号归成 4 类:

类别说明示例
直接挡命中就归档行业不对、已关店、页面太复杂
只观察记录风险,不单独踢牌照风险、外部资料冲突
加权参考改变优先级评分、评价数、PageSpeed、图片数
人工判断系统不能自动决定同名公司、资料冲突、复杂边界案例

最终目标:Matthew 一看就知道某个客户为什么留下、为什么被踢、为什么只是暂缓。

成本分层

筛选标准还要配合成本分层一起看。

原则是:免费、快、低风险的工具先跑;只有客户看起来值得,才跑耗资源审计或付费 API。

成本分层详见:

ProfitsLocal 成本分层筛选(中文)

2026-06-03 · 第一版。目的:把“先用免费快工具筛,再决定是否进入耗资源审计 / 付费 API”这件事讲清楚。

一句话

筛选客户不能一上来就跑全套深度审计。正确顺序应该是:

免费 / 秒级
→ 免费 / 几秒到几十秒
→ 免费但慢一点
→ 付费 API / 视觉 / 深度审计
→ 建站资料整理

每往下一层,成本和时间都更高,所以必须先问:

这一层拿到的信息,能不能帮我们判断“他是不是我们的目标客户”?


分层总表

前置快筛原则 · 先清资源

从现在开始,顺序要改成:

所有便宜 / 快速 / 不花钱的工具
→ 先集中扫一遍
→ 能排除的先排除
→ 只把留下来的潜力客户交给慢工具 / 付费工具

对应命令:

npm run pl:frontloaded-screening-plan -- --markdown

第一轮清资源现在只用这些;搜索归属判断也已接到无官网 / 身份不稳的第一步:

顺序工具主要作用
1lead 原始字段排除非 roofer、假数据、已归档、完全无法识别
2Google Maps / GBP 自带字段用评分、评价数、类目、官网状态判断业务基础
3roofer 行业相关判断排除非目标行业、供应商、平台、同行
4三层排除预检抓首页 / PageSpeed 前先挡明显不合格
5官网类型判断防止把社媒、目录页、报价平台误当官网
6Tinyfish / direct fetch 首页免费读首页,判断官网是否可用、是否像同一家公司
7首页基础质量快扫看 HTTPS、手机 viewport、CTA、电话、内容薄、陈旧年份
8页面规模 / 产品适配导航页太多、业务太复杂,直接挡掉
9PageSpeed / Lighthouse 免费额度只做重做价值证据,不当硬否决
10license 本地库观察查牌照风险,但身份没确认前不自动踢
11ABN / WHOIS / Wayback查公司身份、域名年龄、是否刚重做
12搜索结果 title/snippet + AI 同一公司判断没官网 / 身份不稳时先确认同一家公司
13master.md 覆盖检查防止重复跑工具,判断资料缺口

第一轮不跑这些:

Docker reviews
Playwright full fetch / detailed audit
Places Details
Places photos
Firecrawl
视觉 LLM

这些只给通过前置快筛、仍然有潜力的客户用。

快筛结果分桶命令:

npm run pl:frontloaded-screening-rules -- --sample --markdown

这条规则把快工具结果统一变成 7 个桶:快速排除、先补身份、无网站候选、有网站问题候选、轻触达、太好或太复杂、值得深挖。后面的资源投入只看这些桶,不直接按工具顺序硬跑。

层级什么时候跑成本 / 速度主要工具作用
L0刚拿到线索免费 / 秒级Maps scrape 原始字段、entity 已有字段排除假数据、行业不对、没联系方式
L1L0 没排除免费 / 秒级GBP 字段、review_count、rating、category、websiteStatus判断业务基础和大概价值
L2有官网时免费 / 几秒Tinyfish / direct-fetch 首页看官网是否薄、旧、没 CTA、没电话
L3有官网首页 HTML 后免费 / 秒级页面规模、viewport、基础 HTML 检查判断是否一个单页产品能解决
L4L2/L3 值得继续免费 / 20-30 秒PageSpeed / Lighthouse 免费额度判断性能问题是否能变成销售证据
L5身份基本可信后免费 / 本地或公共 API牌照库、ABN、WHOIS/RDAP、Wayback查风险、查历史、补信任事实
L6值得继续的客户免费但慢 / 30-60 秒Docker reviews、Playwright 简审补评价、截图、表单、手机端证据
L7通过前面筛选付费 / 慢Places Details、Places photos、Firecrawl、视觉 LLM深挖资料,做 master.md 和销售证据

L0 · 免费秒级:基础排除

目的 先踢掉明显不值得看的。

看什么

信号怎么处理
没公司名、没电话、没网站直接排除或先补资料
已关店排除
测试名 / demo 名排除
行业不匹配排除
政府 / 学校 / charity / 同行排除

现有依据

业务解释

这一层不解决“好不好”,只解决“是不是明显不该继续”。


L1 · 免费秒级:GBP / 地图初筛

目的 判断这个客户有没有基本业务价值。

看什么

信号用途
电话能不能联系,没网站客户尤其重要
地址判断真实业务和服务地区
rating业务口碑
review_count业务规模和可信度
category是否目标行业
websiteStatus分成没网站 / 有网站两条路径
image_count是否有素材基础

现有依据

怎么用

情况下一步
没网站 + 有电话 / 地址 + GBP 信号还行进入“没网站路径”继续补资料
有网站 + 口碑不错进入官网快扫
评价极少 / 评分差降低优先级或归档
类目不对归档

L2 · 免费快:Tinyfish / direct-fetch 首页快扫

目的 有网站的客户,先只看首页,不跑全站。

看什么

信号为什么有用
没 HTTPS明显信任问题
首页文字很薄可能是空壳站 / 模板站
没本地城市 / suburblocal SEO 和信任弱
电话不在首屏转化问题
没 CTA客户不知道下一步
年份过旧维护差
没 Services/About/Contact/Reviews/FAQ结构薄
没 mobile viewport手机端可能坏
表格布局 / 低质量图片老旧信号

现有依据

业务解释

这一层是“有网站客户”的关键初筛:不需要完整 audit,只要首页已经暴露明显转化问题,就值得继续。


L3 · 免费快:页面规模 / 产品适配

目的 判断这个客户是不是一个标准单页网站能服务的。

当前标准

信号处理
前端导航页 ≤ 20可以继续
前端导航页 > 20归档 / 超出产品包
没有导航页数据用 sitemap 内容页 fallback
sitemap 内容页 > 500安全归档

现有依据

业务解释

这一步不是看客户有没有价值,而是看我们能不能交付。 如果他的网站太复杂,一个单页产品解决不了,就不是当前目标客户。


L4 · 免费但稍慢:PageSpeed / Lighthouse

目的 性能问题是很好的销售证据,但不应该作为单独否决门。

看什么

信号用途
mobile performance慢说明重做价值更强
LCP / FCP / CLS / INP变成客户能理解的“打开慢 / 跳动 / 不稳定”证据
HTTPS / basic perf辅助判断老站问题

当前处理

现有依据


L5 · 免费:牌照 / ABN / 域名历史

目的 补信任事实,同时发现风险。

工具

工具成本用途
license SQLite免费本地查牌照候选 / 已确认牌照
ABN / ABR免费公共 API工商登记
WHOIS/RDAP免费公共 API域名年龄
Wayback免费公共 API是否刚重做、历史状态

怎么用

信号处理
确认牌照 / ABN可以进入建站事实
候选牌照但没确认同一家公司只观察
牌照过期 / 吊销只观察或人工判断
近 12 个月刚重做可能归档,销售时机不对
域名很旧、站很旧增加重做理由

重点

牌照不能乱写。必须先确认是同一家公司,才能进建站事实。


L6 · 免费但慢:Docker reviews / Playwright 简审

目的 对 L0-L5 里看起来值得的客户,补更强证据。

工具

工具成本 / 时间用途
Docker Google reviews免费 / 30-60 秒拉更多评价,比 Places 5 条更丰富
Playwright免费 / 30-60 秒截图、表单、移动端、真实页面体验
本地 LLM / Ollama免费 / 慢评价总结、视觉初判、身份辅助

什么时候跑

只给通过前面免费快筛的客户跑,不给每条线索默认跑。

2026-06-03 锁定触发条件

工具允许触发不触发写回位置能不能给 Design 用
Docker reviewsA/B 候选、高评价没网站客户、销售需要真实评价主题时L0-L5 已经排除、评分/评价太薄、同一客户还没确认master.md 的评价 / 口碑 / 销售资料区真实评价可用;AI 总结只做销售参考
Playwright 详细抓站有官网并且快筛活下来,或需要截图 / 表单 / 手机端证据页面规模已超、官网明显不是客户官网、无网站 starter 路径detailed-audit fixture、audit report、master.md 旧站问题区截图和表单事实可用;问题解读给销售 / 设计参考
本地 LLM / Ollama评价总结、视觉初判、同一客户辅助判断没有原始资料时不能编事实观察区 / 销售资料区不能单独当事实来源

代码核对:


L7 · 付费 / 耗资源:深度资料和深度审计

目的 只对值得继续的客户花钱或花大时间。

工具

工具成本什么时候用
Google Places Details付费,约 $0.017 / 次需要官方电话、地址、营业时间、少量评价
Places photos付费确定要建站 / 需要素材时
Firecrawl付费兜底免费抓取失败且客户值得
视觉 LLM订阅 / 慢已过筛,需要视觉审计或页面质量判断
完整 detailed audit时间更长通过便宜筛选后

原则

这层不是用来“找客户”的,而是用来“确认和丰富已经值得看的客户”。

2026-06-03 锁定触发条件

工具允许触发不触发写回位置能不能给 Design 用
Places Details需要官方电话 / 营业时间 / types / photo refs,且客户已是 B+ 或人工指定只是为了初筛、同一客户没确认、已有足够官方事实entity.latest.places_enrichmentmaster.md 核心事实 / 素材候选官方字段可用
Places reviewsDocker 不可用,或只需要官方少量评价补充每条 lead 默认跑、C/D 客户、没有 place_idreview fixture → master.md 评价区原文评价可用;只限真实返回内容
Places photos确定值得建站、需要真实图片素材时还没过筛、图片只为初筛图片素材候选区需质量筛选后可用
Firecrawl免费 direct-fetch / Tinyfish 拿不到足够页面,且客户已经值得继续默认抓站、初筛找客户、低价值客户multi-page crawl 结果,标记来源只用抓到的原始页面事实
视觉 LLM已有截图并需要判断视觉老旧 / 信任感 / 转化问题没截图、同一客户没确认视觉审计 / 销售证据作为设计方向,不当事实

代码核对:


推荐的筛选顺序

1. Maps / Places / 手动入口拿到初始客户
2. L0 基础排除
3. L1 GBP / 地图初筛
4. 分叉:
   A. 没网站:免费搜索 + 身份确认 + 资料够不够
   B. 有网站:Tinyfish 首页快扫 + 页面规模
5. L4 PageSpeed 作为重做价值证据
6. L5 牌照 / ABN / 域名历史补风险和信任事实
7. 如果仍值得:Playwright 详细抓站 / 截图 / 表单 / 手机端证据
8. 如果最终看起来是 A/B 或人工指定:Docker reviews / Places Details / GBP extras
9. 如果确定要建站或免费抓取不足:Places photos / Firecrawl 兜底 / 视觉 LLM
10. 生成 master.md
11. 再判断资料够不够给 Design / 建站

跟筛选标准的关系

这份分层回答的是:先跑哪个工具,后跑哪个工具。

SCREENING-STANDARDS-CN.md 回答的是:拿到信号后怎么决定。

两者合起来才完整:

问题看哪份
先用哪个工具查COST-LAYERED-SCREENING-CN.md
查出来后怎么判断SCREENING-STANDARDS-CN.md
这一步在总流程哪里FLOW-END-TO-END-CN.md

当前需要补清楚的决策

  1. 没网站路径的最低资料门槛:没有官网时,至少要哪些字段才继续。
  2. L6/L7 实跑样本:用 5 个真实 roofer 记录耗时、失败率、有效信息量。
  3. 资料包抽取边界:哪些评价 / 图片 / 官网内容能进入 Design,哪些只能做销售参考。
  4. PageSpeed 的使用方式:保持“销售证据 / 重做价值”,不要变成误伤客户的硬门。

2026-06-03 代码核对结果

这次核对后,可以先锁住以下现状:

层级状态代码证据结论
快筛 10 道便宜关卡已接上core/leads/fast-filter.js:17SSOT 页面“快速筛选漏斗”直接从这份代码生成
昂贵分界线已接上core/leads/fast-filter.js:40过了 10 道便宜关卡,才进入详细审计
牌照风险已接上但只观察core/leads/cheap-audit-queue.js:147牌照过期 / 吊销不自动踢,避免同名误伤
Tinyfish 首页抓取已接上core/leads/cheap-audit-queue.js:163有网站、行业相关、没被预排除时才抓
页面规模门已接上,会提前归档core/leads/cheap-audit-queue.js:182前端导航页太多会直接停,省掉详细审计
PageSpeed已接上,只加证据core/leads/cheap-audit-queue.js:217慢是重做理由,不是淘汰理由
三层排除已接上core/leads/cheap-audit-queue.js:239先排除明显不是客户,再谈分数
幸存者进详细审计已接上core/leads/cheap-audit-queue.js:248快筛活下来的统一 predict=Caudit_now=true
无网站资格检查已分流scripts/cli/pl-check-qualification.js:62无网站客户不走有网站 qualification,走 starter 路径
资格复核省钱门已接上scripts/cli/pl-check-qualification.js:74能用便宜信号判断失败时,跳过贵的 brief

快工具覆盖检查

命令:

npm run pl:frontloaded-screening-doctor -- --markdown

当前结论:

工具组第一轮状态处理
原始字段 / GBP / roofer 判断 / 三层排除 / 官网类型已第一轮使用继续保留在最前面
Tinyfish 首页 / 首页快扫 / 页面规模 / PageSpeed已第一轮使用有独立官网且没被预排除时先跑,页面太多可以提前停
license 本地库只观察但已跑记录风险,不自动踢,避免同名误伤
master.md 覆盖检查已第一轮使用进入慢工具前先看缺什么,避免重复跑
ABN / WHOIS / Wayback已第一轮使用在 Tinyfish / PageSpeed / 详细审计前补身份和域名时机判断
搜索结果同一公司判断已第一轮使用只写候选来源 sidecar,不写正式事实;社媒默认等登录读取

因此,现在真实说法是:13 个快工具都已经进入第一轮或明确观察使用;目前 12 个完整前置,1 个已跑但只观察。

本轮退役 / 修正的旧说法

旧说法现在以这个为准
“predict A/B 才进详细审计”错。现在是快筛幸存者统一 predict=C,并且 audit_now=true,详细审计后再给真正 A/B/C/D。
“牌照过期 / 吊销直接踢掉”错。现在只观察;只有身份确认后才记录风险,仍不自动归档。
“cheap audit 分数直接决定是否进审计”不准确。分数解释重做机会和排序;真正挡住的是排除规则、页面规模门、后续资格硬门。

2026-06-03 · L6/L7 5 个 roofer 样本回放

命令:

npm run pl:l6-l7-trigger-replay -- --markdown

这次是 report-only:只读本地 entity / fixture,不联网、不调用 Docker、不调用 Places、不发 Discord。

样本

客户当前状态为什么选它
iFix Roofingready-to-build · B · 86 reviewsB/ready,高口碑,应该触发后置补强
A & J Roofing Solutionsoutreach-active · C · 有官网C 客户,应该证明不会默认花钱
Ultra Roof Restorationsqueued_for_audit · 无网站 · 93 reviews没网站但口碑强,应该走无网站补资料
Brisbane Roofing Solutionsarchived · D · 118 reviews高评价但已归档,应该停止所有慢/付费工具
Vicwest Roofingoutreach-active · C · 已有 Places + reviews已有资料,应该避免重复跑

回放结果

工具runalready_donefallback_onlyafter_places_detailsholdskip
Playwright 详细抓站030002
Docker reviews210002
Places Details210002
Places reviews012002
Places photos000212
Firecrawl000032

结论

  1. B/ready 客户:可以触发 Docker reviews + Places Details;Places reviews 只做 Docker 失败时的补充。
  2. C/outreach 客户:不默认拉评论,不默认跑 Places Details;已有 Playwright 详细抓站就不重复跑。
  3. 无网站但高口碑客户:不跑 Playwright / Firecrawl;应该补 Docker reviews 和 Places Details,让 master.md 有足够事实和评价素材。
  4. 已归档 / D 客户:即使评价很多,也停止所有 L6/L7 慢工具和付费工具。
  5. Firecrawl 本轮 0 个触发;它仍然只是免费抓取失败后的兜底,不是常规步骤。

下一步要打通的判断

本段已把 L6/L7 触发条件锁成表,并完成 5 个 roofer 样本回放。

2026-06-03 追加完成:

  1. 新增 pl:resource-plan-replay,把“目标客户类型”和“资源投入阶段”合并成一张业务判断表。
  2. master.md 的“筛选与去向记录”已经写入 resource_band、现在可跑、暂缓 / 兜底、明确不跑。
  3. iFix / Ultra 已完成 Docker reviews + Places Details 小批量实跑;iFix 进入 Design 资料包,Ultra 继续无网站 starter 素材缺口。

2026-06-04 追加完成:

  1. pl:frontloaded-screening-rules -- --all-roofers --markdown 可以对本地全部 roofer 线索做只读快筛回放。
  2. pl:resource-plan-replay -- --all-roofers --markdown 可以对同一批 roofer 线索做只读资源投入回放。
  3. 当前本地数据:249 个 entity,247 个 roofer 相关;pl:master-md-coverage 通过,249/249 都有 master.md、筛选记录和下一步行动。

全 roofer 快筛结果:

快筛桶数量资源含义
快速排除149第一轮就停止,不跑慢工具和付费工具
先补身份12只做身份确认,不进 Design
无网站候选4进入无网站资料补强
有网站问题候选14可进入详细审计或后置补强
轻触达58保留证据,不默认继续花资源
太好或太复杂0当前没有命中
值得深挖10才允许后续慢工具 / 付费工具

全 roofer 资源投入结果:

资源阶段数量默认动作
stop149停止投入
light_touch39轻触达,不默认加重研究
identity_first17搜索确认同一家公司
deep_audit_allowed16免费本地详细审计优先
slow_free_then_paid16看缺口补强;不等于自动花钱
no_website_materials4reviews / Places / 图片候选补齐
design_ready3抽 Design / 销售资料包
manual_review2人看 master.md 风险
operator_review_before_spend1花资源前复核

这组数字说明成本分层已经有实际效果:先用 L0-L5 便宜工具把 149 条停掉,再把 Docker / Playwright / Places / Firecrawl 限制在少数有把握的客户上。

下一步要做的是:

  1. 验证补回来的图片候选是否按边界进入 master.md / starter 素材区。
  2. 继续找一个“免费抓取失败但值得继续”的真实案例,专门验证 Firecrawl 兜底路径。
  3. slow_free_then_paid 的内部 id 暂时保留,中文统一叫“看缺口补强”,避免误以为所有这类客户都要立刻花钱。

当前默认决定

代码里的统一来源是 core/leads/screening-defaults.js。改阈值先改这里,再跑全 roofer 回放。

问题决定
无网站强候选rating ≥ 4.5、reviews ≥ 20、可联系、有 Place 身份,先作为硬规则
低口碑客户rating < 3.0 且 reviews ≥ 5,自动快速排除;人工点名才例外
轻触达客户不默认跑 Docker / Places / Firecrawl,只走轻量销售
补强阶段中文统一叫“看缺口补强”;先看 master.md 缺什么再决定是否跑工具
登录来源优先级Facebook → Instagram → LinkedIn
页面规模继续用前端导航页 > 20 挡,sitemap > 500 安全挡
Discord 旧 404单独开清理,不挡筛选主线

资料来源 → master.md 写回表(中文)

2026-06-03 · 目标 1 产物。 核心原则:任何 lead 进入系统后,都应该有 master.md;后续筛选、audit、销售、Design / 建站资料,都从 master.md 这份总档案抽。

一句话

master.md 是 lead 的总档案,不是建站后才有的文件。

所以所有资料都要回答 5 个问题:

  1. 从哪里来?
  2. 什么时候跑?
  3. 免费还是付费?
  4. 写进 master.md 哪一块?
  5. 后面能不能用于客户网站?

写回分级

等级含义能不能上客户网站
核心事实已核实的名字、电话、地址、服务、牌照、ABN、评价等可以
建站素材可用于页面结构、服务说明、图片、FAQ、信任块只用已核实部分
销售资料用来写销售报告、外联话术、客户痛点不一定
风险观察牌照风险、资料冲突、身份不确定、页面复杂度不直接上网站
缺口记录缺电话、缺地址、缺官网、资料太薄不上网站

资料来源总表

资料来源工具 / 位置成本什么时候跑写进 master.md后续用途
Maps / gosom 原始线索pl:scrape-docker免费lead 入口公司基础资料、来源、评分、评价数、官网初筛、销售背景
Google Placespl:places-search-intake / Places API付费需要官方资料或补缺时名字、电话、地址、营业时间、少量评价、照片引用身份确认、事实补强
单客户补录pl:single-enrich视来源Matthew 给具体客户时公司基础资料、补录来源人工入口统一进档
路线判断lead-route-decision.js免费每次生成 master.mdentry_routesearch_timingnext_step让运营知道搜索该早做还是后置、下一步该去哪
牌照库pl:license-lookup / SQLite免费身份基本可信后牌照状态、候选、确认程度风险观察;确认后可做信任事实
ABN / ABR公共 API免费需要工商事实时ABN、注册实体、状态核心事实或风险观察
Tinyfish / direct-fetch 首页tinyfishFetchUrls / direct fetch免费有官网时的早期快筛首页问题、电话/CTA/本地词、结构薄厚筛选、销售痛点
PageSpeed / Lighthousepagespeed-insights.js免费额度首页快筛后,值得继续时性能分、LCP/FCP/CLS/INP销售证据,不单独挡客户
页面规模page-scale-gate.js免费有官网 HTML 后前端导航页数、是否超产品包判断能不能用单页服务
WHOIS / RDAPdomain-history.js免费有官网时域名年龄、注册历史销售证据、风险观察
Waybackdomain-history.js免费有官网时是否刚重做、历史状态销售时机判断
Docker reviewspl:docker-reviews-enrich / fetch-reviews-local.js免费但慢高价值客户 / A/B 候选评价样本、口碑主题、可引用评价销售、信任块;不自动退到 Places reviews
Places reviewsfetch-reviews.js付费Docker 不可用或需要官方补充Google 返回的少量评价信任证据
官网多页 crawlmulti-page-crawl.js免费优先,Firecrawl 兜底付费通过快筛后服务、关于、联系、图片、表单、结构化数据master.md、建站素材
外部搜索 / 提及Tinyfish / DDG / mine-background免费身份确认后外部背景资料,单独标来源销售参考,不直接当事实
社媒 / OpenCLIOpenCLI免费但默认后置需要背景时社媒活动、外部状态参考 / 销售,不默认跑
图片 / Places photosPlaces photos / 本地分类付费或已有素材确定值得建站时图片候选、分类理由建站素材,需质量筛选
视觉审计Vision LLM / Ollama fallback订阅或本地通过快筛后视觉年龄、信任感、转化问题销售证据、设计方向
表单 / 手机端 / 截图Playwright免费但慢值得继续时截图、表单问题、手机端问题audit report、销售证据

L6 / L7 资料写回边界

这一段专门锁定“慢工具 / 付费工具”怎么进入 master.md,避免它们重新变成默认初筛。

来源触发条件写进 master.md 哪里Design / 建站能不能用
Docker reviewsA/B 候选、高价值没网站客户、销售需要评价主题评价样本、口碑主题、销售切入点真实评价原文可用;AI 总结不能当事实
Places reviewsDocker 不可用或需要官方少量评价补充官方评价样本、评分 / 数量核对真实评价原文可用;只限 Google 返回内容
Playwright 截图 / 表单 / 手机端有官网并通过快筛旧站问题、截图证据、表单问题、手机体验截图事实可用;问题解释给销售 / 设计参考
Places DetailsB+、人工指定、需要官方电话 / 营业时间 / types / photo refs核心事实、营业时间、电话、素材候选官方字段可用
Places photos确定值得建站,且需要真实图片素材图片候选、来源、筛选状态质量筛选后可用
Firecrawl免费抓取失败,且客户值得继续多页抓取结果,明确标 Firecrawl 来源只用抓到的页面事实
视觉 LLM有截图后判断旧站视觉问题视觉审计、销售证据、设计方向方向可参考,不能编事实

代码来源:

总边界

master.md 可以记录所有来源,但 Design / 建站资料包只能抽已核实事实、真实评价、真实图片、官网原文和明确来源的截图证据。搜索候选、AI 判断、风险观察、未确认社媒内容不能直接抽给 Design。


没网站路径

没网站的 lead 也必须有 master.md

先写入

然后补

补什么工具写入方式
官方身份Places / 搜索 / 电话 / 地址核心事实或身份观察
服务范围GBP 类目、评价、外部资料建站素材候选
口碑Docker reviews / Places reviews销售资料和信任素材
图片GBP / Places photos建站素材候选
牌照 / ABNlicense / ABR风险观察或核心事实

关键判断

没网站客户不是自动通过。要看:


有网站路径

有网站的 lead 也必须有 master.md

先写入

然后补

补什么工具写入方式
首页薄 / 没 CTA / 没电话Tinyfish / direct fetch销售痛点
性能慢PageSpeed销售证据
页面太多page-scale产品适配判断
表单 / 手机端问题Playwrightaudit 证据
视觉旧Vision LLM设计方向 / 销售证据
服务 / 关于 / 联系 / 图片multi-page crawl建站素材候选

关键判断

有网站客户不是自动适合。要看:


写入 master.md 的推荐结构

每个 master.md 应该逐步形成这些块:

内容
入口与来源从哪里发现、搜索词、批次、人工输入
公司身份名字、电话、地址、官网、place_id、身份确认状态
筛选与去向记录entry_routesearch_timingnext_step,说明这条 lead 在哪条路上
免费初筛GBP、评价数、评分、类目、是否有网站、直接排除项
成本分层结果L0-L7 哪些跑了、哪些没跑、为什么
筛选判断直接挡 / 只观察 / 加权参考 / 人工判断
旧站问题有网站时写首页、速度、手机端、CTA、页面规模
没网站资料缺口没网站时写缺哪些事实、需要怎么补
采集资料官网、GBP、评价、牌照、ABN、域名、外部背景
销售切入点为什么客户会在意、我们能解决什么
建站素材服务、地区、评价、图片、FAQ、信任证据
决策记录A/B/C/D、ready-to-build、归档或下一步

哪些能抽给 Design / 建站

可以抽:

不能直接抽:


当前代码 / 流程缺口

这份表是目标状态。下一阶段需要核对真实代码是否已经做到:

  1. lead 进入系统后是否一定生成骨架 master.md
  2. 免费初筛结果是否写进 master.md
  3. 成本分层 L0-L7 跑过 / 没跑是否写进 master.md
  4. 归档 lead 是否仍保留并更新 master.md
  5. 没网站路径是否有专门的 master.md 结构。
  6. audit report 是否全部从 master.md 抽,而不是另起资料源。
  7. Design / 建站资料包是否只从 master.md 和已核实事实抽。

第一目标结论

第一目标不是先改代码,而是先锁住主线:

lead 进入系统
→ master.md 骨架
→ 每个筛选 / 采集 / audit 结果写回 master.md
→ 销售、audit report、Design / 建站资料包都从 master.md 抽

这条线锁住后,再看哪些脚本没写回、哪些文档还在绕开 master.md

需要登录读取的信息源

2026-06-03 · 来自 roofer 搜索身份观察 20 个唯一客户汇总 2026-06-03T10-15-20-757Z-combined-20。用途是给 Matthew 准备账号和 OpenCLI 登录态,不是正式客户事实。

结论

登录受限来源主要是社媒:

来源网站链接数涉及客户数账号准备
Facebook3812优先准备
Instagram145优先准备
LinkedIn95优先准备

说明:

OpenCLI 实测状态

2026-06-03 已做只读 smoke test:

项目结果
OpenCLI1.8.1
Daemon已连接
Browser Bridge已连接,当前 profile z3wvy2xe
读取开关ENABLE_OPENCLI_FETCH=1 后可读
LinkedIn smoke testhttps://www.linkedin.com/company/linkedin 读取成功,返回 13,751 字符

真实 roofer 样本也已跑过一次:

样本命令结果
A & J Roofing Solutionspl:observe-search-identity --opencli16 个搜索链接;OpenCLI 读完后 login_required=0fetch_failed=0

这次真实样本里,社交来源读完后的归属结果:

结果数量说明
AI 高信心同一客户1Facebook 主页读到正文后,有 owned_domain 证据
可能同一客户3Facebook 照片页、Facebook reviews、LinkedIn 个人页,证据不够强
明确不同3Instagram 帖子读完后判断不是这个客户
需要登录后判断0本次样本登录待读清零
读取失败0本次样本没有 OpenCLI 读取失败

对应观察报告:

data/leads/search-result-identity-observe-runs/2026-06-03T10-44-38-396Z

小批量读取结果

2026-06-03 又补了两个含社交候选的真实 roofer 样本:A & J Roofing Solutions、Apex Roofing。

指标数量
客户样本2
OpenCLI 已读社交链接15
AI 高信心同一客户1
可能同一客户6
明确不同8
读取失败0
仍需登录后判断0

按来源网站拆开:

来源网站已读AI 高信心同一可能同一明确不同读取失败仍需登录
Instagram602400
Facebook411200
LinkedIn / 地区 LinkedIn301200
Facebook 地区域名202000

对应报告:

data/leads/search-result-identity-observe-runs/2026-06-03T10-49-26-073Z/opencli-source-stats.md
data/leads/search-result-identity-observe-runs/2026-06-03T11-01-48-898Z/opencli-source-stats.md

阶段结论:

当前样本统计

指标数量
已完成客户20
搜索链接282
AI 高信心同一客户95
可能同一客户5
明确不同公司117
登录受限65
抓取失败0

原始来源清单

来源网站链接数涉及客户数建议
facebook.com3612优先准备登录态
instagram.com145优先准备登录态
au.linkedin.com64优先准备登录态
ca.linkedin.com11优先准备登录态
id-id.facebook.com11优先准备登录态
id.linkedin.com11优先准备登录态
linkedin.com11优先准备登录态
ms-my.facebook.com11优先准备登录态

完整机器生成清单:

data/leads/search-result-identity-observe-runs/2026-06-03T10-15-20-757Z-combined-20/login-required-sources.md
data/leads/search-result-identity-observe-runs/2026-06-03T10-15-20-757Z-combined-20/login-required-sources.json

账号准备优先级

  1. Facebook

先登录一个专用账号。当前样本里 Facebook 量最大,且很多 roofer 会把项目照片、评价、营业状态放在 Facebook。

  1. Instagram

第二优先。Instagram 常见内容是项目照片、短视频、施工动态,适合做背景资料和图片线索。

  1. LinkedIn

第三优先。LinkedIn 更常出现负责人、公司员工、职业背景;对 Design 正式事实帮助有限,但对销售背景调查有用。

使用边界

下一步

🏗️ 我们怎么做一个网站(canonical 流程 · 用人话)

这是唯一的建站流程pl:compose-editorial 模板渲染 · 免费 · 可重复 · 不靠外部设计团队、不靠 OD)。 老路(OD 守护进程 / V2 拼装 / 整页 LLM 渲染 / families 模板)已全部封死(32 个废命令一跑就报错)。

第一段:把客户研究透 → master.md

  1. 抓客户(Google 地图 / 牌照库)→ 名字/电话/评分/有没有官网
  2. 筛掉不合适的(太小/关店/连锁/同行)
  3. 审老网站(程序爬 + 打分 12 维 + 视觉大模型看截图)
  4. 定级 A/B/C/D(值不值得做、做哪种)
  5. 出 master.md —— 客户研究档案,后面一切的源头

第二段:master.md → 真网站(5 步 · 全确定性 · $0 渲染)

工具干什么性质
① 深挖背景llm-extract-core融成 core-extract.json锁定事实(ABN/牌照/电话/评分) + 丰富叙述(公司背景/团队/客户原话)大模型 · 事实的真源头
② 抽中间合同extract-site-ctxsite-ctx.json(所有文案工具读它)零 LLM · 确定性 · 已稳
③ 写文案enrich-handoffhero / 服务 / about / faq大模型 · 唯一弱环节(正在优化:直接吃①的背景写)
④ 锁渲染合同build-single-page-brief把铁的事实再锁一遍,防文案写错零 LLM · 确定性
(桥) 打包同步assemble-handoff把文案同步到渲染要读的地方(有新鲜度闸防旧文案)
⑤ 渲染网站compose-editorial套模板 + 填文案 → editorial-output/index.html就是网站模板+Mustache · $0

模板:2 个 canonical —— editorial-newsletter(均分91) / trade-classic(均分84),单页。

出网站之后:质检(见「网站审计」tab)

三条要记住的

  1. 事实可靠、文案要打磨:电话/牌照/评分走确定性、锁死;真功夫在第③步把事实变成好文案。
  2. 只有一条建站路compose-editorial 模板渲染。
  3. 老路全封死:32 个废命令一跑报错(PL_ALLOW_DEPRECATED=1 才能强行跑,仅供重测)。

当前架构的自由度(灵活模块系统 · R170-R184 · codex 全程签字 ✅)

2026-06-03 新增 · 配方 + 自动选 + 2个新模块(全 opt-in · 正在标定): - 配方(recipe):4套命名布局 —— editorial-default(不变) / trust-heavy(信任优先) / visual-first(视觉优先) / local-seo(本地优先)。--recipe <名> 选用。 - 自动选配方 --auto-recipe:系统按已核实数据自动挑布局(有质保+执照+口碑+团队→信任优先;真实工程照≥3→视觉优先;核实小镇≥12→本地优先;信号弱/打平→默认)。纯数据驱动、不用大模型。 - 2个新模块团队(显示核实过的人·首字母头像·不编假脸)/ 服务区地图(覆盖区变体·核实小镇做成"中心+周边"视觉·不用iframe)。 - 守纪律:每套配方硬不变量(hero第一·联系/页脚收尾·不许两个数据条挨着);新模块只读已核实数据;质保检测抽成一个共享源(detect-signals.js)compose和选配方共用。全 opt-in、默认行为没变、一致性 31/31。要设成自动默认得过标定A/B+你眼检。

积木式搭建:网站模块拆成了独立「积木」(templates/roofing/blocks/ + 登记表 index.json:哪个积木放哪个区、什么条件出现),排版大脑按客户数据自动拼装。

- FAQ 常见问题 — 有 ≥3 条真实问答才出现(放服务区后) - 质保承诺带 — 核实过有质保年限才出现(放评价区后);只读已有质保数据、不新增任何信息源 - 施工流程 — 通用流程文案;默认关(配置 optional_blocks.include_generic_process),要开再开

安全底线:实时渲染仍走老的整页模板compose --use-layout-plan 默认关)—— 智能拼装目前只改「计划文件」、没真正上线。一致性测试全程 31/31 绿(智能版 vs 老版逐字节一致)。审计同评委对比:智能版 67 ≥ 老版 66,零倒退(还略升)。

🔬 我们的网站审计(很牛 · 用人话)

建出来的网站不是"看着差不多就行"——每个网站过一套多层、可量化、带否决权的审计,分数低就不发。 标准源头:docs/v3/SOP-AUDIT-STANDARD-V2.md(canonical)。工具:pl:audit-v4 + pl:copy-audit + pl:persona-copy-audit

一、5 个 P0(Matthew 钦定 · 综合分加权)

最终综合分 = 这 5 项加权:

P0权重看什么
内容准确 content_accuracy25%电话/牌照/ABN/地址有没有写错或造假(确定性硬核对 · 错就直接挂)
文案质量 copy_quality25%事实性 / 语气 / 具体度 / 说服力(4 个子维度,大模型判 + 校准过)
品牌还原 brand_fidelity20%配色/字体/logo 有没有忠实落地
内容丰富 content_richness15%信息够不够厚、有没有空洞
设计一致 design_consistency15%视觉/排版/留白/可读性

二、三层检查(各管一段)

  1. T1 确定性检测器(7 个 · GATE-A 硬门):硬事实核对 · 出处追踪 · 套话泄漏 · 服务/信任/占位符检查。不靠大模型猜——能挂就挂。
  2. T3 视觉大模型:看真实截图判 布局/字体/配色/可读性/文案厚度(受 vision 置信度把关)。
  3. 移动端否决(mobile veto):手机上点击区太小/排版崩 → 直接否决,分数再高也不发。这是 AU 本地生意的铁规。

三、为什么"牛"

四、当前标定基线(editorial-newsletter)

vicwest 91 · a-j 89 · mark-squire 93(均分 91)。trade-classic 均分 84。

五、质检在流程里的位置

建站链 ⑤ 渲染出 editorial-output/index.html 之后跑:copy-audit(诚实)→ audit-v4(5 P0 + 移动否决)→ persona-copy-audit(买家分)。全过才算"可发"。

核心里程碑(中文)· 我们收集什么 · 用什么工具 · 成本 · 有什么用 · 用没用上

6 个里程碑,覆盖一条线索从数据采集到网站上线。每个标清楚:产出什么 · 内容结构 · 工具 · 免费/付费(成本) · 时间 · 用途 · 写手→读者 · 闸门 · 弱/没用时该怎么办。 数据使用状态:✅ 已接进流程 · 🔭 有工具但偏后置/默认不跑 · ❌ 建了但没被调用 · ⚠️ 花钱/贵。更新于 2026-06-03(模块 3 采集核对)。

⚠️ 数据使用状态总览(你最关心的"有没有用到流程里")

数据/能力工具成本状态
Google Places(名/址/电话/评分/营业时间/照片)Places API⚠️ 付费 ~$0.017/次(已记 452 次)✅ 用了
网站爬取(全站 HTML/正文/图)direct-fetch + tinyfish;Firecrawl 兜底免费为主;Firecrawl 显式兜底才付费✅ 用了(默认免费优先)
搜索(找官网/社媒/提及)Tinyfish + DuckDuckGo免费✅ 用了
ABN/ABR 工商登记公共 API免费✅ 用了
WHOIS/RDAP + Wayback(域名年龄/历史)公共 API免费✅ 用了
评价(口碑)Docker(免费) / Places API(付费)免费/⚠️付费✅ 用了(A/B 优先 Docker)
文案/视觉/判断(LLM)Ollama本地(免费) / codex·claude(订阅)免费/⚠️订阅✅ 用了(本地优先)
牌照库(42 万行 SQLite)license-lookup免费/本地✅ 已接筛选观察;确认后可写牌照
PageSpeed/Lighthouse(性能真实数据)免费 API 25k/天免费✅ 已接 cheap screen(移动端先跑)
Places 照片(单独抓)Places API + Cloudinary⚠️付费🔭 有工具,偏付费后素材补充
OpenCLI 社媒登录抓取本地浏览器免费🔭 已清关但默认关(env 开关)
可行动:Places 照片、OpenCLI 社媒抓取属于偏后置能力;继续核对它们什么时候该跑,避免一开始就增加成本。

里程碑 1 · 数据采集 / 富集(master.md 之前的输入)

里程碑 2 · master.md · 汇总档案(漏斗底部的基石)

里程碑 3 · 建站前审计 · 客户现状网站(筛选 + 销售角度)

里程碑 4 · 能不能开工 · 数据就绪闸门 + 交付前审(codex 说这是最该补的里程碑)

里程碑 5 · 交给设计 / 渲染的包(od-package · 锁定契约)

od-package/
  facts.json          ← 锁定事实(名/址/电话 · 逐字不改)
  brand/              ← logo 多变体 SVG + brand-tokens.css + brand-spec.json
  content/            ← services.json · about.md · hero-copy.json · faq.json · reviews.json (LLM抽取·带_source来源)
  structure/          ← page-map.json · header/footer/cta-system · seo-strategy.md
  assets/             ← 真实客户照片 + 缺图用图库兜底 + asset-prompts.md
  shared/             ← header.html · footer.html · shared.css(每页复用)
  DESIGN-MANIFEST.json← 机器读:family · read-order · factsPolicy(mustNotInvent 清单)
  DESIGN-HANDOFF.md   ← 人读:8 章(事实/品牌/内容/架构/图片/审计/边界/建站指令)

里程碑 6 · 建站后审计 + 上线(发布闸门)


销售/外联(结账→Stripe→改稿→发布 · SALES_FUNNEL)是下游业务流,用上面这些产出,但不算"建站核心里程碑",本页先不展开。

项目路线图(中文 · 实时维护)

这是我们按它推进的计划,也是 Matthew 唯一看的页面。状态:✅ 已实现(线上跑) · 🔭 已建·只观察(不真动手,等放行) · 🔄 计划中(还没建/没批)。 所有 SSOT 文档都在本页"文档索引"列出 + 在"锁定决策"tab 里能读。命令 npm run pl:publish-business-map 重新发布本页。更新于 2026-06-02。

📌 进展日志(最新在上)

- 摸清现状(hard evidence):交付流水线已建好且能全自动跑(6 个命令 build→enrich→设计文档→评分→打包→审计)。vicwest 已是 93/100「可发版」。 - 真测一个全新客户(apex-roofing)从头跑——证明流水线真能自动产出(hero/分章/图片绑定/fix-matrix 全自动,不靠人工),落在 56/100「需先修关键项」。 - 修了 codex 锁的 4 个 bug(每个都重跑 apex 验证):① hero 按钮显示成 [object Object] ② 锁定电话没按"数字相等"判(格式不同被误杀)③ 页头/页脚/CTA 没自动生成(已接进流水线·§13/14/15 现在有了)④ 打包命令 --skip-checkpoint 失效。 - 建了一键编排命令 pl:build-complete-handoff:一条命令把 6 步串起来 + 算一个"能不能交付"总闸(设计文档✓ 评分=可发版 ✓ 校验✓ 打包✓ 7 层审计✓),每个客户产出一份 _complete-handoff-status.json 列出还差什么。这把"离能交付还有多远"变成机器可量化的清单。 - 深度审计(P1-P7)又暴露了更完整的差距:品牌包/logo 没生成(logo 技能还没接)、image-manifest 漏建一步、锁定电话格式过审计、模板 family 名对不上。这些 + 2 个待裁定(商家名要在哪些地方逐字出现 / 一个查空目录的废校验器要不要退役)都在等 codex(codex 暂时用量到顶·约 5:03pm 恢复)。 - 下一步:codex 回来→裁定 2 个问题 + 决定品牌包是否算"设计交付"硬门→补齐 apex 到「可发版」→试点 3-5 个→批量 ~74 个。Phase D/C 暂缓。

📚 文档索引(SSOT · 全部在 docs/v3/

关键的两份已渲染进本页 tab("锁定决策"=CANONICAL §0 · "漏斗清单/控制层"=技术细节)。完整源文件在仓库 docs/v3/

一、整条漏斗(多入口 → 一个身份 → 成本分级筛选 → master.md → 建站)

入口(都收敛成"一个公司身份")

统一流程(所有入口共用)

成本分级筛选(最便宜的先筛)

深度采集 + 产出

二、身份识别 + 金标准(精度优先 · 误认率必须 0)

三、控制层(Discord / Agent / Skill · 模块化)

四、建造顺序(codex 定 · 我们按这个推)

  1. 漏斗记账上线pl:run-funnel --rollup · 看每层淘汰多少 · R148)
  2. Phase B 页面规模修复(前端导航页门 + 救回 24 客户 · R149)—— 刚完成
  3. Phase 2 · master.md 整合(外部资料 + 精选图片汇进建站素材 · codex R154 审计签字)—— 刚完成
  4. Phase 3 · 身份写入通道(先"提议+观察",真写入等金标准 300-500 通关 · 你已暂停
  5. 🔄 Phase 4 · 采集骨干(SPEC-GATHER-MODULE):✅ Phase A 免费爬虫已上线(默认翻成免费·砍 Firecrawl);🔄 剩 Phase D 验证模型 + Phase C 统一采集接口
  6. 🔄 重爬 83 个无抓取记录的被错杀客户(等下游稳定后批量做)

五、"新筛选逻辑"现状(你问的)

核心文档(中文)

业务过程中的核心文档,三类:C 从头梳理模块 + B 每个客户产出的文档链 + A 定义流程的 SOP(只列核实在用的,旧的/不确定的标清楚)。 状态:✅ 核实在用 · ⚠️ 代码在用但文档可能有偏差(待核) · 🗑️ 旧的别看。更新于 2026-06-03。

C · 从头梳理模块(当前推进用)

这组文档是为了把业务从 SSOT 页面往下拆清楚,再一层层推进:

B · 每个客户产出的文档链(业务的实物产出)

一条线索走完流程,会沉淀这条链(clients/<slug>/v2/)。带 ★ 的是"数据之记录"(CANONICAL 认定的核心,其余多是实验/历史 churn,别被淹没):

顺序文档是什么哪一步产出(writer)★记录
1data/leads/entities/<id>.json线索档(名字/电话/地址/状态/历史)发现:pl:scrape-docker/pl:places-search-intake/pl:lead-discovery
2handoff/od-package/facts.json + multi-page-crawl/ + photos/富集产物(事实 + 爬取页 + 选好的照片)富集:pl:enrich-entity + pl:places-enrich + 图片分类(vision)
3core-extract.json核实过的事实(real_facts 带来源;本会话加了 external_facts 外部资料)pl:llm-extract-core / buildCoreExtract
4master.md核心:背景 + 审计 + 建站素材(这条链的基石,21+ 章)leads:build-master-md
5single-page-brief.yaml建站 brief(12 项交叉校验)pl:build-single-page-brief
6checkpoint.json数据够不够建站的闸门(RED/YELLOW/GREEN)pl:data-checkpoint
7internal-audit-report.html + customer-facing-audit.html审计报告(内部 + 客户版)leads:run-pipeline / pl:build-customer-audit
8editorial-output/index.html渲染出的网站pl:compose-editorial
提醒:客户目录里还有 40+ 个文件(audit-a/b/ccore-extract-codex/ollamacomparison-* 等)= 实验/历史 churn,不是核心。核心就上面这 8 个(带 ★ 的 6 个是数据之记录)。

A · 流程 SOP(只列核实在用的 · 按阶段)

每份都对着代码核实过 CLI 是否还在、是否接进线上。✅ 才放,⚠️/🗑️ 标清楚。

发现 / 进件

审计

数据就绪 / 建站准备

渲染 / 建站

销售 / 运营

⚠️ 代码在用、但文档可能有偏差(待核对,先别全信文档)

🗑️ 旧的 · 别看

锁定决策(中文视图)

这是 CANONICAL.md §0 的中文版。锁定 = 没有实证 + codex 共识不能改。 权威源是英文 docs/v3/CANONICAL.md(codex/agent 读英文)。更新于 2026-06-02(v1.7)。

建站 / 渲染侧(已锁定)

管线 / 数据(已锁定)

筛选侧(本会话新加 · 见路线图)

废弃路径(别复活 · 除非满足重测条件)

控制层(中文)· Discord / Agent / Skill

漏斗怎么被触发、任务怎么排队、谁来执行、哪些检查负责发现“用户看不见”的失败。更新于 2026-06-03。更细拆解见 docs/v3/MODULE-11-CONTROL-LAYER-CN.md

一句话

控制层现在是半自动:Discord 可以进任务,任务可以排队执行,检查器也不少;但从入口到上线还不是一个完整自动按钮。

当前主路径

flowchart TD
  A["Discord #website-tasks"] --> B["pl-task-listener"]
  B --> C["intent-router"]
  C --> D["data/tasks 任务文件"]
  D --> E["pl-task-dispatcher"]
  E --> F["目标 CLI"]
  F --> G["客户资料 / master.md / 审计结果"]
  G --> H["Discord 回写"]

对应代码:

Discord 入口

入口状态说明
#website-tasks发任务入口:自然语言找客户、Places intake、单商家补录、图片识别、网站审计、模糊任务转人工
#website-leads每条线索一个 thread,显示阶段 / 分级 / 记录
#website-projects⚠️项目 thread 代码存在,但历史消息和 profile card 要靠 doctor 保证
#lead-discovery-runs⚠️批次进度 thread 是关键可见结果,之前出现过“任务 done 但 Discord 上看不到”的问题
#paid-websites🔄付款后网站交付阶段,还不是当前主线

原则:Discord 上看不见,就不能只按任务文件 done 算完成。

任务队列

任务存在 data/tasks/,核心字段是:

模糊任务会进 human,不会硬跑。操作员可以用 reaction 做 retry / archive。

漏斗入口

pl:run-funnel 是获客漏斗的轻量入口。

它串联:

注意:

容易混淆的命令

pl:pipeline-all 名字像“全流程”,但它不是获客漏斗。

它真正做的是:

Agent / Hermes

当前状态:

Skill 层

现在真正进入运行时的 PL skills 主要是 3 个数据型 skill:

它们由 scripts/cli/skills-build.jsSKILL.md 生成 JSON,给审计、文案口吻、页面结构使用。

其他 profitslocal-* skills 多数是说明书 / 工作流 / agent 提示,不是自动运行器。

Doctor 检查

检查用途
pl:lead-journey-doctor看客户生命周期数据是否一致
pl:goals-doctor --quick文件层检查核心目标
pl:goals-doctor完整模式会查 Discord 和线上链接
pl:publish-doctor检查已发布 URL 是否还活着
cycle:doctor检查 Discord 可见内容、thread 状态、阶段消息和过期说法
skills:check检查 skill JSON 有没有跟 SKILL.md 漂移

本轮实测状态:

当前最大缺口

  1. 旧的“选错入口”问题已补三层。

已补:模型提示词不再暴露 pl:scrape-docker;执行器遇到 pl:scrape-docker 但没有 --batch-id 会直接失败并发可见提醒;intake-doctor 会检查最近 batch 是否有 Discord thread,且用 Discord API 抽查是否存在。

  1. 发布已有最小 Discord 入口,但还没有完整 Hermes 外壳。

现在 Discord 可把 publish <slug> to <email> 路由到 pl:ship-customer;缺邮箱或 slug 会转人工。Hermes 可调用包装还没做。

  1. 建站发布不是一个完整自动按钮。

还没有一条已锁定路线从“图片 / 链接 / 找客户”一路跑到“发布 + Discord 回写 + SSOT 更新”。

  1. pl:ship-customer 交付写回已补,仍需非 dry-run 验证。

真实发布完成后会写 cf-pages-deploy.jsonentity.deploy。下一步用一个客户跑非 dry-run,确认线上 URL、表单邮件、publish-doctor、Discord profile card 都同步。

下一步

  1. 给 M3 发布补 Hermes 可调用外壳。
  2. 处理 skills:check 漂移和 lead-journey-doctor 旧数据红灯。
  3. 整理图片 / 链接入口到下游的实际接法。