> >
秋招求职作品集 · 招聘 / AI+HR 方向

HireFlow AI

AI 驱动的招聘团队工作系统

从真实 HR 场景出发,完成产品设计、开发、部署与持续迭代。
一个懂招聘业务、又能用 AI 和软件解决真实招聘问题的人。

HR 业务理解产品设计AI 应用全栈开发移动端浏览器插件云端架构自动部署
3个线上站点
4个产品端
335项自动化测试通过
10人团队规模设计
02

我为什么做这个项目

先讲真实招聘场景,再讲技术。

录入低效

候选人信息靠手工录入和 Excel 登记,重复、慢、容易出错。

数据分散

简历存在个人电脑和手机里,成员之间互相看不到,协作靠口头同步。

管理盲区

管理者看不到整体进度、招聘漏斗和风险,决策只能靠逐个问人。

进度易漏

候选人太多时跟进容易遗漏,面试后反馈、Offer 确认等环节缺少提醒。

如果给团队配一套“手机能录、电脑能看、插件能抓、后台能管”的轻量招聘系统,这些问题能否被系统性地解决?——这是这个项目的起点。
03

项目目标

01

让 HR 录入更快

OCR 扫描 + AI 结构化 + 浏览器一键采集,把“打字录入”变成“扫描/点选”。

02

让团队数据统一

本地优先 + 云端同步,APK / 网页 / 插件共享同一份云端数据。

03

让管理者实时掌握

驾驶舱实时统计团队总览、招聘漏斗、成员效率与风险提醒。

04

产品整体方案

四大使用端 + 一个云端数据源,覆盖“采集 → 录入 → 跟进 → 管理”全链路。

Android APKFlutter · 本地优先 + 离线同步
成员网页版手机 / 电脑大屏,浏览器直接用
浏览器采集插件BOSS / 猎聘 / Moka 一键采集
▲ HTTPS · 用户登录 JWT ▼
Supabase 云端PostgreSQL · Auth · RLS 行级安全 · Edge Functions
▲ HTTPS ▼
管理员驾驶舱总览 · 漏斗 · 成员 · 反馈 · 审计
GitHub + Cloudflarepush main 自动构建部署
关键设计:所有数据以云端为唯一事实来源;本地 SQLite 先保存保证离线可用,网络恢复后自动同步。
05

完整招聘工作流

每一个环节,HireFlow 都有对应的介入方式。

招聘平台
BOSS / 猎聘 / Moka
浏览器采集
插件一键识别候选人
候选人入库
APK / 网页立即可见
HR 跟进
待跟进提醒 / 状态更新
面试 / 反馈
状态历史全程留痕
Offer / 入职
驾驶舱漏斗实时统计
HireFlow 的介入点:采集(插件)→ 录入(APK/网页)→ 跟进(提醒+状态)→ 管理(驾驶舱)→ 复盘(漏斗/效率)。
06

浏览器采集插件:把“打字录入”变成“一键采集”

技术含量最高的部分:让插件准确识别“HR 当前想采集的那一位候选人”。

插件一键采集界面(真实截图)
一键采集工作台(真实 UI)
插件冲突确认界面(真实截图)
冲突确认(真实 UI)

为什么容易误识别?

招聘页面同时存在候选人列表、聊天对象、当前登录 HR 的姓名和大量按钮文字。普通的“整页抓文字”会把 HR 自己(如“龙翔翔”)或按钮词当成候选人。

我怎么解决?

  • Resume-First:打开哪份简历就锁定哪份,列表一律降权
  • 实体分类:候选人 / HR / 面试官 / BP 八类实体,只有候选人可入库
  • 多候选人选择器:页面多人时由 HR 点选,评分只排序不替用户决定
  • 区域锁定:选择后锁定容器,MutationObserver / AI 不得覆盖
  • 字段级置信度:电话/邮箱/姓名独立评分,多值可点选,缺失只提示该字段
  • 自动去重:重复候选人不再新建,提示查看/更新

最终效果

自动化测试 335/335 全部通过;支持 BOSS / 猎聘 / Moka 三平台;导入后 APK / 网页 / 后台立即可见。

335自动化测试通过
3平台支持
1次点击一键导入
07

Android APK:HR 的日常工作站

不只展示 UI,解释“为什么这样设计”。

覆盖真实 HR 工作场景

  • 候选人管理 / 快速添加 / 招聘状态 / 跟进提醒
  • OCR 扫描简历 + AI 结构化,拍照即录入
  • 团队驾驶舱 / 今日小结 / Excel 导出 / 数据备份

为什么“本地优先”?

面试现场、地铁里经常没信号。设计为:操作先写入本地 SQLite → 进入同步队列 → 网络恢复自动上传。断网照常工作,数据不丢。

真实测试

  • Android 模拟器 Maestro UI 套件 5/5 通过
  • OCR 端到端:选简历图片 → 识别 → 确认入库 全链路通过
  • 冷启动稳定性 10/10(曾定位并修复 R8 压缩导致的启动崩溃)
5/5Maestro UI 测试
10/10冷启动稳定性
E2EOCR 识别入库链路
APK 首页(真实截图)
APK 首页(真实截图)
APK 扫描中心(真实截图)
扫描中心(真实截图)
APK OCR 识别(真实截图)
OCR 识别结果(真实截图)
08

管理员驾驶舱:管理者为什么需要它

招聘是团队协作,管理者需要“看得见、管得住、能闭环”。

驾驶舱总览(真实截图)
团队驾驶舱总览(真实截图)
候选人管理(真实截图)
候选人管理与状态筛选(真实截图)

驾驶舱解决什么?

  • 团队总览:成员 / 候选人 / 今日新增 / 待跟进 / Offer / 入职实时统计
  • 招聘漏斗:每阶段数量与转化率,一眼看到卡点
  • 风险提醒:超 24 小时未跟进、面试后未反馈、Offer 待确认自动预警
  • 成员效率:个人新增 / 推荐 / 约面 / 面试 / Offer / 入职
  • 反馈 + 审计:问题闭环,操作全程留痕
  • 权限管理:成员状态、PIN 重置、禁用启用
一句话:管理者从“问人要数据”变成“打开页面看数据”。
09

AI 能力:准确区分,不把什么都叫 AI

扫描 → OCR → 结构化 → AI 增强 → 入库,每一层各司其职。

扫描拍照 / 相册选图
OCR本地 Tesseract + ML Kit
结构化规则引擎 + 文本语义
AI 增强Edge Function 调用 DeepSeek
入库去重 + 导入云端

分层设计的原因

OCR 与规则引擎在本地完成:快、免费、不依赖网络。AI 只做“兜底与增强”:字段缺失或冲突时,才把当前区域文本发给 AI 结构化。

密钥怎么保护

DeepSeek API Key 不放进 APK 和插件,通过 Supabase Edge Function 调用,密钥只存在云端 Secrets,前端永远拿不到。

说明:AI 兜底 Edge Function 已完成开发,当前默认关闭(AI_ENABLED=false),部署函数并配置密钥后开启 —— 状态:待部署(待验证)。
10

云端架构与数据安全

一套云端,多端接入;权限在数据库层就拦住。

技术底座

Supabase(PostgreSQL + Auth + RLS + Edge Functions),11 张业务表,3 个 Edge Function(analyze-candidate / reset-pin / setup-admin)。

数据隔离

所有数据绑定 organization_id;普通成员只能访问本团队数据、只能修改自己负责的候选人;管理员可看本团队全部数据。

凭据安全

管理员密码、数据库密码、API Key 不进 APK、不进前端、不进 GitHub;AI Key 只存云端 Secrets。

留痕可审计

候选人状态变化写入 candidate_status_history,操作写入 audit_logs;不记录 PIN / 密码 / API Key。

安全不是“页面隐藏”,而是数据库层的 RLS 强制约束 —— 即使绕过界面,普通用户也读不到别人的数据。
11

工程化与自动部署

push 到 main,剩下交给流水线。

本地代码D:\HireFlow_AI
GitHub代码托管 · 版本管理
GitHub Actions构建 + 测试
Cloudflare Pages自动部署三个站点

测试

插件 335 项自动化测试;APK Maestro UI + OCR 端到端;前端构建检查(CI)。

版本管理

Git 提交历史清晰,版本从 v1.x 迭代到 v3.x,每个版本有变更日志。

文档体系

部署指南 / 管理员指南 / 测试报告 / 全生态报告,文档与代码同仓维护。

12

项目中最难解决的问题

每一个问题都给出:问题 → 原因 → 方案 → 实现 → 结果。

① 如何防止插件把 HR 自己抓成候选人?

问题BOSS 页面显示候选人“江先生”,插件却识别成当前登录用户“龙翔翔”。
原因整页抓文字,导航栏 / 当前用户 / 按钮词都进了姓名候选池。
方案实体分类 + 区域定位 + 多候选人选择器 + 区域锁定。
实现八类实体分类器;动态候选区域评分(身份/联系方式/上下文/可见性/活跃);选择后锁定容器,AI 不得改选。
结果自动化测试 335/335 通过;真实页面准确率待人工回归(待验证)。

② 如何保证 APK 断网还能工作?

问题招聘现场常没信号,纯云端 App 会不可用。
原因数据只存在云端。
方案本地优先:操作先写 SQLite → 加入同步队列 → 网络恢复自动上传。
实现SQLite + 同步引擎 + 同步状态(已同步/同步中/等待网络/失败),失败指数退避重试。
结果断网可添加/修改候选人、OCR、查看本地数据;恢复网络自动同步。

③ 如何保证多端数据一致、不串号?

问题多人同时操作,可能互相覆盖、数据丢失。
原因多端共享同一候选人,缺少冲突处理与留痕。
方案统一云端数据源 + 状态历史 + 更新时间/更新人留痕。
实现每次状态变更写入 candidate_status_history;记录 updated_at / updated_by;默认最后有效修改覆盖,历史全保留。
结果状态可追溯(谁在什么时间把候选人从 A 改成 B),多端看到同一份数据。

④ 如何保护 AI API Key?

问题AI 需要调 DeepSeek,但 Key 不能进 APK / 插件 / 前端。
原因客户端代码会被反编译 / 直接可见。
方案Supabase Edge Function 做中间层,Key 只放 Secrets。
实现analyze-candidate 函数校验调用者 JWT,只接收用户已选择区域的文本,返回结构化 JSON。
结果前端零密钥;函数已开发,待部署启用(待验证)。

⑤ 如何控制 10 人团队的数据权限?

问题10 人共用一套系统,不能互相看到对方的越权数据。
原因单机版没有组织与权限概念。
方案organization_id 绑定 + Supabase RLS 行级安全。
实现所有表绑定组织;RLS 策略:普通成员读本组织、写自己负责的候选人;管理员读写本组织全部。
结果越权在数据库层被拦截;10 名成员预置在云端(真实存在)。
13

项目成果(全部可验证)

只列真实、可验证的数据,不夸大。

3个线上站点在线(后台 / 成员手机 / 成员电脑)
4个产品端(APK / 手机网页 / 电脑网页 / 插件)
335插件自动化测试全部通过
10人团队在云端预置
17条真实候选人测试数据在云端(均为测试数据)
11张数据库表 + 3 个 Edge Function
5/5APK Maestro UI 测试通过
E2EOCR 识别入库链路真实跑通
GitHub 自动部署到 Cloudflare Pages
说明:以上数据均可通过线上地址、GitHub 仓库、云端数据库核验;标注“待验证”的内容为尚未完成真实验证的环节。
14

我的个人贡献

项目由 AI 辅助搭建,以下每一项我都全程参与并负责。

产品规划从 HR 场景出发定义四大产品端与核心链路
业务分析把招聘流程拆成状态机 / 漏斗 / 风险规则
交互设计APK / 网页 / 插件三端界面与流程
前端开发React + Vite + Tailwind,三个线上站点
移动端开发Flutter:候选人管理 / OCR / 同步 / 小组件
浏览器插件识别引擎 / 实体分类 / 选择器 / 去重
云端与权限Supabase 数据库 / RLS / Edge Functions
AI 接入OCR + 结构化 + DeepSeek 兜底设计
测试与工程335 项自动化 + Maestro + OCR E2E + CI
部署运维GitHub Actions + Cloudflare Pages 自动发布
文档体系部署 / 管理 / 测试 / 全生态报告
持续迭代从 v1.x 到 v3.x,基于真实使用反馈修复问题
15

项目复盘

解决了什么

把“录入慢、数据散、看不到”变成“一键采集、多端同步、驾驶舱可视”的完整闭环。

哪里做得好

本地优先设计让真实场景可用;RLS 从数据库层守住权限;文档与测试跟随每个版本。

还存在什么问题

  • 插件真实页面识别率待人工回归(待验证)
  • AI 兜底函数未部署启用(待验证)
  • 各端版本号口径不统一
  • 凭据管理方式待优化(Git 远程含令牌)

下一步升级方向

  • 完成真实页面回归并回填准确率数据
  • 部署 AI 兜底并上线插件采集统计
  • 统一版本治理,建立发布流程
  • 补充更多招聘平台适配器
16

作品展示与入口

扫码或点击链接,直接体验真实产品。

管理后台二维码

管理员驾驶舱

hireflow-admin.pages.dev

打开 →
成员手机网页二维码

成员网页版 · 手机

hireflow-app-21z.pages.dev

打开 →
成员电脑网页二维码

成员网页版 · 电脑

hireflow-member-desktop.pages.dev

打开 →
GitHub 二维码

代码仓库

github.com/792abc/HireFlow-AI

打开 →
Android APK可安装体验:候选人管理 / OCR / 离线同步(交付时提供安装包)
浏览器插件BOSS / 猎聘 / Moka 一键采集(交付时提供 zip)
谢谢观看 · 期待与您交流招聘与 AI