Want to run career-ops on Hong Kong and nearby APAC job boards? There’s a small public overlay for that. Upstream still owns the scorer. The overlay adds filters, gates, and helpers. I scrubbed private-hunt material before publishing.
Credit where the scoring comes from
The overlay sits on top of career-ops. I didn’t invent the job scorer. career-ops already scores roles across five dimensions plus a global score. It’s MIT-licensed. Copyright (c) 2026 Santiago Fernández de Valderrama. The public overlay keeps that license. NOTICE and LICENSE travel with any copy.
Clone career-ops first if you want the base system. The overlay only adds Hong Kong filters, gates, and helpers. It isn’t an official career-ops product.
What the overlay adds
Copy the overlay files onto a career-ops checkout. They sit on top. They don’t replace your CV.
Hong Kong scan and eval filters tag permanent roles versus contract or temp. Contract and temp stay in the set, tagged, with a suggested Review status. Agency and Big Four postings get demoted unless the posting shows a clear AI or transformation signal. Salary versus your own floor and target placeholders is a rank tag only. It doesn’t delete the row.
board-eval.mjs copies the career-ops five-dimension scores and the global score. It won’t take a hand-typed replacement score. There’s no --score flag. Without a real scorer path it exits and writes nothing. A level-fit line can sit as a note. It doesn’t change the score. The command can write a report and a tracker-addition file. It doesn’t merge the tracker, fill a form, or mark Applied.
There’s an approve-then-apply gate. Form fill stays off until you enable it and the tracker row is Approved, which is the operator GO. Set CAREER_OPS_APPLY=0 and autofill stays off even when the profile says true. The tool never auto-clicks Apply, Submit, or Send. You open the portal and submit yourself.
The CV tailor gate is default off too. After operator GO, if you open it, the path builds a black-and-white, one-column HTML file, then PDF or Word for ATS forms. That path runs build-cv-html, then generate-pdf, plus a docx helper. No photo, colour, icons, skill bars, layout tables, or logos. Words on the CV still have to be true in your own cv.md. The overlay doesn’t ship a CV. An offline --selftest on the docx helper uses a fictional sample CV named Ada Example.
Notion sync is optional. No database id ships with the tree. You set your own data-source id and put the token only in .env. Push and pull both support --dry-run, so you can print a plan before a live call. Push doesn’t overwrite Status on a page that already exists.
Short flow: score and filter, optional Notion mirror, operator GO, then you apply by hand.
What was scrubbed on purpose
The public repo has no personal CV, no application reports, no real profile, no Notion database or page ids, no salary floors or numbers, and no live tokens. The private hunt stays private. Tracker rows from a private run stay out too. The example person in profile.example.yml is fictional. Portal salary fields use placeholders such as YOUR_FLOOR_HKD_YEAR and YOUR_TARGET_HKD_YEAR.
You can reuse the filters and gates without picking up someone else’s hunt. I scrubbed the public tree so that would hold.
How you use it
High level, from the public README:
- Clone career-ops.
- Copy the overlay tree into that checkout.
- Copy
config/profile.example.ymltoconfig/profile.ymland write your own details. Don’t commit the real profile. - Copy
templates/portals.hk.example.ymltoportals.ymland replace the salary placeholders with your own annual figures. - For Notion, copy
.env.exampleto.envand followconfig/hunt.example.yml. Keep the token out of git.
Then read docs/HK_OVERLAY.md in the repo for board-eval flags, gate defaults, and Notion mapping notes. The tree at publish time pointed at commit fd37fc70 on anthony-tsui/career-ops-hk-overlay.
Fork it, credit upstream, keep the private hunt private
If the overlay helps you run career-ops on Hong Kong boards, fork it. Keep the NOTICE and LICENSE credit. Put your own profile and salary numbers in place of the placeholders. Leave private hunt material out of any public tree. That’s how this one shipped.



