Resume builder & job search automation system. Markdown source → PDF/HTML/TXT output.
Full documentation: Getting Started · Customization · AI Workflow
Source files in private/profile/ and private/companies/ → build system (templates/build/) → output in private/build/ (gitignored).
Job search pipeline in templates/jd/ with company info (private/company_info/), JD files (private/job_postings/), and analysis (private/jd_analysis/).
- Markdown is source of truth — edit
private/profile/andprivate/companies/, neverprivate/build/outputs - Conventional Commits with scope:
docs(company): add portfolio,fix(builder): handle edge case - Variant tags filter content per resume type (
publicvsjob) - Do not embellish resume content — only claim technologies/patterns evidenced in the codebase
<!-- public-only:start --> / <!-- public-only:end --> ✅ CORRECT
<!-- job-only:start --> / <!-- job-only:end --> ✅ CORRECT
<!-- variant:public --> / <!-- /variant:public --> ❌ WRONG (not filtered, causes duplicates)When fixing variant tags, convert ALL four tags (opening/closing for both variants).
extract_overview() reads content between ## Overview and next ## . Content in ## Summary or later sections is ignored. Place summary-mode content inside ## Overview with job-only tags.
Override is file-level. Full-mode companies need ALL private/companies/<company>/projects/ files overridden. Missing → original (possibly Korean) content leaks.
config.json keys must match directory names exactly: "CompanyB" not "companyb".
Must create manually: cp variant_config.example.json private/variant_config.json
Override content must not add technologies, roles, or achievements absent from base private/companies/ or private/profile/ files.
Inflation patterns to reject:
- Role: adding 매니저/리드/총괄 when actual role is IC
- Verb: 재설계 when actual work was 분리; 전환 when actual was 설계
- Scope: Cluster when infra was managed services; Kubernetes when actual was ECS
- Architecture: MSA 전환 when actual was partial service extraction
AI-generated content (interview sheets, mock interviews) must not infer specific technical experiences from general resume statements. "Used Spring Boot" ≠ "solved JPA N+1". State only what the resume explicitly documents. Verify with: python3 templates/build/verify_content.py private/jd_analysis/interview/<file>.md
# Resume builds
./build.sh <public|job|example> [full|short|wanted|base|all] [--target <name>] [--clean]
# Quick validation
./build.sh public all && ./build.sh job all
# Unit tests
python3 templates/tests/test_jd_status.py -vWhen creating a non-trivial coding plan in Codex, ask whether the user wants a sub-agent review unless they have already explicitly requested it.
If the user explicitly requests sub-agent/advisor-style review, spawn one sub-agent to review the draft plan before presenting the final plan.
The sub-agent review should:
- Check whether the plan matches repository constraints and current code reality
- Identify missing tests, risky assumptions, and unintended side effects
- Avoid implementing changes
- Return concise actionable feedback
If sub-agents are unavailable or not explicitly approved, state that the advisor/sub-agent review was skipped and proceed with the best local review.
private/ → all personal data (gitignored)
profile/ → core sections (contact, summary, skills, education)
companies/<co>/ → per-company: profile.md, projects/, achievements/
overrides/<target>/ → target-specific overrides (mirror profile/ & companies/)
build/ → generated outputs
company_info/ → company database
job_postings/ → JDs with auto-classification (pass/, conditional/, applied/, rejected/)
jd_analysis/ → screening results + interview sheets
templates/build/ → resume builder, notes generator
templates/jd/ → job search pipeline (search, auto, pipeline, validator)
| Directory | Pattern | Example |
|---|---|---|
private/company_info/ |
<company>.md |
techcorp.md |
private/job_postings/ |
<id>-<company>-<position>.md |
123456-techcorp-backend.md |
private/jd_analysis/screening/ |
<id>-<company>-<position>.md |
123456-techcorp-backend.md |