job-application-tracker
Skill1 starsChanged 36 days agoMITView on GitHub
Track campus-recruiting job applications in a single-file HTML ledger — status model, 100% clickable company links with three visual tiers, visited receipts, and safe incremental merging of user-exported backups without creating duplicate companies. Use when the user maintains or extends a job application tracking table.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- wendysun718/my-codex-skillstheir own version, first seen Oct 20, 2026
- daliaabbruciati/job-application-tracker-SKILLtheir own version, first seen Aug 20, 2026
- daliaabbruciati/awesome-claude-skills-by-daliatheir own version, first seen Aug 20, 2026
- ShuchangZhang/job-application-trackertheir own version, first seen Aug 3, 2026
- Faizee-Asad/job-seeker-claude-skillstheir own version, first seen Apr 27, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- wendysun718/my-codex-skills★ 26same name
- daliaabbruciati/awesome-claude-skills-by-dalia★ 4same name
- daliaabbruciati/job-application-tracker-SKILL★ 4same name
- ShuchangZhang/job-application-tracker★ 3same name
- Faizee-Asad/job-seeker-claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository30 other files it gives its agents.
- anna-app-publishSkill
- campus-jobs-radarSkill
- career-pivot-researchSkill
- cf-pages-deploySkill
- company-risk-checkSkill
- github-repo-launch-polishSkill
- github-repo-repair-auditSkill
- headless-webapp-screenshotsSkill
- historical-remotion-filmSkill
- interview-debriefSkill
- job-application-screenerSkill
- llm-output-eval-gateSkill
- memory-sync-abcSkill
- offer-decision-frameworkSkill
- online-assessment-solverSkill
- personal-secretary-memorySkill
- personal-tone-writingSkill
- portfolio-github-workflowSkill
- recruiting-source-huntingSkill
- remotion-delivery-qaSkill
- resume-jd-matcherSkill
- resume-jd-tailorSkill
- resume-polish-craftSkill
- session-checkpointSkill
- session-log-archaeologySkill
- single-file-html-toolSkill
- static-site-deploy-verifySkill
- vibecoding-resume-storySkill
- video-portfolio-performanceSkill
- workflow-distillerSkill
The file
Files
Job Application Tracker
Track what you already applied to. This is downstream of job-application-screener
(which decides whether to apply). Don't merge them.
Data model
One record per company:
| 字段 | 含义 |
n | 公司名(唯一键) |
c | 行业 |
s | 状态 |
j | 投递岗位数 |
d | 截止日期 |
l | 地点 |
k | 内推码 |
o | 备注 |
url | 专属投递链接字段(别塞备注里) |
a | 是否归档 |
h | 是否有历史变更 |
Status enum — 语义不同的状态不许合并
已投 → 笔试 → 面试 → Offer
↘ 挂了
无岗 ← 官方还没开岗,**不是**"没投"
待查验 ← 信息待核实,**不是**"没投"🔴 无岗 和 待查验 绝不能合并进 未投。
曾经为了图省事把 366 家「无岗」统一标成「未投」,结果用户筛「未投」时看到的全是压根没开岗的公司,台账直接失去意义。
The 100% clickable rule
每一行的公司名都必须能点开。 有 4 家公司点了没反应,用户就会认为整张表是坏的。
三档视觉区分(让人在点之前就知道会发生什么):
| 档 | 判定 | 样式 | 角标 |
| 网页直达 | url 字段 / 备注里有 http | 主题色 + 实线下划 | ↗ |
| 邮箱投递 | 有 mailto: | 灰色 + 点线 | ✉ |
| 搜索兜底 | 以上都没有 | 灰色 + 虚线 | ⌕ |
搜索兜底必须是最后手段,不能拿它交差:
function searchUrl(name){
var q = encodeURIComponent(name + ' 2027届校园招聘 官方投递');
return 'https://www.baidu.com/s?wd=' + q;
}Incremental backup merging
用户在外面改完数据导出备份发回来 → 备份 = 最新真相,用它重建底表:
python scripts/merge_backup.py <备份.json> [底表.json]匹配顺序(顺序错了就会并出重复公司)
1. 精确名 "携程" == "携程"
2. 括号内简称 "四三九九(4399)" → "四三九九"
3. 规范化名 norm() 之后相等
4. 双向包含(最后手段) "携程旅行" ⊃ "携程"🔴 「携程旅行」「四三九九(4399)」「合众新能源汽车(哪吒汽车)」如果不按顺序匹配,会被当成新公司,台账里出现两条。
更隐蔽的坑:这些公司在旧版本里不是没有,是被标成 0 岗位 / 无岗。正确处理是补岗位数,不是新增记录。
保守归一化
def norm(s):
s = re.sub(r"[((].*?[))]", "", s) # 去括号内容
s = s.replace(" ", "").replace("\u3000", "")
s = re.sub(r"(股份有限公司|有限公司|股份公司)$", "", s)
return s🔴 只去这三个后缀。绝不去「集团 / 科技 / 技术 / 网络」 —— TCL科技 ≠ TCL,锐捷网络 ≠ 锐捷。 底表内部归一化撞名必须报错,不能静默通过。
Visited receipt
点过的公司名变灰,靠 localStorage 单独存:
var VKEY = KEY + '_visited';
function markVisited(id){
var v = JSON.parse(localStorage.getItem(VKEY) || '{}');
v[id] = 1; localStorage.setItem(VKEY, JSON.stringify(v));
}和主数据分开存 —— 清数据时不会连带清掉「投过没投过」的记录。
Workflow
- 先备份当前底表(
cp _merged_seed.json _merged_seed.bak_YYYYMMDD.json) - 跑
merge_backup.py合并用户备份 - 跑 diff 看新增了什么、变更了什么
- 补全新公司的投递链接(新公司通常不在原始表里,要单独搜)
- 重跑构建
- 跑假 DOM 冒烟测试,重点验「无 href 数 = 0」
Red flags
- 🚫 用黑名单正则提取 URL(会把中文一起吞了,链接失效)
- 🚫 把链接塞进备注字段(备注有别的用途,会互相污染)
- 🚫 改了底表不 bump SEED_VERSION(老用户看到旧数据)
- 🚫 用搜索兜底覆盖「本来能查到直达链接」的公司
- 🚫 归一化时删「集团/科技/技术」(会撞名)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

