{"id":15442499,"url":"https://github.com/takline/resumegpt","last_synced_at":"2025-04-07T10:20:17.502Z","repository":{"id":246960190,"uuid":"823281847","full_name":"takline/ResumeGPT","owner":"takline","description":"Tailor your resume to match any job posting effortlessly","archived":false,"fork":false,"pushed_at":"2024-10-09T14:16:42.000Z","size":3994,"stargazers_count":44,"open_issues_count":2,"forks_count":21,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T10:19:56.821Z","etag":null,"topics":["ai","apply","ats","gpt","jobsearch","langchain","resume","resume-builder"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/ResumeGPT","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/takline.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-02T18:22:48.000Z","updated_at":"2025-04-06T03:01:49.000Z","dependencies_parsed_at":"2024-07-06T01:29:52.320Z","dependency_job_id":"21447282-4966-488d-80ed-8d0c50c4d75c","html_url":"https://github.com/takline/ResumeGPT","commit_stats":{"total_commits":23,"total_committers":1,"mean_commits":23.0,"dds":0.0,"last_synced_commit":"ae83eae6949b8de3fddafbe6e746f1518e0542ba"},"previous_names":["takline/resumegpt"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takline%2FResumeGPT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takline%2FResumeGPT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takline%2FResumeGPT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takline%2FResumeGPT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/takline","download_url":"https://codeload.github.com/takline/ResumeGPT/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247631833,"owners_count":20970069,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","apply","ats","gpt","jobsearch","langchain","resume","resume-builder"],"created_at":"2024-10-01T19:28:10.070Z","updated_at":"2025-04-07T10:20:17.476Z","avatar_url":"https://github.com/takline.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"images/ResumeGPT-light.png\"/\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"images/ResumeGPT.png\"/\u003e\n    \u003cimg width=\"400\" src=\"images/ResumeGPT.png\"/\u003e\n \u003cbr /\u003e\n\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\"\u003e\n    \u003cb\u003eFeatures\u003c/b\u003e\n  \u003c/a\u003e\n     · \n  \u003ca href=\"#installation\"\u003e\n    \u003cb\u003eInstall\u003c/b\u003e\n  \u003c/a\u003e\n     · \n  \u003ca href=\"#usage\"\u003e\n    \u003cb\u003eUsage\u003c/b\u003e\n  \u003c/a\u003e\n      · \n  \u003ca href=\"#discussions\"\u003e\n    \u003cb\u003eDiscussions\u003c/b\u003e\n  \u003c/a\u003e\n     · \n  \u003ca href=\"#contributors\"\u003e\n    \u003cb\u003eContributors\u003c/b\u003e\n  \u003c/a\u003e\n\n\u003c/p\u003e\n\n\n\n\u003cbr\u003e\n\n\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003ch3 align=\"center\"\u003eTailor your resume to match any job posting effortlessly with ResumeGPT.\n\u003c/h3\u003e\n\n\u003cbr/\u003e\nResumeGPT allows you to simply provide your resume and a job posting link, and it will produce a formatted ATS friendly PDF resume that is optimized and personalize your resume to align with the specific requirements and keywords of the job. \n\n## Features\n- Extracts relevant skills, qualifications, and keywords from a job posting.\n- Tailors your curent resume to match job requirements.\n- Generates professional ATS friendly PDF resumes.\n- Allows for user verification and customization before finalizing the resume.\n\n## Installation\n\n```bash\npip install ResumeGPT\n```\n\nor:\n\n```bash\npip install git+https://github.com/takline/ResumeGPT.git\n```\n\nor:\n\n\n```bash\ngit clone https://github.com/takline/ResumeGPT.git\ncd ResumeGPT\npip install -r requirements.txt\n```\n\n## Usage\n\n - Add your resume to `ResumeGPT/data/sample_resume.yaml` (make sure `ResumeGPT.config.YOUR_RESUME_NAME` is set to your resume filename in the `.data/` folder)\n - Provide ResumeGPT with the link to a job posting and it will tailot your resume to the job:\n\n### Single job posting usage\n```python\nurl = \"https://[link to your job posting]\"\nresume_improver = ResumeGPT.services.ResumeImprover(url)\nresume_improver.create_draft_tailored_resume()\n```\n\nResumeGPT then creates a new resume YAML file in a new folder named after the job posting (`ResumeGPT/data/[Company_Name_Job_Title]/resume.yaml`) with a YAML key/value: `editing: true`. ResumeGPT will wait for you to update this key to verify the resume updates and allow them to make their own updates until users set `editing=false`. Then ResumeGPT will create a PDF version of their resume.\n\n\n### Custom resume location usage\nInitialize `ResumeImprover` via a `.yaml` filepath.:\n\n```python\nresume_improver = ResumeGPT.services.ResumeImprover(url=url, resume_location=\"custom/path/to/resume.yaml\")\nresume_improver.create_draft_tailored_resume()\n```\n\n### Post-initialization usage\n```python\nresume_improver.update_resume(\"./new_resume.yaml\")\nresume_improver.url = \"https://[new link to your job posting]\"\nresume_improver.download_and_parse_job_post()\nresume_improver.create_draft_tailored_resume()\n```\n\n### Background usage\nYou can run multiple ResumeGPT.services.ResumeImprover's concurrently via ResumeGPT's BackgroundRunner class (as it takes a couple of minutes for ResumeImprover to complete a single run):\n```python\nbackground_configs = [\n    {\n        \"url\": \"https://[link to your job posting 1]\",\n        \"auto_open\": True,\n        \"manual_review\": True,\n        \"resume_location\": \"/path/to/resume1.yaml\",\n    },\n    {\n        \"url\": \"https://[link to your job posting 2]\",\n        \"auto_open\": False,\n        \"manual_review\": False,\n        \"resume_location\": \"/path/to/resume2.yaml\",\n    },\n    {\n        \"url\": \"https://[link to your job posting 3]\",\n        \"auto_open\": True,\n        \"manual_review\": True,\n        \"resume_location\": \"/path/to/resume3.yaml\",\n    },\n]\nbackground_runner = ResumeGPT.services.ResumeImprover.create_draft_tailored_resumes_in_background(background_configs=background_configs)\n#Check the status of background tasks (saves the output to `ResumeGPT/data/background_tasks/tasks.log`)\nbackground_runner[\"background_runner\"].check_status()\n#Stop all running tasks\nbackground_runner[\"background_runner\"].stop_all_tasks()\n#Extract a ResumeImprover\nfirst_resume_improver = background_runner[\"ResumeImprovers\"][0]\n```\n\nYou will follow the same workflow when using ResumeGPT's BackgroundRunner (ex: verify the resume updates via `editing=false` in each `ResumeGPT/data/[Company_Name_Job_Title]/resume.yaml` file). You can also find logs for the BackgroundRunner in `ResumeGPT/data/background_tasks/tasks.log`.\n\nOnce all of the background tasks are complete:\n\n```python\nbackground_runner[\"background_runner\"].check_status()\n```\n\nOutput:\n```\n['Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.']\n```\n\nCreate the pdf for each `ResumeImprovers` instance:\n\n```python\nfor improver in background_runner[\"ResumeImprovers\"]:\n    pdf_generator = ResumeGPT.pdf_generation.ResumePDFGenerator()\n    resume_yaml_path = os.path.join(improver.job_data_location, \"resume.yaml\")\n    pdf_generator.generate_resume(improver.job_data_location, ResumeGPT.utils.read_yaml(filename=resume_yaml_path))\n```\n\n\n### ResumeGPT PDF Output\nExample ATS friendly resume created by ResumeGPT:\n\n```python\npdf_generator = ResumeGPT.pdf_generation.ResumePDFGenerator()\npdf_generator.generate_resume(\"/path/to/save/pdf/\", ResumeGPT.utils.read_yaml(filename=\"/path/to/resume/resume.yaml\"))\n```\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/example_resume_output.png\" alt=\"Resume Example\" width=\"400\"/\u003e\n\u003c/p\u003e\n\n\n\n\n## Discussions\nFeel free to give feedback, ask questions, report a bug, or suggest improvements:\n\n - [Discussions](https://github.com/takline/ResumeGPT/discussions)\n - [Issues](https://github.com/takline/ResumeGPT/issues)\n\n\n##  Contributors\n⭐️  Please star, fork, explore, and contribute to ResumeGPT. There's a lot of work room for improvement so any contributions are appreciated.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakline%2Fresumegpt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftakline%2Fresumegpt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakline%2Fresumegpt/lists"}