Skip to content

megg-ops/Ready2Apply

Repository files navigation

投得过 · Ready2Apply

市场真实需求你的真实项目技术栈做匹配,先看清还差什么,再陪你一步步补到「可以投了」。

status tests coverage python license

准备度仪表盘


为什么做这个

求职准备阶段,有两个反复出现的痛点:

  1. 不知道该补哪些技术栈。 岗位 JD 一堆要求,到底哪些是硬门槛、哪些自己已经能证明、哪些是真缺口?靠感觉判断很容易补错方向。
  2. 拖延,总觉得"还没准备好"。 准备是个无底洞,越准备越焦虑,迟迟不敢投——而最佳投递窗口就这么错过了。

投得过把这两件事接成一条闭环:先用真实岗位需求反推你该补什么,把判断过程沉淀成可追溯的能力缺口报告;再用准备度评分、每日计划和「可以投了」信号陪你补到能投,专治"总觉得还没准备好"的拖延。

面向谁

有真实项目经历的求职人员(实习 / 校招场景)。 工具的核心是拿你真实写过的项目去对齐市场真实在招的岗位,所以它最适合手里有项目(无论是本地仓库还是 GitHub 上的)、想知道自己离目标岗位还差多远、并希望被陪着补到能投的人。

求职范围聚焦日常实习 + 春招/秋招校招(无工作年限要求的场景),任何"3 年经验"类要求会被识别为「与你无关」,不拉低你的准备度。

核心原理

        市场需要什么                 你能提供什么
         (真实岗位 JD)         ×      (扫描真实项目代码库提取的技术栈)
              │                              │
              └──────────── 匹配 ───────────┘
                            │
                      能力缺口诊断
                            │
        准备度评分 ──→ 每日计划 ──→ 简历 / 面试陪跑 ──→ 「可以投了」
  • 需求侧:录入目标岗位 JD(支持手动粘贴、Excel / CSV 批量导入),大模型按归类聚合、结构化为 P0–P3 分级能力要求。
  • 供给侧:添加项目(支持本地路径或 GitHub 链接),系统扫描代码库、提取真实技术栈作为能力证据。
  • 匹配:两侧逐条比对,输出可追溯的缺口报告。
  • 陪跑:基于缺口给出准备度评分、每日计划、简历要点与模拟面试,并在三项准备就绪时发出「可以投了」信号。

功能

投得过分为两个部分,目前两部分均已闭环可用。

第一部分 · 供需匹配 ✅

市场需要什么,你能提供什么。

  • 岗位库:录入目标岗位 JD,按归类聚合后一次结构化为分级能力要求;支持 Excel / CSV 批量导入、按城市 / 公司筛选、行内删除与清空归类。
  • 个人资料:维护目标岗位方向、目标城市、可投入时间、学历阶段、院校层次、专业、预计毕业时间与每周可实习天数,作为 JD 解析与学历 / 出勤匹配的上下文。
  • 项目管理:添加项目(本地路径 / GitHub 链接),扫描代码库提取真实技术栈与可展示亮点。
  • 能力缺口诊断:需求 × 供给逐条匹配,输出 P0–P3 分级缺口报告;每条附证据强度(强 / 弱 / 可挖掘 / 缺失)与判断理由,学历 / 出勤类要求按个人资料匹配,并可纳入简历自述作为补充证据。

第二部分 · 项目陪跑 ✅

知道 gap 之后,陪你一步步补到能投。

  • 准备度仪表盘:按归类量化你对目标岗位的准备程度(P0–P3 加权评分),可展开「评分依据」看每档要求的覆盖构成与投递阈值阶梯;每个归类还有独立的「简历就绪度」指标。
  • 每日计划:选定首次投递日后,系统把未覆盖的项目类缺口拆解成每日任务、按可投入时长排进 timeline,给出进度环、预计完成日与「赶不赶得上」提示;任务完成需提交「做了什么 / 怎么做」,由大模型对照验收标准核验通过才算完成。
  • 简历要点:从你项目的真实证据改写成简历 bullet(不虚构,弱证据诚实标注为风险提示),按风险分层展示、可直接复制。
  • 简历上传打分:上传简历(PDF / LaTeX),对照目标归类的 P0–P3 要求评「简历就绪度」,逐条标注已覆盖 / 偏弱 / 缺失。
  • 模拟面试:基于你的真实项目证据出题(技术题严格锚定项目,不会拿学历 / 出勤当技术题考),答题后给五维评分(结构 / 深度 / 真实性 / 业务 / 风控)与改写建议,并附「反问面试官」清单。
  • 「可以投了」信号:当能力准备度、简历就绪度、模拟面试三项均达标时,发出停止准备、开始投递的收口提示。

全流程的大模型判断都携带 reasoning 并在前端可展开查看,结果可解释而非黑盒打分;每个 LLM 环节都内置确定性 fallback,无 API Key 也能降级运行。

快速开始

前置要求

  • Python 3.12+
  • uv(推荐的 Python 依赖与运行工具;下方命令按 uv 编写)
  • Node.js 18+ 与 npm
  • 一个 OpenAI 兼容的大模型 API Key。默认配置使用 DeepSeek;如果使用其他兼容服务,需要同时修改 .env 里的 DEEPSEEK_BASE_URLDEEPSEEK_MODEL

0. 拉取代码

git clone https://github.com/megg-ops/Ready2Apply.git
cd Ready2Apply

仓库不会提交 .env、本地 SQLite 数据库、Python 虚拟环境或 node_modules。首次拉取后需要按下面步骤安装后端和前端依赖。

如果你使用 AI coding agent,也可以把仓库交给 agent 处理:例如 Claude Code、Codex、OpenCode、OpenClaw、Hermes 等,让它根据本机环境自动安装依赖、配置 .env 并启动项目;下方命令主要作为手动运行参考。

1. 配置环境变量

cp .env.example .env
# 默认使用 DeepSeek,至少填入:
# DEEPSEEK_API_KEY=your_key_here
# 如需替换为其他 OpenAI 兼容服务,同时修改:
# DEEPSEEK_BASE_URL=...
# DEEPSEEK_MODEL=...

数据库为本地 SQLite,首次启动自动创建(默认 ~/.ready2apply/ready2apply.db),无需手动迁移。

2. 安装依赖并启动后端

cd backend
uv sync
uv run uvicorn app.main:app --reload --host 127.0.0.1 --port 8710

后端默认只监听本机 127.0.0.1:8710。启动后,在运行后端的这台机器上访问 API 文档:http://127.0.0.1:8710/docs

3. 安装依赖并启动前端

cd frontend
npm install
npm run dev

前端默认启动在 http://127.0.0.1:3000,开发配置会把 /api 代理到 http://127.0.0.1:8710

一键启动(前后端一起拉起)

bash backend/run_dev.sh

使用流程

第一步:设置个人资料 —— 在「个人资料」填写目标岗位方向、目标城市、每日可投入时间、学历阶段、院校层次、专业、预计毕业时间和每周可实习天数。这些信息会作为 JD 解析与学历 / 出勤匹配的上下文。

个人资料

第二步:添加目标岗位 —— 在「岗位库」粘贴 JD 或批量导入 Excel / CSV,系统按归类聚合并结构化为分级能力要求。

岗位库

第三步:添加项目 —— 在「项目管理」填入本地路径或 GitHub 链接,系统扫描代码库、提取真实技术栈作为你的能力证据。

项目管理

第四步:生成缺口报告 —— 一键比对,得到分级诊断:哪些已达标、哪些证据不足、哪些是硬缺口,以及每条结论的理由。

能力缺口

第五步:陪跑到能投 —— 在「仪表盘」看准备度评分与评分依据;在「每日计划」选定投递日、按 timeline 逐日补齐缺口;在「简历诊断」从真实项目证据改写要点、上传简历查就绪度;在「模拟面试」按真实项目出题作答、拿五维评分。当能力、简历、面试三项就绪,系统提示「可以投了」。

每日计划 简历诊断 模拟面试

技术架构

技术栈

技术
后端 Python 3.12 · FastAPI · SQLAlchemy · SQLite · Pydantic v2 · Alembic 迁移
大模型 DeepSeek(OpenAI 兼容 SDK)· tenacity 重试 · 文件式 Prompt + SHA256 版本化 · 调用全量落库
代码扫描 GitPython(本地仓库解析 / GitHub 浅克隆)· 系统敏感目录护栏
前端 React · TypeScript · Vite · Ant Design · TanStack Query · Zustand
类型契约 后端 OpenAPI → openapi-typescript 生成前端类型,端到端类型安全

关键设计

  • 真实供需匹配:需求来自真实 JD,供给来自真实代码库扫描,而非自我描述,匹配结果更可信。
  • 结构化缺口模型:要求按 P0–P3 分级、按归类聚合,证据按"强 / 弱 / 可挖掘 / 缺失"分类,区分硬门槛、可证明、加分项,而非朴素关键词加权。
  • LLM + 确定性 fallback 双轨:解析、缺口、简历改写、出题、答案评估、任务核验全部优先走大模型,失败或无 Key 时降级到确定性规则,保证可用性。
  • 可追溯与透明化:每次 LLM 调用全量落库、prompt 以 SHA256 版本化、命中缓存即复现;所有判断携带模型理由,前端可展开,结果可解释而非黑盒打分。

项目结构

.
├── backend/        # 主服务:FastAPI 应用、数据模型、Alembic 迁移
│   └── app/
│       ├── jd/         # JD 归类聚合解析(需求侧)
│       ├── project/    # 代码库扫描与技术栈提取(供给侧)
│       ├── gap/        # 能力缺口诊断 + 学历/出勤匹配
│       ├── readiness/  # 准备度评分 + 「可以投了」信号
│       ├── plan/       # 每日计划 timeline + 任务完成核验
│       ├── resume/     # 简历要点改写 + 简历上传打分
│       ├── interview/  # 模拟面试出题 + 五维答案评估
│       └── prompts/    # 文件式 Prompt 模板(SHA256 版本化)
├── frontend/       # Web 前端:React + TypeScript + Vite
└── docs/           # 截图

开发

# 后端:测试 + 覆盖率门禁(100%)、类型检查、lint
cd backend
uv sync --extra dev
uv run pytest            # 覆盖率门禁 100%
uv run mypy app          # 类型检查
uv run ruff check app    # lint

# 前端:单元测试 / 类型检查 / 构建
cd frontend
npm run test             # vitest
npx tsc -b               # TypeScript project references
npm run build            # 生产构建

提交遵循 Conventional Commits 规范。

路线图

  • 阶段 1 · 供需匹配 岗位归类聚合解析、项目代码扫描、P0–P3 能力缺口报告
  • 阶段 2 · 项目陪跑 准备度评分 · 每日计划 timeline · 简历要点与上传打分 · 模拟面试 · 「可以投了」信号
  • 多主题切换 + 全页面视觉打磨 暖色 / 暗色 / 彩色 / 怀旧 四套主题,逐页信息架构重构与设计抛光
  • 本地岗位爬取入口 按合规约束重新接入,降低手动录入成本

合规与免责声明

  • 当前版本不内置任何岗位爬取功能,岗位信息由用户手动录入或离线导入。
  • 代码扫描在本地路径或 GitHub 浅克隆的临时目录中进行;为生成项目分析,系统会将经过截断的项目上下文发送给配置的大模型服务(默认 DeepSeek),包括目录结构、依赖文件片段、README 摘要,以及最多 10 个关键源文件的前 150 行。请不要扫描包含敏感源码、密钥或私有数据的仓库。
  • 简历上传打分会将简历文本发送给配置的大模型服务用于对照评分;请自行评估其中个人信息的敏感度。
  • 本工具不进行自动投递。岗位、项目、分析结果以及 LLM 调用记录默认存储在本地 SQLite;其中 llm_calls 会记录发送给大模型的输入和模型输出,便于缓存、复现和排查。
  • 大模型输出仅供参考,不构成任何录用或求职结果的保证。

License

MIT © 2026 Freya

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages