Skip to content

Releases: TDK-99/SnapplAI

v1.9 Relocation scoring, config-driven search & LLM resilience tests

Choose a tag to compare

@TDK-99 TDK-99 released this 30 Sep 00:11
c8e43ec

What's new

Features

  • Relocation-aware scoring β€” jobs offering relocation now get a fit-score boost. The relocation parameter is configurable in file_config.env.
  • Config-driven search settings β€” search parameters are loaded from file_config.env instead of being hardcoded in the workflow.

Reliability & testing

  • Added pytest suite for the LLM fallback/retry logic (generate_content_resilient), covering model rotation, sticky pointer, and non-retryable error handling.
  • New CI job (llm_resilient) runs the resilience tests on every push.
  • Fixed load_dotenv mock in job scraper tests to ensure proper env-var isolation.

Docs

  • README rewritten and improved.

v1.8 Location accuracy, country filter & ui email

Choose a tag to compare

@TDK-99 TDK-99 released this 19 Sep 02:23
44d3daa
  • Fix geo scoring: job location passed to scoring agent, no more fabricated cities for remote jobs
  • Added country_no filter to exclude unwanted countries from scraping
  • Email report rebuilt as HTML with per-job cards, mobile-friendly
  • Simplified email subject: "SnapplAI - search term + date"
  • Fix xlsx attachment filename extension
  • load_dotenv(override=True) across all src modules
  • Added CI job for scraper testing
  • Added CLAUDE.md with repo workflow standards
  • Updated README with new output screenshot and completed v2 roadmap

v1.7 Analytics Report & CI Coverage

Choose a tag to compare

@TDK-99 TDK-99 released this 08 Sep 13:21
3d2f9f8

What's new

  • Analytics report attached to daily email: a new analysis step extracts insights from scraped jobs and sends them as a .txt attachment alongside the Excel file
  • Improved city filtering: added precise city input for job filtering, with post-filter count logging for pipeline visibility
  • Richer email subject: now includes job info directly in the SMTP subject line

CI / Testing

  • Added unit test for AI analyze agent (test_ai_analyze.py)
  • Added unit test for SMTP email sending (test_smtp.py), fully mocked with no secrets required
  • Both tests integrated in ci.yml workflow
  • Simplified workflow config by removing country+job params for cleaner test runs

Docs & Community

  • Added CONTRIBUTING.md and SUPPORT.md
  • Updated README with new architecture diagram, output screenshots and project file structure
  • Updated yml.example template

v1.6 Provider-agnostic SMTP & smarter job summarization

Choose a tag to compare

@TDK-99 TDK-99 released this 07 Sep 18:44
6282076

What's new

Provider-agnostic email delivery β€” SMTP host, port, and credentials are now fully configurable via .env. Gmail still works out of the box, but you can now use Outlook/Office365, Mailtrap, or any SMTP provider. Port 465 uses SSL, all other ports use STARTTLS automatically.

Improved AI summarization β€” The system prompt now extracts role and city more reliably: role comes from the scraped title, city defaults to your configured location for remote jobs with no location listed.

New CI pipeline β€” Added automated test for the AI summarization step with mocked LLM responses.

Contributors
@willsf2021 (SMTP refactor)

v1.5 resilient Gemini calls with retry, backoff and model fallback

Choose a tag to compare

@TDK-99 TDK-99 released this 04 Sep 15:57
144468a

Adds resilience to LLM calls against Gemini API rate limits and transient failures.

What changed:

  • Exponential backoff with retry on failed Gemini calls
  • Model fallback chain across free-tier models: when a model hits its limit, the system switches to the next available one
  • Sticky + circular fallback logic to avoid wasting retries on already-exhausted models at every row
  • Row-level error tracking for better debugging when a call fails

Contributor: @willsf2021 (core retry/fallback implementation)

v1.4 add city/location filter | improve AI summ & score pipeline

Choose a tag to compare

@TDK-99 TDK-99 released this 03 Sep 20:03
144468a

Summary

  • Added city-based filtering in job processing pipeline
  • AI summarize now extracts location and city from job posts
  • Location/city passed as input to AI score via Pydantic output models
  • Simplified system prompt by moving output format to Pydantic classes
  • Added handling for empty job results (message or skip)
  • Dirty column cleanup on DataFrame
  • Logging improvements (prints with flush)
  • Location validation layer in main
  • Docs and README updated with multi-country/city config examples
  • Bug fixes: email format, if-city positioning, extra parenthesis

v1.3 fix-improve-feat

Choose a tag to compare

@TDK-99 TDK-99 released this 27 Aug 23:46
ba22fe6
  • Multi-location scraping now concatenates results into a single DataFrame
  • Email refactored to EmailMessage + add_attachment(), fixing attachment failures
  • Various bug fixes (.env parsing, CV path resolution, unused imports cleanup)
  • Added openpyxl to dependencies for xlsx file all job

v1.2 β€” Structured scoring & pipeline stability

Choose a tag to compare

@TDK-99 TDK-99 released this 26 Aug 13:33

Improved AI scoring β€” added overqualified rule in prompt (internship/stage with 2+ yrs experience β†’ score capped at 3), enforced output with Pydantic schema to prevent malformed JSON and score column KeyError.

Bug fixes β€” resolved AI output JSON format error, missing a_summary column, environment variables in workflow not matching Python code.

Pipeline stability β€” added time.sleep between Gemini API calls to respect rate limits, tuned to 7 seconds.

CI/CD β€” customized workflow YAML with correct env mapping, Pydantic dependency added to requirements.

Debug β€” diagnostic prints inside AI scoring to monitor results in GitHub Actions logs.

v1.1 β€” Deploy-ready

Choose a tag to compare

@TDK-99 TDK-99 released this 25 Aug 22:52

SnapplAI is now fork-friendly. This release adds deployment support so anyone can run the pipeline with minimal setup:

  • Dockerfile for containerized execution on any machine
  • GitHub Actions workflow with configurable schedule, manual trigger, and user-editable settings
  • Updated README with setup instructions and three deploy paths (local, Docker, GitHub Actions)
  • Private copy guide for users who want to keep their config hidden

v1 SnapplAI

Choose a tag to compare

@TDK-99 TDK-99 released this 23 Aug 17:01

Stop refreshing LinkedIn. Let AI do it for you.

SnapplAI scrapes fresh job listings, uses Gemini to summarize and score each one against your CV, and delivers only the best matches straight to your inbox β€” so you apply before the crowd even sees the listing.

What's in v1:

  • Automated LinkedIn scraping via python-jobspy
  • AI-powered summarization: extracts title, seniority, skills, salary, modality and 10+ structured fields from raw job descriptions
  • AI-powered scoring: chain-of-thought analysis before score β€” reasoning first, judgment second
  • SMTP email delivery with ranked results and direct apply links
  • Fully configurable: drop your CV, set your filters, run one command

Built with Google GenAI SDK (Gemini), pandas, and zero frameworks. Python orchestrates, AI evaluates.

Get started β†’ https://github.com/TDK-99/SnapplAI