一、产品介绍
1.1 一句话定位
HYB(Hatch Your Beta)是一款 local-first(本地优先)、多项目的产品发布与增长分发控制台,
面向独立开发者(indie hackers)与 SaaS 创始人,用来管理发布物料、追踪 500+ 获客渠道、记录冷启动与外链分发进度——
所有数据只保存在浏览器 localStorage,不上传服务器。
1.2 它解决什么问题
产品冷启动阶段最耗神的不是写代码,而是“发到哪里、发到什么程度、下次从哪继续”。HYB 把这件事拆成三个可量化的对象:
| 对象 | 代码中的实体 | 说明 |
|---|---|---|
| 渠道(Platform) | platforms[] | 每个渠道含 name / url / category / free / dr / custom 六个字段 |
| 项目(Project) | projects[] | 每个项目含 name / url / tagline / desc / collapsed,即一套可复制的发布物料 |
| 进度(Progress) | progress[projectId][platformId] | 每个“项目 × 渠道”组合独立记录 status / followUp / notes / links[] |
三者交叉形成“渠道 × 项目”的矩阵,这是 HYB 的核心数据模型。概览区统计的“已操作”“已收录”都是按这个矩阵计数,而不是按渠道计数。
1.3 目标用户
- 准备在 Product Hunt / Hacker News / Reddit / AI 工具目录做冷启动的独立开发者。
- 需要同时推进多个产品线、每个产品都要走一遍发布流程的小团队。
- 出海 SaaS 团队,需要中英双语界面与 Google / Bing / 百度 / Naver 等多搜索引擎提交记录。
- 重视数据隐私、不愿把发布计划放进第三方 SaaS 的用户。
二、核心功能(逐项对应代码)
① 多项目物料库
- 每个项目独立维护 4 个字段:产品名称、官网链接、一句话介绍(tagline)、详细描述(desc)。
- 支持“复制全部”:按
【产品名称】/【官网链接】/【一句话介绍】/【详细描述】四段格式一次性复制到剪贴板。 - 单字段也可单独复制(每个字段旁有 copy 按钮)。
- 项目卡片可折叠/展开,折叠状态写入
collapsed字段并持久化。
② 500+ 增长渠道库
- 内置
REAL_PLATFORMS数组,覆盖 9 大分类:AI 工具目录、SaaS 软件评测、产品发布创业、开发者技术、社交内容平台、社区推广、商业企业 PR、搜索引擎、其他渠道。 - 包含 Reddit 的 17 个细分版块(r/SideProject、r/indiehackers、r/SaaS、r/startups 等)、7 个搜索引擎站长平台(Google Search Console、Bing Webmaster Tools、Yandex Webmaster、百度搜索资源平台、Naver Search Advisor、Seznam、IndexNow)。
- 支持“添加渠道”:填写名称(必填)、网址、分类、费用(Free/Paid/待确认)、DR(0–100 选填)。
- 添加时做去重检测:同名或同域名会弹窗确认。
③ DR(Domain Rating)体系
- 内置
PRELOADED_DR字典,为数百个域名预置 DR 值(如 producthunt.com 91、github.com 97、linkedin.com 99)。 - DR 不参与筛选,只参与排序:可按正序(低→高)或倒序(高→低),
null值始终排在最后。 - 表格中点击 DR 值可行内编辑,回车保存、Esc 取消,保存后弹 toast 提示。
④ 分发进度跟踪(项目 × 渠道)
- 状态四档:
pending(待发布)、submitted(已发布)、approved(已收录)、rejected(被拒绝)。 - 跟进日期(followUp):若未完成且日期早于今天,该行左侧显示逾期标记。
- 备注(notes):行内直接输入,失焦自动保存。
- 外链记录(links):每个“项目 × 渠道”可记录多条上线地址,每条含
url / title / date;展开面板可增删改,日期用于目标统计。
⑤ OKR / 目标系统
- 按项目独立设置目标,周期可选:本周 / 本月 / 本季度 / 本年。
- 目标单位是“个分发点”,统计口径为当前周期内、该项目所有渠道 links 中 date 落在周期区间内的条数。
- 切换周期自动填入默认目标:week=20、month=100、quarter=300、year=1000。
- 进度条 + 百分比 + “剩余 N 天”。
- 教练提示(coach)按条件给出不同文案:目标为 0、达成 100%、剩余 ≤2 天且 <80%、时间进度 > 完成进度 +20%、完成进度领先等。
⑥ 筛选与搜索
- 搜索框:匹配渠道名称、网址、分类标签(大小写不敏感,140ms 防抖)。
- 项目筛选:全部 / 具体项目。选具体项目时只显示该项目行。
- 分类筛选、状态筛选、费用筛选(Free/Paid/待确认)。
- 状态筛选作用于项目行,某渠道所有项目行被筛掉时整条渠道隐藏。
- “重置筛选”一键恢复。
⑦ 数据导入 / 导出 / 重置
- 导出:JSON 文件,含
app / version / exportedAt / lang / platforms / projects / progress / okr完整快照,文件名hyb-console-backup-YYYY-MM-DD.json。 - 导入:支持本工具导出的完整格式,也兼容旧版扁平数组格式(legacy);导入前弹确认框,明确提示“将覆盖当前全部数据”。
- 重置:恢复默认渠道库 + 默认项目(ffee.me 示例项目)+ 默认 OKR(month / 100)。
⑧ 中英双语
- 完整 i18n 字典(
I18N.zh/I18N.en),切换语言会重渲染页面文案、筛选下拉、表格、概览,并持久化到hyb_v12_lang。 - 分类标签也有双语映射(如“AI工具目录” ↔ “AI Directories”)。
⑨ Local-first 与隐私
- 所有持久化走
localStorage,key 前缀hyb_v12_。 - 无登录、无后端、无账号体系;页脚明确写“无需登录 · 不上传服务器”。
- 页面唯一的外部请求是 Microsoft Clarity 分析脚本(
clarity.ms)和 logo 图片;业务数据本身不外发。 - 存储写入失败(如空间不足)会捕获异常并提示“本地存储空间不足,保存失败”。
三、与常见替代方案的区别
| 维度 | HYB | 表格软件(Excel / Notion) | 发布平台自带后台 |
|---|---|---|---|
| 渠道库 | ✅ 内置 500+ 预置渠道 + DR | ❌ 需自己建 | ❌ 仅自家渠道 |
| 多项目 | ✅ 原生支持,项目×渠道矩阵 | ⚠️ 需手工设计 | ❌ 通常单产品 |
| 物料复制 | ✅ 四段式一键复制 | ❌ 手工拼 | ❌ 无 |
| 目标统计 | ✅ 按周期自动统计外链日期 | ⚠️ 手工公式 | ❌ 无 |
| 数据位置 | ✅ 浏览器本地 | ❌ 云端 | ❌ 平台云端 |
| 登录 | ✅ 不需要 | ❌ 需要 | ❌ 需要 |
四、FAQ(常见问题)
以下答案中的数字与行为均可在源码中核对。
Q1:HYB 需要注册账号吗?数据存在哪里?
不需要注册,也没有账号体系。所有数据(渠道、项目物料、进度、备注、外链、OKR)都保存在浏览器的 localStorage,key 前缀为 hyb_v12_。换浏览器、换设备、清空浏览器数据都会导致数据不跟随,请用“导出”做备份。
Q2:渠道库里到底有多少个渠道?
内置 REAL_PLATFORMS 数组,按 9 个分类组织,包含 Product Hunt、Hacker News、GitHub、G2、Capterra、AlternativeTo、Indie Hackers、BetaList、AppSumo、Chrome Web Store、Google Search Console、Bing Webmaster Tools、百度搜索资源平台、Naver Search Advisor、Reddit 的 17 个细分版块等。代码里还有 mergeCatalog 逻辑,当检测到本地渠道数 ≥300 且目录版本低于 CATALOG_VERSION(当前为 3)时,会把新增渠道合并进来——这是升级时补渠道的机制。
Q3:DR 是什么?数据准确吗?会更新吗?
DR 指 Domain Rating(域名评级,0–100)。HYB 在 PRELOADED_DR 里为数百个域名预置了数值,属于静态预置值,不会自动联网更新。DR 不参与筛选,只参与排序(正序/倒序,null 排最后)。你可以点击表格里的 DR 值手动改成你信任的数值,改完会持久化。
Q4:为什么我选了“已收录”状态,渠道就消失了?
因为状态筛选作用于项目行:一个渠道下所有项目行都被筛掉时,整条渠道会隐藏。如果你只想看某个项目的已收录情况,先把“项目”筛选设为具体项目,再选状态。
Q5:OKR 的“分发点”怎么算的?
统计口径是:当前项目、当前周期内,所有渠道 links 数组中 date 落在周期起止日期之间的记录条数。也就是说,只有填了日期的外链才计入目标。新增外链时默认日期是今天。切换周期(周/月/季/年)会自动填入默认目标 20/100/300/1000,你可以手动改。
Q6:跟进日期变红/出现左侧竖线是什么意思?
当某条“项目 × 渠道”的跟进日期早于今天,且状态不是“已收录”或“被拒绝”时,该行会被标记为逾期(row-overdue),左侧显示 2px 黑色内阴影。这是提醒你该跟进但还没闭环。
Q7:可以同时管理多个产品吗?
可以。每个项目有独立的四段物料、独立的进度矩阵、独立的 OKR。概览区的“项目分行小计”会分别列出每个项目的外链数、已发布数、已收录数。删除项目会连带删除它的进度、备注、外链和 OKR(会二次确认)。
Q8:导入会覆盖现有数据吗?
会。导入前会弹确认框,文案明确写“导入将覆盖当前全部渠道、项目物料、分发进度和目标设置”。导入兼容两种格式:HYB 自己导出的完整 JSON(含 platforms/projects/progress/okr),以及旧版扁平数组(会被当作 legacy 迁移到第一个项目下)。
Q9:添加渠道时提示“已存在同名或同域名渠道”怎么办?
这是去重保护。判断依据是 platformUrlKey(域名,部分 host 保留 path)和 platformNameKey(名称规范化后比较,含别名映射如 twitter→x、blogspotcom→bloggercom)。如果确实要加,在确认框点“确定”即可继续添加,它会作为自定义渠道(custom: true)存在。
Q10:数据会不会上传到服务器?
业务数据不会。页面唯一的外部脚本是 Microsoft Clarity(clarity.ms)用于访问分析,以及 hyb.vip/logo.svg 图片。你的渠道、项目、进度、备注、外链都只写进 localStorage。如果存储写入失败(比如隐私模式或空间满),会提示“本地存储空间不足,保存失败”。
Q11:支持哪些浏览器?
代码使用了 localStorage、navigator.clipboard(非安全上下文会降级到 execCommand('copy'))、Intl.DateTimeFormat、URL、Array.from(...normalize('NFKC')) 等现代 API。结构化数据里写的是 browserRequirements: 需启用 JavaScript。数据存于 localStorage。,operatingSystem: Any。建议使用近两年的 Chrome / Edge / Firefox / Safari。
Q12:界面语言能切换吗?会影响数据吗?
能,右上角语言切换支持简体中文和 English。切换只改 UI 文案(含分类标签双语映射),不改数据。语言选择持久化在 hyb_v12_lang。默认语言是英文(代码里 lang = storedLang === 'zh' ? 'zh' : 'en')。
Q13:怎么备份?多久备一次?
点右上角“导出”,会下载 hyb-console-backup-YYYY-MM-DD.json,包含 platforms、projects、progress、okr 全量快照。建议每次大改(批量加渠道、批量改状态)后导出一次,并保留多个日期版本。导入时用同一个文件即可恢复。
Q14:为什么我清空浏览器缓存后数据没了?
因为数据在 localStorage,清缓存/清站点数据会一并清除。这是 local-first 的代价,也是隐私的代价。请养成导出备份的习惯。
Q15:HYB 收费吗?
结构化数据里声明 isAccessibleForFree: true,offers 为 price: 0, priceCurrency: USD。当前版本(v12.0)免费使用,无登录、无付费墙。
五、工作原理(How It Works)
按数据流顺序说明,所有函数名与 key 名均来自源码。
5.1 数据模型(三层结构)
projects[] 每个项目:id, name, url, tagline, desc, collapsed
platforms[] 每个渠道:id, name, url, category, free, dr, custom
progress[projectId][platId] 每个组合:status, followUp, notes, links[{url,title,date}]
okrMap[projectId] 每个项目:cycle(week|month|quarter|year), target
三者关系:progress 是 projects × platforms 的稀疏矩阵,只有被操作过的组合才有记录;
读取时 getProgress(pid, platId) 会在缺失时自动创建空记录(emptyProgress() 返回 status: 'pending')。
5.2 启动流程(init())
loadState():按版本号决定走迁移还是直接读。- 若
hyb_v12_version< 12 或没有 v12 platforms,先尝试migrateFromV10()(从ffee_console_v10_*迁移)。 - 读
hyb_v12_platforms;没有则读旧版ffee_promo_data_final_v2;再没有则用defaultPlatforms()(即REAL_PLATFORMS+PRELOADED_DR)。 - 目录版本低于
CATALOG_VERSION(3) 且渠道数 ≥300 时,mergeCatalog()合并新增渠道,记录catalogAdded。 - 读 projects / progress / okr / lang / ui / savedAt,逐项
normalize*清洗,dedupeIds保证 id 唯一。
- 若
bindEvents():绑定所有按钮、筛选、表格事件委托、键盘 Esc、页面可见性、pagehide/beforeunload保存。applyI18n()+startClock()(每秒刷新顶部日期时间)。buildFilterOptions()→renderProjects()→updateMaterialsUi()→renderTable()→renderOverview()。- 若
needsCatalogPersist或needsCopyRefresh,补一次持久化。
5.3 渲染流程
- 概览:
renderStats()遍历platforms × projects累加 links 数、已操作数、已收录数,并生成按项目小计;renderGoal()按当前项目 OKR 计算周期区间内 links 条数、百分比、剩余天数、教练文案。 - 物料库:
renderProjects()用模板字符串生成项目卡片,autoGrowAllTextareas()让 textarea 自适应高度。 - 渠道表:
filteredPlatforms()先按搜索/分类/费用过滤渠道,再按rowsFor(p)判断该渠道在当前项目/状态下是否有可见行;排序只处理 DR(null 恒最后)。renderTable()输出主行 + 子行(多项目时)+ 展开的外链面板。
5.4 交互与保存
- 物料字段输入:
input事件更新内存对象,queueProjectSave()做 260ms 防抖后写 localStorage;flushProjectSave()在导出、切语言、页面隐藏/卸载时强制落盘。 - 表格状态/日期/备注:
change事件立即persistProgress();状态和日期变化会重渲染表格与概览。 - 外链增删改:改
links[index][field]后立即持久化;日期变化会renderGoal()重算目标。 - DR 行内编辑:把按钮替换成
input.dr-input,回车/blur 保存,Esc 取消;normDr()会校验 0–100 并四舍五入,非法值视为 null。 - 所有写操作走
writeJSON(),捕获QuotaExceededError等异常并 toast 提示。
5.5 导入 / 导出 / 重置
- 导出:
exportData()组装{app, version, exportedAt, lang, platforms, projects, progress, okr},Blob 下载。 - 导入:
importFile()解析 JSON,判断是扁平数组(legacy)还是完整对象;完整对象读 platforms/projects/progress/okr,legacy 把旧字段迁移到第一个项目;确认后整体替换内存状态并逐项持久化,最后重渲染。 - 重置:
resetAllData()恢复defaultPlatforms()+ 默认项目 + 默认 OKR,清空筛选与展开状态,逐项持久化。
5.6 迁移与兼容
- v10 → v12:读
ffee_console_v10_*,把旧平台上的 status/followUp/notes/links 迁到“目标项目”(优先当前项目,其次名为 ffee.me 的项目,其次proj_ffee,其次第一个项目)。 - 旧版物料:
migrateLegacyProjects()读ffee_mats,把 zhName/zhUrl/zhTagline/zhDesc 转成一个项目。 - 渠道去重:
dedupePlatforms()按platformUrlKey与platformNameKey合并,保留非空 DR/free,custom取并集。
5.7 隐私与边界
- 持久化层只有
localStorage;无 fetch/XHR 上传业务数据。 - 剪贴板优先
navigator.clipboard(需安全上下文),否则降级execCommand('copy'),再失败则提示手动复制。 - 外部依赖仅 Clarity 脚本与 logo 图;
noscript明确提示需启用 JavaScript。
六、使用教程(Step-by-Step)
6.1 第一次打开
- 浏览器打开 HYB 控制台。顶部会显示当前日期、星期、时间(每秒刷新)。
- 右上角可切换 简体中文 / English。切换只改界面文案,不改数据。
- 页面分四块:数据概览(统计 + 目标)、项目物料库、增长渠道表、页脚(重置数据入口)。
6.2 建立你的第一个项目
- 在“项目物料库”点 添加项目。会自动生成一张空卡片并滚动到可见位置,光标落在“产品名称”。
- 依次填写四个字段:
- 产品名称:如
ffee.me - 官网链接:如
https://ffee.me/(卡片副标题会实时显示域名) - 一句话介绍:一句话说清是什么
- 详细描述:卖点、目标用户、差异点
- 产品名称:如
- 每个字段右侧有 复制 按钮,可单独复制该字段。
- 卡片右上角 复制全部 会按四段格式一次性复制:
【产品名称】… 【官网链接】… 【一句话介绍】… 【详细描述】…
- 点卡片右侧的 箭头 可折叠/展开;折叠状态会保存。
- 需要多个产品时重复“添加项目”。每个项目独立物料、独立进度、独立 OKR。
- 删除项目:点卡片右侧 垃圾桶,确认框会提示“物料、进度、备注、外链、目标都将移除”。
6.3 挑选渠道并记录进度
- 滚到“增长渠道 (Growth Channels)”。表格列:分类 / 渠道 / DR / 项目 / 状态 / 跟进日期 / 上线地址 / 备注。
- 筛选(表头上方一行):
- 搜索框:输入渠道名、网址或分类关键词(140ms 防抖)。
- 项目:全部项目 / 具体项目。选具体项目时只显示该项目行。
- 分类、状态、费用:按需组合。
- DR 排序:默认 / 正序 / 倒序(null 恒最后)。
- 重置筛选:一键清空所有条件。
- 改状态:行内下拉选 待发布 / 已发布 / 已收录 / 被拒绝。改完立即保存。
- 填跟进日期:行内日期框。若日期早于今天且状态不是已收录/被拒绝,该行左侧出现黑色竖线标记逾期。
- 写备注:行内备注框,失焦自动保存,占位符是“点击输入…”。
- 记外链:
- 点“上线地址”列的按钮展开面板,按钮上的数字是当前外链条数。
- 点 记录新上线,新增一行:URL、标题/备注、日期(默认今天)。
- 日期很重要——OKR 按外链日期统计。
- 每条右侧垃圾桶可删除。
- 多项目同渠道:当一个渠道下挂了多个项目,表格会显示主行 + 子行,每行独立状态/日期/备注/外链。
6.4 设置目标并看进度
- 概览区“目标”一行:
- 选周期:本周 / 本月 / 本季度 / 本年(切换会自动填默认目标 20/100/300/1000)。
- 填“达成 __ 个分发点”。
- 右侧显示百分比、进度条、“已完成 X / Y”、“剩余 N 天”。
- 统计口径:只算当前项目、当前周期内、所有渠道 links 中 date 落在区间内的条数。没填日期的外链不计入。
- 教练提示会根据情况变化:
- 目标为 0 → 提示先设目标
- 达成 100% → 祝贺
- 剩余 ≤2 天且 <80% → 警告冲刺
- 时间进度 > 完成进度 +20% → 提示落后
- 完成进度 > 时间进度 → 提示领先
- 其余 → 稳住节奏
6.5 添加自定义渠道
- 渠道表右上角点 添加渠道。
- 填写:渠道名称(必填)、网址、分类、费用(Free/Paid/待确认)、DR(0–100 选填)。
- 提交时若同名或同域名已存在,会弹确认框;确认后作为自定义渠道加入(表格里带“自定义”小标签)。
- 自定义渠道和预置渠道一样参与筛选、排序、进度记录。
6.6 修改 DR
- 表格 DR 列,点任意 DR 值(显示
DR —表示空)。 - 变成输入框,填 0–100,回车保存、Esc 取消。
- 非法值(非数字、超范围)会被清空为 null。
- 保存后 toast 提示“已保存 DR:xx”或“已清空 DR”。
6.7 导出备份与导入恢复
导出
- 右上角点 导出。
- 下载
hyb-console-backup-YYYY-MM-DD.json,含 platforms/projects/progress/okr 全量。 - 建议每次批量改动后导出一次,保留多份。
导入
- 右上角点 导入,选 JSON 文件。
- 弹确认框:“导入将覆盖当前全部渠道、项目物料、分发进度和目标设置”。
- 确认后整体替换并重渲染,toast 显示“导入成功:X 个渠道 · Y 个项目”。
- 兼容旧版扁平数组格式(会迁移到第一个项目下)。
6.8 重置数据
- 页脚点 重置数据。
- 确认框提示“所有渠道的分发进度、备注、上线记录、项目物料和目标都会恢复初始状态”。
- 确认后恢复默认渠道库 + 默认项目 + 默认 OKR(month/100)。
6.9 日常使用建议节奏
- 发布前:补齐项目四段物料 → 导出一次备份 → 按分类筛出目标渠道,状态设为“待发布”。
- 发布中:每发一个站,改状态为“已发布”、填跟进日期、记外链(带日期)。
- 发布后:每天看一次逾期行(左侧竖线);每周看 OKR 进度与教练提示;有收录结果就改“已收录”。
- 每周:导出一次 JSON,文件名带日期归档。
七、故障排查
| 现象 | 原因 | 处理 |
|---|---|---|
| 刷新后数据没了 | 清了浏览器站点数据 / 换设备 | 用导出的 JSON 导入 |
| 提示“本地存储空间不足” | localStorage 满或隐私模式 | 导出备份、清理站点数据、换普通窗口 |
| 复制没反应 | 非安全上下文且 execCommand 失败 | 手动选中复制,或改用 https 访问 |
| 选了状态渠道消失 | 状态筛选作用于项目行 | 先选具体项目再看状态 |
| OKR 不涨 | 外链没填日期或日期不在周期内 | 给外链补日期 |
| DR 排序没变 | DR 为 null 恒排最后 | 点 DR 值手动填写 |