applyr 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- applyr-0.1.0/LICENSE +21 -0
- applyr-0.1.0/PKG-INFO +234 -0
- applyr-0.1.0/README.md +209 -0
- applyr-0.1.0/applyr/__init__.py +3 -0
- applyr-0.1.0/applyr/cli.py +245 -0
- applyr-0.1.0/applyr/commands.py +971 -0
- applyr-0.1.0/applyr/config.py +131 -0
- applyr-0.1.0/applyr/cv.py +113 -0
- applyr-0.1.0/applyr/db.py +116 -0
- applyr-0.1.0/applyr/scoring.py +36 -0
- applyr-0.1.0/applyr.egg-info/PKG-INFO +234 -0
- applyr-0.1.0/applyr.egg-info/SOURCES.txt +15 -0
- applyr-0.1.0/applyr.egg-info/dependency_links.txt +1 -0
- applyr-0.1.0/applyr.egg-info/entry_points.txt +2 -0
- applyr-0.1.0/applyr.egg-info/top_level.txt +1 -0
- applyr-0.1.0/pyproject.toml +41 -0
- applyr-0.1.0/setup.cfg +4 -0
applyr-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Deiby Gorrin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
applyr-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: applyr
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: CLI job application tracker designed for AI coding agents
|
|
5
|
+
Author-email: Deiby Gorrin <deibygorrin@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/DeibyGS/applyr
|
|
8
|
+
Project-URL: Repository, https://github.com/DeibyGS/applyr
|
|
9
|
+
Project-URL: Issues, https://github.com/DeibyGS/applyr/issues
|
|
10
|
+
Keywords: job,tracker,cli,ai,career,applications
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Office/Business
|
|
20
|
+
Classifier: Topic :: Utilities
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# applyr
|
|
27
|
+
|
|
28
|
+
CLI job application tracker designed for AI coding agents.
|
|
29
|
+
|
|
30
|
+
Track applications, measure your funnel, spot skill gaps, and generate tailored CVs — all from your terminal. Built to work with [Claude Code](https://claude.ai/claude-code), [Cursor](https://cursor.sh), [Aider](https://aider.chat), or any AI coding agent.
|
|
31
|
+
|
|
32
|
+
## Why applyr?
|
|
33
|
+
|
|
34
|
+
I built this while applying to **200+ jobs**. Most job trackers are web apps that don't talk to your AI tools. applyr is different:
|
|
35
|
+
|
|
36
|
+
- **CLI-first** — runs in your terminal, pipes into anything
|
|
37
|
+
- **AI-agent native** — your coding agent reads/writes offers, generates CVs, and gives you insights
|
|
38
|
+
- **Zero dependencies** — Python 3.10+ stdlib only. No frameworks, no API keys
|
|
39
|
+
- **Local & private** — your data stays in a SQLite file on your machine
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install applyr
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or clone and install locally:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git clone https://github.com/DeibyGS/applyr.git
|
|
51
|
+
cd applyr
|
|
52
|
+
pip install .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Quick Start
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# 1. Initialize (creates ~/.applyr/ with config and database)
|
|
59
|
+
applyr init
|
|
60
|
+
|
|
61
|
+
# 2. Edit your CV master (source of truth for all CVs)
|
|
62
|
+
# Open ~/.applyr/cv-master.md in your editor
|
|
63
|
+
|
|
64
|
+
# 3. Add your first offer
|
|
65
|
+
applyr add '{"title": "Backend Developer", "company": "Acme", "work_mode": "remote", "salary_min": 35000, "salary_max": 45000, "seniority_level": "junior", "tech_stack": "Python, FastAPI, PostgreSQL"}'
|
|
66
|
+
|
|
67
|
+
# 4. Check your pipeline
|
|
68
|
+
applyr pipeline
|
|
69
|
+
|
|
70
|
+
# 5. See your stats
|
|
71
|
+
applyr stats
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Commands
|
|
75
|
+
|
|
76
|
+
| Command | Description |
|
|
77
|
+
|---------|-------------|
|
|
78
|
+
| `applyr init` | Set up ~/.applyr/ (config, database, templates) |
|
|
79
|
+
| `applyr add '<json>'` | Register a new job offer |
|
|
80
|
+
| `applyr list [--status S] [--sort F]` | List offers (default: last 50) |
|
|
81
|
+
| `applyr pipeline [--min-score N]` | View offers grouped by status |
|
|
82
|
+
| `applyr show <id>` | Show full offer details |
|
|
83
|
+
| `applyr update <id> <status>` | Update offer status |
|
|
84
|
+
| `applyr delete <id>` | Delete an offer |
|
|
85
|
+
| `applyr search <keyword>` | Search by company/title/notes/tech |
|
|
86
|
+
| `applyr stats` | Conversion funnel and metrics |
|
|
87
|
+
| `applyr gaps` | Skill gap analysis |
|
|
88
|
+
| `applyr followups` | Pending/overdue follow-ups |
|
|
89
|
+
| `applyr trends` | Application trends over time |
|
|
90
|
+
| `applyr summary [--json]` | Weekly summary (LLM-optimized) |
|
|
91
|
+
| `applyr export [--format csv\|json]` | Export all data |
|
|
92
|
+
| `applyr cv generate <id>` | Generate CV instructions for an offer |
|
|
93
|
+
| `applyr cv pdf <file.html>` | Convert HTML CV to PDF via Chrome |
|
|
94
|
+
| `applyr version` | Show version |
|
|
95
|
+
|
|
96
|
+
## Offer Statuses
|
|
97
|
+
|
|
98
|
+
`pending` > `applied` > `waiting` > `in_process` > `offer`
|
|
99
|
+
|
|
100
|
+
Side tracks: `discarded`, `rejected`
|
|
101
|
+
|
|
102
|
+
## Offer Fields
|
|
103
|
+
|
|
104
|
+
All fields are optional except `title`. Your AI agent fills in what it can from the job posting:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"title": "AI Engineer",
|
|
109
|
+
"company": "Acme Corp",
|
|
110
|
+
"summary": "Building LLM-powered features...",
|
|
111
|
+
"date_received": "2026-08-06",
|
|
112
|
+
"date_applied": "2026-08-06",
|
|
113
|
+
"compatibility_pct": 78,
|
|
114
|
+
"status": "applied",
|
|
115
|
+
"canal": "linkedin_easy",
|
|
116
|
+
"work_mode": "remote",
|
|
117
|
+
"location": "Madrid",
|
|
118
|
+
"salary_min": 30000,
|
|
119
|
+
"salary_max": 40000,
|
|
120
|
+
"seniority_level": "junior",
|
|
121
|
+
"role_category": "ai",
|
|
122
|
+
"tech_stack": "Python, LangChain, AWS",
|
|
123
|
+
"cover_letter": 1,
|
|
124
|
+
"contact_name": "Ana Garcia",
|
|
125
|
+
"contact_role": "Recruiter",
|
|
126
|
+
"job_url": "https://...",
|
|
127
|
+
"notes": "Referred by John",
|
|
128
|
+
"topics": {
|
|
129
|
+
"tech_stack": {"score": 85, "detail": "Python strong, LangChain learning"},
|
|
130
|
+
"education": {"score": 70, "detail": "DAM completed"},
|
|
131
|
+
"english": {"score": 60, "detail": "B1 level"},
|
|
132
|
+
"experience": {"score": 40, "detail": "6 months internship"},
|
|
133
|
+
"projects": {"score": 90, "detail": "3 production projects"},
|
|
134
|
+
"cultural_fit": {"score": 80, "detail": "Startup culture match"}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Scoring
|
|
140
|
+
|
|
141
|
+
Compatibility is auto-calculated from topic scores using configurable weights:
|
|
142
|
+
|
|
143
|
+
| Topic | Default Weight |
|
|
144
|
+
|-------|---------------|
|
|
145
|
+
| Tech Stack | 30% |
|
|
146
|
+
| Education | 15% |
|
|
147
|
+
| English | 10% |
|
|
148
|
+
| Experience | 15% |
|
|
149
|
+
| Own Projects | 20% |
|
|
150
|
+
| Cultural Fit | 10% |
|
|
151
|
+
|
|
152
|
+
Customize weights, topic names, and threshold in `~/.applyr/applyr.toml`.
|
|
153
|
+
|
|
154
|
+
## Using with AI Agents
|
|
155
|
+
|
|
156
|
+
applyr is designed to be used **through** your AI coding agent. Here's the workflow:
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
You: "Analyze this job posting for AI Engineer at Acme"
|
|
160
|
+
Agent: Reads the posting + your cv-master.md
|
|
161
|
+
Evaluates compatibility per topic
|
|
162
|
+
Runs: applyr add '<json with all fields>'
|
|
163
|
+
Output: "Registered as #42 — 78% match. Gaps: English, Experience"
|
|
164
|
+
|
|
165
|
+
You: "What should I focus on improving?"
|
|
166
|
+
Agent: Runs: applyr gaps
|
|
167
|
+
Output: "English appears in 15 offers. Consider getting B2 cert."
|
|
168
|
+
|
|
169
|
+
You: "Generate a CV for offer #42"
|
|
170
|
+
Agent: Runs: applyr cv generate 42
|
|
171
|
+
Reads cv-master.md + offer details
|
|
172
|
+
Creates tailored HTML CV
|
|
173
|
+
Runs: applyr cv pdf cv-acme.html
|
|
174
|
+
|
|
175
|
+
You: "Weekly summary"
|
|
176
|
+
Agent: Runs: applyr summary --json
|
|
177
|
+
Output: structured JSON with metrics, trends, and recommendations
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### CLAUDE.md Integration
|
|
181
|
+
|
|
182
|
+
Add this to your project's `CLAUDE.md` for automatic agent behavior:
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
## Job Application Tracking
|
|
186
|
+
- Use `applyr` CLI for all job tracking operations
|
|
187
|
+
- Read `~/.applyr/cv-master.md` as source of truth for CV content — never invent
|
|
188
|
+
- When analyzing an offer: evaluate all topics, calculate score, register with `applyr add`
|
|
189
|
+
- When applying: generate ATS CV with `applyr cv generate <id>`, create PDF
|
|
190
|
+
- Threshold to apply: >= 65% compatibility
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Configuration
|
|
194
|
+
|
|
195
|
+
Edit `~/.applyr/applyr.toml`:
|
|
196
|
+
|
|
197
|
+
```toml
|
|
198
|
+
[general]
|
|
199
|
+
threshold = 65 # Min compatibility % to recommend applying
|
|
200
|
+
followup_days = 10 # Days before follow-up reminder
|
|
201
|
+
|
|
202
|
+
[weights]
|
|
203
|
+
tech_stack = 0.30
|
|
204
|
+
education = 0.15
|
|
205
|
+
english = 0.10
|
|
206
|
+
experience = 0.15
|
|
207
|
+
projects = 0.20
|
|
208
|
+
cultural_fit = 0.10
|
|
209
|
+
|
|
210
|
+
[topics]
|
|
211
|
+
tech_stack = "Tech Stack"
|
|
212
|
+
education = "Education"
|
|
213
|
+
english = "English"
|
|
214
|
+
experience = "Experience"
|
|
215
|
+
projects = "Own Projects"
|
|
216
|
+
cultural_fit = "Cultural Fit"
|
|
217
|
+
|
|
218
|
+
[cv]
|
|
219
|
+
# chrome_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
220
|
+
# cv_master = "~/.applyr/cv-master.md"
|
|
221
|
+
# output_dir = "~/.applyr/cv"
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Data Storage
|
|
225
|
+
|
|
226
|
+
All data is stored locally in `~/.applyr/jobs.db` (SQLite). Export anytime:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
applyr export --format json --file my-applications.json
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## License
|
|
233
|
+
|
|
234
|
+
MIT
|
applyr-0.1.0/README.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# applyr
|
|
2
|
+
|
|
3
|
+
CLI job application tracker designed for AI coding agents.
|
|
4
|
+
|
|
5
|
+
Track applications, measure your funnel, spot skill gaps, and generate tailored CVs — all from your terminal. Built to work with [Claude Code](https://claude.ai/claude-code), [Cursor](https://cursor.sh), [Aider](https://aider.chat), or any AI coding agent.
|
|
6
|
+
|
|
7
|
+
## Why applyr?
|
|
8
|
+
|
|
9
|
+
I built this while applying to **200+ jobs**. Most job trackers are web apps that don't talk to your AI tools. applyr is different:
|
|
10
|
+
|
|
11
|
+
- **CLI-first** — runs in your terminal, pipes into anything
|
|
12
|
+
- **AI-agent native** — your coding agent reads/writes offers, generates CVs, and gives you insights
|
|
13
|
+
- **Zero dependencies** — Python 3.10+ stdlib only. No frameworks, no API keys
|
|
14
|
+
- **Local & private** — your data stays in a SQLite file on your machine
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install applyr
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or clone and install locally:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
git clone https://github.com/DeibyGS/applyr.git
|
|
26
|
+
cd applyr
|
|
27
|
+
pip install .
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 1. Initialize (creates ~/.applyr/ with config and database)
|
|
34
|
+
applyr init
|
|
35
|
+
|
|
36
|
+
# 2. Edit your CV master (source of truth for all CVs)
|
|
37
|
+
# Open ~/.applyr/cv-master.md in your editor
|
|
38
|
+
|
|
39
|
+
# 3. Add your first offer
|
|
40
|
+
applyr add '{"title": "Backend Developer", "company": "Acme", "work_mode": "remote", "salary_min": 35000, "salary_max": 45000, "seniority_level": "junior", "tech_stack": "Python, FastAPI, PostgreSQL"}'
|
|
41
|
+
|
|
42
|
+
# 4. Check your pipeline
|
|
43
|
+
applyr pipeline
|
|
44
|
+
|
|
45
|
+
# 5. See your stats
|
|
46
|
+
applyr stats
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Commands
|
|
50
|
+
|
|
51
|
+
| Command | Description |
|
|
52
|
+
|---------|-------------|
|
|
53
|
+
| `applyr init` | Set up ~/.applyr/ (config, database, templates) |
|
|
54
|
+
| `applyr add '<json>'` | Register a new job offer |
|
|
55
|
+
| `applyr list [--status S] [--sort F]` | List offers (default: last 50) |
|
|
56
|
+
| `applyr pipeline [--min-score N]` | View offers grouped by status |
|
|
57
|
+
| `applyr show <id>` | Show full offer details |
|
|
58
|
+
| `applyr update <id> <status>` | Update offer status |
|
|
59
|
+
| `applyr delete <id>` | Delete an offer |
|
|
60
|
+
| `applyr search <keyword>` | Search by company/title/notes/tech |
|
|
61
|
+
| `applyr stats` | Conversion funnel and metrics |
|
|
62
|
+
| `applyr gaps` | Skill gap analysis |
|
|
63
|
+
| `applyr followups` | Pending/overdue follow-ups |
|
|
64
|
+
| `applyr trends` | Application trends over time |
|
|
65
|
+
| `applyr summary [--json]` | Weekly summary (LLM-optimized) |
|
|
66
|
+
| `applyr export [--format csv\|json]` | Export all data |
|
|
67
|
+
| `applyr cv generate <id>` | Generate CV instructions for an offer |
|
|
68
|
+
| `applyr cv pdf <file.html>` | Convert HTML CV to PDF via Chrome |
|
|
69
|
+
| `applyr version` | Show version |
|
|
70
|
+
|
|
71
|
+
## Offer Statuses
|
|
72
|
+
|
|
73
|
+
`pending` > `applied` > `waiting` > `in_process` > `offer`
|
|
74
|
+
|
|
75
|
+
Side tracks: `discarded`, `rejected`
|
|
76
|
+
|
|
77
|
+
## Offer Fields
|
|
78
|
+
|
|
79
|
+
All fields are optional except `title`. Your AI agent fills in what it can from the job posting:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"title": "AI Engineer",
|
|
84
|
+
"company": "Acme Corp",
|
|
85
|
+
"summary": "Building LLM-powered features...",
|
|
86
|
+
"date_received": "2026-08-06",
|
|
87
|
+
"date_applied": "2026-08-06",
|
|
88
|
+
"compatibility_pct": 78,
|
|
89
|
+
"status": "applied",
|
|
90
|
+
"canal": "linkedin_easy",
|
|
91
|
+
"work_mode": "remote",
|
|
92
|
+
"location": "Madrid",
|
|
93
|
+
"salary_min": 30000,
|
|
94
|
+
"salary_max": 40000,
|
|
95
|
+
"seniority_level": "junior",
|
|
96
|
+
"role_category": "ai",
|
|
97
|
+
"tech_stack": "Python, LangChain, AWS",
|
|
98
|
+
"cover_letter": 1,
|
|
99
|
+
"contact_name": "Ana Garcia",
|
|
100
|
+
"contact_role": "Recruiter",
|
|
101
|
+
"job_url": "https://...",
|
|
102
|
+
"notes": "Referred by John",
|
|
103
|
+
"topics": {
|
|
104
|
+
"tech_stack": {"score": 85, "detail": "Python strong, LangChain learning"},
|
|
105
|
+
"education": {"score": 70, "detail": "DAM completed"},
|
|
106
|
+
"english": {"score": 60, "detail": "B1 level"},
|
|
107
|
+
"experience": {"score": 40, "detail": "6 months internship"},
|
|
108
|
+
"projects": {"score": 90, "detail": "3 production projects"},
|
|
109
|
+
"cultural_fit": {"score": 80, "detail": "Startup culture match"}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Scoring
|
|
115
|
+
|
|
116
|
+
Compatibility is auto-calculated from topic scores using configurable weights:
|
|
117
|
+
|
|
118
|
+
| Topic | Default Weight |
|
|
119
|
+
|-------|---------------|
|
|
120
|
+
| Tech Stack | 30% |
|
|
121
|
+
| Education | 15% |
|
|
122
|
+
| English | 10% |
|
|
123
|
+
| Experience | 15% |
|
|
124
|
+
| Own Projects | 20% |
|
|
125
|
+
| Cultural Fit | 10% |
|
|
126
|
+
|
|
127
|
+
Customize weights, topic names, and threshold in `~/.applyr/applyr.toml`.
|
|
128
|
+
|
|
129
|
+
## Using with AI Agents
|
|
130
|
+
|
|
131
|
+
applyr is designed to be used **through** your AI coding agent. Here's the workflow:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
You: "Analyze this job posting for AI Engineer at Acme"
|
|
135
|
+
Agent: Reads the posting + your cv-master.md
|
|
136
|
+
Evaluates compatibility per topic
|
|
137
|
+
Runs: applyr add '<json with all fields>'
|
|
138
|
+
Output: "Registered as #42 — 78% match. Gaps: English, Experience"
|
|
139
|
+
|
|
140
|
+
You: "What should I focus on improving?"
|
|
141
|
+
Agent: Runs: applyr gaps
|
|
142
|
+
Output: "English appears in 15 offers. Consider getting B2 cert."
|
|
143
|
+
|
|
144
|
+
You: "Generate a CV for offer #42"
|
|
145
|
+
Agent: Runs: applyr cv generate 42
|
|
146
|
+
Reads cv-master.md + offer details
|
|
147
|
+
Creates tailored HTML CV
|
|
148
|
+
Runs: applyr cv pdf cv-acme.html
|
|
149
|
+
|
|
150
|
+
You: "Weekly summary"
|
|
151
|
+
Agent: Runs: applyr summary --json
|
|
152
|
+
Output: structured JSON with metrics, trends, and recommendations
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### CLAUDE.md Integration
|
|
156
|
+
|
|
157
|
+
Add this to your project's `CLAUDE.md` for automatic agent behavior:
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
## Job Application Tracking
|
|
161
|
+
- Use `applyr` CLI for all job tracking operations
|
|
162
|
+
- Read `~/.applyr/cv-master.md` as source of truth for CV content — never invent
|
|
163
|
+
- When analyzing an offer: evaluate all topics, calculate score, register with `applyr add`
|
|
164
|
+
- When applying: generate ATS CV with `applyr cv generate <id>`, create PDF
|
|
165
|
+
- Threshold to apply: >= 65% compatibility
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Configuration
|
|
169
|
+
|
|
170
|
+
Edit `~/.applyr/applyr.toml`:
|
|
171
|
+
|
|
172
|
+
```toml
|
|
173
|
+
[general]
|
|
174
|
+
threshold = 65 # Min compatibility % to recommend applying
|
|
175
|
+
followup_days = 10 # Days before follow-up reminder
|
|
176
|
+
|
|
177
|
+
[weights]
|
|
178
|
+
tech_stack = 0.30
|
|
179
|
+
education = 0.15
|
|
180
|
+
english = 0.10
|
|
181
|
+
experience = 0.15
|
|
182
|
+
projects = 0.20
|
|
183
|
+
cultural_fit = 0.10
|
|
184
|
+
|
|
185
|
+
[topics]
|
|
186
|
+
tech_stack = "Tech Stack"
|
|
187
|
+
education = "Education"
|
|
188
|
+
english = "English"
|
|
189
|
+
experience = "Experience"
|
|
190
|
+
projects = "Own Projects"
|
|
191
|
+
cultural_fit = "Cultural Fit"
|
|
192
|
+
|
|
193
|
+
[cv]
|
|
194
|
+
# chrome_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
195
|
+
# cv_master = "~/.applyr/cv-master.md"
|
|
196
|
+
# output_dir = "~/.applyr/cv"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Data Storage
|
|
200
|
+
|
|
201
|
+
All data is stored locally in `~/.applyr/jobs.db` (SQLite). Export anytime:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
applyr export --format json --file my-applications.json
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## License
|
|
208
|
+
|
|
209
|
+
MIT
|