offerprinter 0.2.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.
Files changed (60) hide show
  1. offerprinter-0.2.0/.gitignore +36 -0
  2. offerprinter-0.2.0/CHANGELOG.md +104 -0
  3. offerprinter-0.2.0/LICENSE +21 -0
  4. offerprinter-0.2.0/PKG-INFO +542 -0
  5. offerprinter-0.2.0/README.md +495 -0
  6. offerprinter-0.2.0/app.py +395 -0
  7. offerprinter-0.2.0/cli.py +13 -0
  8. offerprinter-0.2.0/config.example.toml +80 -0
  9. offerprinter-0.2.0/deploy/README.md +101 -0
  10. offerprinter-0.2.0/deploy/huggingface/README.md +43 -0
  11. offerprinter-0.2.0/docs/skill/SKILL.md +124 -0
  12. offerprinter-0.2.0/examples/README.md +28 -0
  13. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/ats-keyword-report.docx +0 -0
  14. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/ats-keyword-report.md +39 -0
  15. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/cover-letter.docx +0 -0
  16. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/cover-letter.md +34 -0
  17. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/fit-memo.docx +0 -0
  18. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/fit-memo.md +39 -0
  19. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/full-package.docx +0 -0
  20. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/full-package.md +242 -0
  21. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/interview-prep-pack.docx +0 -0
  22. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/interview-prep-pack.md +66 -0
  23. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/tailored-cv.docx +0 -0
  24. offerprinter-0.2.0/examples/output/northbank-senior-product-analyst/tailored-cv.md +45 -0
  25. offerprinter-0.2.0/examples/sample_cv.md +41 -0
  26. offerprinter-0.2.0/examples/sample_jd.md +37 -0
  27. offerprinter-0.2.0/offerprinter/__init__.py +7 -0
  28. offerprinter-0.2.0/offerprinter/cli.py +523 -0
  29. offerprinter-0.2.0/offerprinter/config.py +183 -0
  30. offerprinter-0.2.0/offerprinter/controllers/__init__.py +5 -0
  31. offerprinter-0.2.0/offerprinter/controllers/pipeline.py +135 -0
  32. offerprinter-0.2.0/offerprinter/llm/__init__.py +11 -0
  33. offerprinter-0.2.0/offerprinter/llm/anthropic_provider.py +41 -0
  34. offerprinter-0.2.0/offerprinter/llm/base.py +125 -0
  35. offerprinter-0.2.0/offerprinter/llm/factory.py +33 -0
  36. offerprinter-0.2.0/offerprinter/llm/gemini_provider.py +38 -0
  37. offerprinter-0.2.0/offerprinter/llm/kimi_provider.py +16 -0
  38. offerprinter-0.2.0/offerprinter/llm/ollama_provider.py +24 -0
  39. offerprinter-0.2.0/offerprinter/llm/openai_provider.py +42 -0
  40. offerprinter-0.2.0/offerprinter/models/__init__.py +21 -0
  41. offerprinter-0.2.0/offerprinter/models/schemas.py +202 -0
  42. offerprinter-0.2.0/offerprinter/pricing.py +98 -0
  43. offerprinter-0.2.0/offerprinter/prompts/__init__.py +32 -0
  44. offerprinter-0.2.0/offerprinter/prompts/templates.py +339 -0
  45. offerprinter-0.2.0/offerprinter/services/__init__.py +14 -0
  46. offerprinter-0.2.0/offerprinter/services/cv_parser.py +84 -0
  47. offerprinter-0.2.0/offerprinter/services/generator.py +169 -0
  48. offerprinter-0.2.0/offerprinter/services/jd_fetcher.py +86 -0
  49. offerprinter-0.2.0/offerprinter/services/pdf_writer.py +329 -0
  50. offerprinter-0.2.0/offerprinter/services/tracker.py +210 -0
  51. offerprinter-0.2.0/offerprinter/services/writer.py +142 -0
  52. offerprinter-0.2.0/offerprinter/ui/__init__.py +9 -0
  53. offerprinter-0.2.0/offerprinter/ui/printer.py +165 -0
  54. offerprinter-0.2.0/pyproject.toml +125 -0
  55. offerprinter-0.2.0/tests/__init__.py +0 -0
  56. offerprinter-0.2.0/tests/conftest.py +72 -0
  57. offerprinter-0.2.0/tests/test_offerprinter.py +259 -0
  58. offerprinter-0.2.0/tests/test_pdf_writer.py +127 -0
  59. offerprinter-0.2.0/tests/test_pricing_and_retries.py +217 -0
  60. offerprinter-0.2.0/tests/test_tracker.py +168 -0
@@ -0,0 +1,36 @@
1
+ # --- OfferPrinter ---
2
+ # Never commit secrets or generated user output.
3
+ config.toml
4
+ .env
5
+ output/
6
+ !examples/output/
7
+
8
+ # --- Python ---
9
+ __pycache__/
10
+ *.py[cod]
11
+ *.egg-info/
12
+ .eggs/
13
+ build/
14
+ dist/
15
+ .venv/
16
+ venv/
17
+ env/
18
+ .python-version
19
+
20
+ # --- Packaging / release ---
21
+ *.spec.bak
22
+ release/
23
+ # (dist/ and build/ are already ignored under Python, above)
24
+
25
+ # --- Tooling ---
26
+ .ruff_cache/
27
+ .pytest_cache/
28
+ .mypy_cache/
29
+ .coverage
30
+ htmlcov/
31
+
32
+ # --- OS / editor ---
33
+ .DS_Store
34
+ .idea/
35
+ .vscode/
36
+ *.swp
@@ -0,0 +1,104 @@
1
+ # Changelog
2
+
3
+ All notable changes to OfferPrinter are documented here.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.2.0] — 2026-08-18
11
+
12
+ The "actually installable, and quite a lot faster" release.
13
+
14
+ ### Added
15
+
16
+ **Distribution**
17
+ - Published to PyPI: `pipx install offerprinter`, `uvx offerprinter`, or
18
+ `pip install offerprinter`.
19
+ - `offerprinter` and `opr` console scripts, so it works from anywhere after
20
+ install rather than only from a git clone.
21
+ - Standalone binaries for macOS, Linux and Windows attached to each release —
22
+ no Python installation required.
23
+ - Multi-arch Docker image published to GHCR on every push and tag:
24
+ `ghcr.io/mohitagw15856/offerprinter:latest`.
25
+ - Homebrew formula in `packaging/homebrew/` for a `brew install` tap.
26
+ - Deployment guides for Streamlit Community Cloud, Hugging Face Spaces, Docker
27
+ and container platforms, in `deploy/`.
28
+
29
+ **Features**
30
+ - **Fit score** — every run ends with a 0-100 score, a band, and honest
31
+ strengths and gaps. Written to `fit-score.md` and shown in the CLI and web UI.
32
+ - **PDF output** — real, selectable, ATS-friendly Helvetica text, written by a
33
+ dependency-free PDF writer rather than a rendering engine. Enable with
34
+ `--formats md,docx,pdf`.
35
+ - **Roast mode** — `offerprinter roast --cv cv.pdf`, or `--roast` during a run.
36
+ Blunt, funny, opt-in critique of your CV's *writing*. Still never dishonest.
37
+ - **Application tracker** — every run is recorded locally in
38
+ `~/.offerprinter/applications.json`. New commands: `offerprinter list`,
39
+ `offerprinter stats`, `offerprinter status <slug> <status>`.
40
+ - **Achievements** — eleven small milestones, computed from your local history.
41
+ - **Batch mode** — `--jd-dir ./jobs` prints a package for every job description
42
+ in a folder.
43
+ - **Cost and token reporting** — every run reports calls, tokens and estimated
44
+ spend. `--dry-run` forecasts the cost without calling the API at all.
45
+ - **Ollama provider** — run entirely on your own machine with no API key and no
46
+ data leaving your laptop: `--provider ollama`.
47
+ - **Printer animation** — an ASCII dot-matrix printer feeding a sheet per
48
+ document. Degrades to plain status lines when not a terminal, or with
49
+ `--no-animation`.
50
+ - **Demo mode in the web UI** — with no API key configured, the app shows the
51
+ bundled example package instead of an error, which is what makes a public
52
+ hosted demo possible.
53
+
54
+ **Reliability**
55
+ - Automatic retries with exponential backoff and `Retry-After` support on 429s
56
+ and 5xx errors. A single rate limit no longer kills a five-document run.
57
+ - `[pricing]` config table to override list prices with your actual rates.
58
+
59
+ **Project**
60
+ - `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, this changelog, issue
61
+ and pull request templates.
62
+ - CI now runs the test suite across Python 3.11/3.12/3.13 with macOS and Windows
63
+ spot-checks, plus coverage, a packaging build, and a console-script smoke test.
64
+
65
+ ### Changed
66
+
67
+ - **Artifacts now generate in parallel.** They are independent of each other, so
68
+ a full run takes about as long as its slowest single document instead of the
69
+ sum of all five. Use `--sequential` for the old behaviour.
70
+ - The CLI moved to `offerprinter/cli.py` so it ships inside the installed
71
+ package. `python cli.py …` still works from a clone.
72
+ - The web UI (`streamlit`) is now an optional extra, keeping
73
+ `pipx install offerprinter` small. Install it with `offerprinter[web]`.
74
+ - Default output formats remain `md` and `docx`; `pdf` is opt-in via config
75
+ or `--formats`.
76
+
77
+ ### Fixed
78
+
79
+ - The `offerprinter` console script pointed at a root-level `cli` module that
80
+ was never included in the wheel, so it could not resolve after an install.
81
+ - The README claimed CI ran `pytest`. It didn't. Now it does.
82
+
83
+ ## [0.1.0] — 2026-08-18
84
+
85
+ First release — "First Print".
86
+
87
+ ### Added
88
+
89
+ - Five generated artifacts from one CV and one job description: tailored CV,
90
+ cover letter, fit memo, ATS keyword report, interview prep pack.
91
+ - The no-fabrication guarantee, enforced in every prompt.
92
+ - Four providers behind one interface: Anthropic (default), OpenAI, Gemini,
93
+ Moonshot Kimi.
94
+ - CLI (Typer), web UI (Streamlit), and an agent skill at `docs/skill/SKILL.md`.
95
+ - CV input as `.pdf`, `.docx`, `.md`, `.txt` or pasted text; job description as a
96
+ URL or text.
97
+ - Markdown and Word output, plus a combined full package.
98
+ - UK and US English.
99
+ - Config via env vars, `config.toml`, or defaults.
100
+ - Dockerfile and docker-compose, offline test suite, ruff lint.
101
+
102
+ [Unreleased]: https://github.com/mohitagw15856/OfferPrinter/compare/v0.2.0...HEAD
103
+ [0.2.0]: https://github.com/mohitagw15856/OfferPrinter/compare/v0.1.0...v0.2.0
104
+ [0.1.0]: https://github.com/mohitagw15856/OfferPrinter/releases/tag/v0.1.0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 OfferPrinter contributors
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.