Skip to content

Latest commit

 

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JobSniper — example job search agent

JobSniper is a small WPF desktop utility that collects and helps you manage job postings. It acts as a personal CRM for your job hunt, filtering out the noise, evaluating opportunities using AI, and keeping track of your interactions with companies.

Important

This repository ships with an example scraper only. It does not include or distribute any pre-built .exe for security and transparency. Run the app from source so you can inspect or customize the scraper before use. The private AI scraping workflows and API keys are strictly local and not included in this repository.

Quick start (for non-programmers)

  1. Install the .NET 9 SDK or Visual Studio with .NET 9 support.
  2. Open the solution JobSniper.sln in Visual Studio and press F5 to run.
    • Or use the terminal: dotnet run --project JobSniper from the repository root.
  3. The app window opens. Use the left menu to navigate between the Dashboard, Inbox, CRM, and Settings.
  4. Add URLs in "Settings & Filters". The built-in ExampleScraper will simulate scraping and populate the Inbox.

UI overview

  • Dashboard — overview of counts and the real-time scraper log.
  • Inbox — newly discovered offers.
  • Opportunities — offers you marked as interesting.
  • Trash — manually or automatically trashed items.
  • Archive — expired offers moved automatically after 48 hours of inactivity.
  • Session Duplicates — offers detected during the current run but already known to the system.
  • CRM (Companies) — personal database of companies, their aliases, your interaction history, and reputation tracking.
  • AI Position Evaluation — Master-Detail view in the CRM providing lazy-loaded AI coaching and match scoring for specific roles.
  • Settings & Filters — control panel for scraping, managing URLs, and handling graceful cancellation.

Buttons in the data grid:

  • 🌐 Web — open the original offer URL in your browser.
  • 📝 CRM — open or create a CRM detail for the company (add notes, set reputation color).
  • 👍 Opportunity — mark the offer as an opportunity.
  • 👎 Trash — move the specific offer to trash.
  • Block — block the company entirely (all future offers from this company are auto-trashed).
  • ♻️ Unblock — remove a company from the blacklist and restore their offers.

SniperIntel (Read-Only Viewer)

The solution also includes a secondary project called SniperIntel. It is a standalone, read-only desktop application designed strictly for browsing your collected data. It provides a fast, master-detail "dossier" view of your CRM notes, and logged evidence without the ability to modify the core database.

AI Position Evaluation (The AI Coach)

JobSniper includes a specialized CRM tab that allows you to integrate AI evaluations of job offers. The app is designed to read unstructured output from an LLM and parse a specific JSON block out of it.

If you hook up your own AI (via a private workflow), prompt the AI to include the following JSON structure anywhere in its text output. The system uses a two-tier scoring model to differentiate between a strict ATS/HR filter and your actual strategic chances:

{
  "RawHrScore": 15,
  "StrategicScore": 85,
  "OverqualifiedRisk": 9,
  "UnderqualifiedRisk": 8,
  "HiddenRole": "Troubleshooter / Maintenance",
  "RecommendedCvCategory": 3,
  "Strategy": "DumbDown",
  "StrategyReasoning": "The company needs a hands-on technician. Hide your complex C# architecture skills to avoid appearing overqualified.",
  "GoNoGo": true,
  "RedFlags": [
    "Likely a hard filter for a specific degree in the ATS",
    "Conservative corporate culture"
  ]
}

Files saved by the app

The app operates locally and saves your data into JSON files next to the executable:

  • jobs.json — saved job offers and their status.
  • urls.json — list of URLs to process.
  • blacklist.json — explicitly blocked companies.
  • crm_companies.json — your personal notes, aliases, and reputation data for companies.
  • ai_evaluations.json — saved JSON data containing your AI coach scores, match metrics, and full evaluations.

Why no .exe and how to customize the scraper

The repository contains ExampleScraper.cs which simulates scraping by parsing bundled HTML samples. This avoids network access and makes the project safe and easy to explore.

To adapt the app to a real job board:

  1. Open JobSniper/Scrapers/ExampleScraper.cs.
  2. Create a new class (or modify the existing one) in the JobSniper.Scrapers namespace.
  3. Implement the signature: Task<List<JobOffer>> ScrapeUrlAsync(string startUrl, Action<string> logMessage).
  4. Return JobOffer objects with Title, Company, Url, Location, Salary.
  5. Replace new ExampleScraper() in MainWindow.xaml.cs with your scraper class or add logic to select a scraper by PortalName in urls.json.

Notes:

  • Respect target websites' terms of use and robots.txt.
  • Add rate-limiting and error handling in production scrapers.
  • Test locally with ExampleScraper first, then switch to a real scraper.

Screenshots

  • Main window / Dashboard Dashboard

  • Inbox listing Inbox Inbox Details

  • CRM Company Database & AI Evaluation CRM Module AI Evaluation

  • SniperIntel Read-Only Viewer SniperIntel Viewer

Troubleshooting

  • App doesn't start: Install the .NET 9 SDK or open with a Visual Studio version that supports .NET 9.
  • No offers appear: Add example URLs in Settings or ensure urls.json contains entries.

License

MIT recommended. Add a LICENSE file with the license text if you choose it.


About

small WPF desktop utility that collects and helps you manage job postings.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages