haydermuhib/StackCheck

A project for finding in demand tech skills in the job market and also find jobs...

Python

2

63 commits

updated Oct 18, 2026

See the code

See what people are saying

README

StackCheck Logo

Tech Stack Market Intelligence Engine and Data Analytics Dashboard
Track technology demand, skill pairings, and compensation benchmarks from live job posts.

Python 3.10+ Streamlit License: MIT v0.2.1 Portable Binary


Quick installation

Install the standalone binary without external dependencies:

macOS and Linux

curl -fsSL https://raw.githubusercontent.com/haydermuhib/StackCheck/main/install.sh | bash

Windows (PowerShell)

curl.exe -L "https://github.com/haydermuhib/StackCheck/releases/latest/download/StackCheck-windows-x64.exe" -o StackCheck.exe; .\StackCheck.exe

You can also download StackCheck-windows-x64.exe directly from GitHub Releases. If Windows SmartScreen prompts on first launch, select More info, then Run anyway.


Run the web dashboard:

stackcheck

Overview

StackCheck collects live job listings from HiringCafe, extracts technical requirements with section-based weighting, and visualizes market statistics in a local Streamlit dashboard. It helps engineers and analysts evaluate technology demand, inspect skill combinations, and benchmark compensation across regional job markets.


Web dashboard interface

Executive market overviewGeographic compensation distribution
Executive market overview
Key metric cards, weighted tech skills frequency ranking, and domain category breakdown.
Geographic compensation distribution
Country-level compensation strip scatter plot with horizontal median benchmarks.
Experience and employer analyticsInteractive job explorer
Experience and employer analytics
Seniority skill differentials, compensation tier table, hiring employers, and stack complexity.
Interactive job explorer
Searchable posting records with parsed salaries, normalized tech stacks, and direct apply links.

Core capabilities

CapabilityDescription
Live job ingestionQuery by keyword, location (Pakistan, United States, United Kingdom, Germany, India, Remote), workplace mode (Remote, Hybrid, Onsite), experience level, and result limit.
Data cleaning and deduplicationUses SHA-256 fingerprinting to remove duplicate listings across companies, and resolves location typos to canonical country names.
Section-aware priority weightingDifferentiates required skills (1.8x multiplier) from general responsibilities (1.0x to 1.2x) based on where they appear in the post.
Currency normalizationConverts foreign currencies (INR, PHP, EUR, GBP, CAD, PKR) to annual USD benchmarks with daily exchange rates and offline fallback tables.
Statistical chartsDisplays top skill frequencies, co-occurrence heatmaps (such as Python with SQL, or Snowflake with dbt), and compensation spreads.
Interactive job explorerFilterable table with options for experience level, country, and technology tags, with direct application links.
Standalone applicationSelf-contained executable with embedded runtime, local SQLite storage, and in-place GitHub updater.

Comparison with standard job boards

Standard job boards return search cards, but do not calculate aggregate market metrics. StackCheck processes job descriptions into structured analytics:

MetricStandard job boardStackCheck
Skill demand rankingSearch result cards onlyTop technologies ranked by frequency and weighted score
Section weightingTreats all text equallyWeights mandatory qualifications higher than general summaries
Skill pairingsNot availableCorrelation matrices showing tools frequently requested together
Compensation benchmarksUnstandardized numbersCalculated minimum, median, and maximum bands with sample counts
Workplace spreadNot availableCompensation comparisons across remote, hybrid, and onsite listings
Skill breadthNot availableAverage number of technologies required per listing
WorkspacesNot availableProject-scoped searches with historical search runs
Data exportWeb interface onlyLocal SQLite database with exports to CSV, JSON, and Markdown

Scraping design and limits

StackCheck is built to query origin servers responsibly without causing service disruption:

  • Batch data retrieval: StackCheck reads server-rendered payloads containing 60 to 90 complete listings per HTTP request. Gathering 2,000 listings requires roughly 25 to 30 requests.
  • Paced requests: Requests run sequentially with built-in courtesy pauses (0.35 seconds between calls) over a persistent connection.
  • Local computation: Ingested listings save directly to a local SQLite database (~/.stackcheck/stackcheck.db). Skill parsing, salary calculations, and chart generation run entirely on your local machine.
  • Relevance filtering: Tokenized validation checks role titles to keep unrelated jobs from polluting specific searches.

System architecture

┌──────────────────────┐     ┌──────────────────────┐     ┌──────────────────────┐
│  HiringCafe Public   │────▶│    Deduplicator and   │────▶│    Section-Aware     │
│      API Client      │     │  Country Normalizer  │     │   Priority Weighting │
└──────────────────────┘     └──────────────────────┘     └──────────┬───────────┘
                                                                     │
                                                                     ▼
┌──────────────────────┐     ┌──────────────────────┐     ┌──────────────────────┐
│ Export Reports       │◀────│   Streamlit Web UI   │◀────│ Local SQLite Storage │
│ (CSV, JSON, Markdown)│     │ & Matplotlib OOP Ax  │     │ (~/.stackcheck/*.db) │
└──────────────────────┘     └──────────────────────┘     └──────────────────────┘
Component breakdown
  • src/stackcheck/client/hiringcafe.py: Requests payloads with pagination, workplace filters, and retry logic.
  • src/stackcheck/client/normalizer.py: Title categorization, geographic aliases, and duplicate fingerprinting.
  • src/stackcheck/analyzer/rule_extractor.py: Positional regex extractor separating requirements from general text.
  • src/stackcheck/analyzer/metrics.py: Skill co-occurrence matrix, salary distributions, and weighted scoring.
  • src/stackcheck/storage/repository.py: Multi-project SQLite repository managing schema migrations and upserts.
  • src/stackcheck/launcher.py: Desktop launcher with free port selection and browser launch logic.
  • src/stackcheck/updater.py: GitHub Releases update checker with timeout protection.

Methodology

  1. Dataset cleaning: Drops duplicates and spam by generating a title-company-location composite hash.
  2. Category classification: Groups technologies into categories (Languages, BI Tools, Databases, Cloud and DevOps, AI and Machine Learning).
  3. Requirement weighting:
    • First requirement item: 1.8x
    • Second requirement item: 1.5x
    • Third requirement item: 1.3x
    • Day-to-day responsibilities: 1.2x
    • General post text: 1.0x
    • Preferred qualifications: 0.7x
  4. Regional comparisons: Measures how tool adoption varies across countries and regional markets.

Installation options

Option A: 1-line script (Recommended)
# Installs to ~/.local/bin/stackcheck with desktop shortcut and icon
curl -fsSL https://raw.githubusercontent.com/haydermuhib/StackCheck/main/install.sh | bash

# Launch dashboard
stackcheck
Option B: Python source setup
git clone https://github.com/haydermuhib/StackCheck.git
cd StackCheck

python3 -m venv .venv
source .venv/bin/activate

pip install -e .

streamlit run app.py
Option C: Build standalone executable
# Build standalone folder distribution
python build_app.py --onedir

# Or build single-file binary
python build_app.py --onefile

Command line interface

# Launch web dashboard
stackcheck

# Print version
stackcheck -v

# Check status of running dashboard process
stackcheck status

# Verify runtime dependencies
stackcheck check

# Stop running dashboard process
stackcheck stop

# Check for updates and upgrade in-place
stackcheck update

# Query jobs for a role and location
stackcheck search "Data Analyst" --location "United States" --limit 30

# Query remote backend engineering jobs
stackcheck search "Backend Engineer" --workplace remote --limit 50

# Export dataset
stackcheck export --format all

Running tests

Run the unit test suite:

pytest tests/

Quick reference

Command or filePurpose
stackcheckLaunch local web dashboard
stackcheck -vPrint installed version
stackcheck statusCheck server status, process ID, and port
stackcheck checkVerify runtime dependencies
stackcheck stopStop running dashboard process
stackcheck search <query>Query live jobs into local SQLite storage
stackcheck export --format allExport dataset to CSV, JSON, and Markdown
stackcheck updateUpdate binary from GitHub Releases
index.htmlLanding page
CONTRIBUTING.mdContribution guidelines and developer setup
LICENSEMIT License

License

This project is licensed under the MIT License.

haydermuhib/StackCheck

A project for finding in demand tech skills in the job market and also find jobs...

Python

2

63 commits

updated Oct 18, 2026

See the code

See what people are saying

README

StackCheck Logo

Tech Stack Market Intelligence Engine and Data Analytics Dashboard
Track technology demand, skill pairings, and compensation benchmarks from live job posts.

Python 3.10+ Streamlit License: MIT v0.2.1 Portable Binary


Quick installation

Install the standalone binary without external dependencies:

macOS and Linux

curl -fsSL https://raw.githubusercontent.com/haydermuhib/StackCheck/main/install.sh | bash

Windows (PowerShell)

curl.exe -L "https://github.com/haydermuhib/StackCheck/releases/latest/download/StackCheck-windows-x64.exe" -o StackCheck.exe; .\StackCheck.exe

You can also download StackCheck-windows-x64.exe directly from GitHub Releases. If Windows SmartScreen prompts on first launch, select More info, then Run anyway.


Run the web dashboard:

stackcheck

Overview

StackCheck collects live job listings from HiringCafe, extracts technical requirements with section-based weighting, and visualizes market statistics in a local Streamlit dashboard. It helps engineers and analysts evaluate technology demand, inspect skill combinations, and benchmark compensation across regional job markets.


Web dashboard interface

Executive market overviewGeographic compensation distribution
Executive market overview
Key metric cards, weighted tech skills frequency ranking, and domain category breakdown.
Geographic compensation distribution
Country-level compensation strip scatter plot with horizontal median benchmarks.
Experience and employer analyticsInteractive job explorer
Experience and employer analytics
Seniority skill differentials, compensation tier table, hiring employers, and stack complexity.
Interactive job explorer
Searchable posting records with parsed salaries, normalized tech stacks, and direct apply links.

Core capabilities

CapabilityDescription
Live job ingestionQuery by keyword, location (Pakistan, United States, United Kingdom, Germany, India, Remote), workplace mode (Remote, Hybrid, Onsite), experience level, and result limit.
Data cleaning and deduplicationUses SHA-256 fingerprinting to remove duplicate listings across companies, and resolves location typos to canonical country names.
Section-aware priority weightingDifferentiates required skills (1.8x multiplier) from general responsibilities (1.0x to 1.2x) based on where they appear in the post.
Currency normalizationConverts foreign currencies (INR, PHP, EUR, GBP, CAD, PKR) to annual USD benchmarks with daily exchange rates and offline fallback tables.
Statistical chartsDisplays top skill frequencies, co-occurrence heatmaps (such as Python with SQL, or Snowflake with dbt), and compensation spreads.
Interactive job explorerFilterable table with options for experience level, country, and technology tags, with direct application links.
Standalone applicationSelf-contained executable with embedded runtime, local SQLite storage, and in-place GitHub updater.

Comparison with standard job boards

Standard job boards return search cards, but do not calculate aggregate market metrics. StackCheck processes job descriptions into structured analytics:

MetricStandard job boardStackCheck
Skill demand rankingSearch result cards onlyTop technologies ranked by frequency and weighted score
Section weightingTreats all text equallyWeights mandatory qualifications higher than general summaries
Skill pairingsNot availableCorrelation matrices showing tools frequently requested together
Compensation benchmarksUnstandardized numbersCalculated minimum, median, and maximum bands with sample counts
Workplace spreadNot availableCompensation comparisons across remote, hybrid, and onsite listings
Skill breadthNot availableAverage number of technologies required per listing
WorkspacesNot availableProject-scoped searches with historical search runs
Data exportWeb interface onlyLocal SQLite database with exports to CSV, JSON, and Markdown

Scraping design and limits

StackCheck is built to query origin servers responsibly without causing service disruption:

  • Batch data retrieval: StackCheck reads server-rendered payloads containing 60 to 90 complete listings per HTTP request. Gathering 2,000 listings requires roughly 25 to 30 requests.
  • Paced requests: Requests run sequentially with built-in courtesy pauses (0.35 seconds between calls) over a persistent connection.
  • Local computation: Ingested listings save directly to a local SQLite database (~/.stackcheck/stackcheck.db). Skill parsing, salary calculations, and chart generation run entirely on your local machine.
  • Relevance filtering: Tokenized validation checks role titles to keep unrelated jobs from polluting specific searches.

System architecture

┌──────────────────────┐     ┌──────────────────────┐     ┌──────────────────────┐
│  HiringCafe Public   │────▶│    Deduplicator and   │────▶│    Section-Aware     │
│      API Client      │     │  Country Normalizer  │     │   Priority Weighting │
└──────────────────────┘     └──────────────────────┘     └──────────┬───────────┘
                                                                     │
                                                                     ▼
┌──────────────────────┐     ┌──────────────────────┐     ┌──────────────────────┐
│ Export Reports       │◀────│   Streamlit Web UI   │◀────│ Local SQLite Storage │
│ (CSV, JSON, Markdown)│     │ & Matplotlib OOP Ax  │     │ (~/.stackcheck/*.db) │
└──────────────────────┘     └──────────────────────┘     └──────────────────────┘
Component breakdown
  • src/stackcheck/client/hiringcafe.py: Requests payloads with pagination, workplace filters, and retry logic.
  • src/stackcheck/client/normalizer.py: Title categorization, geographic aliases, and duplicate fingerprinting.
  • src/stackcheck/analyzer/rule_extractor.py: Positional regex extractor separating requirements from general text.
  • src/stackcheck/analyzer/metrics.py: Skill co-occurrence matrix, salary distributions, and weighted scoring.
  • src/stackcheck/storage/repository.py: Multi-project SQLite repository managing schema migrations and upserts.
  • src/stackcheck/launcher.py: Desktop launcher with free port selection and browser launch logic.
  • src/stackcheck/updater.py: GitHub Releases update checker with timeout protection.

Methodology

  1. Dataset cleaning: Drops duplicates and spam by generating a title-company-location composite hash.
  2. Category classification: Groups technologies into categories (Languages, BI Tools, Databases, Cloud and DevOps, AI and Machine Learning).
  3. Requirement weighting:
    • First requirement item: 1.8x
    • Second requirement item: 1.5x
    • Third requirement item: 1.3x
    • Day-to-day responsibilities: 1.2x
    • General post text: 1.0x
    • Preferred qualifications: 0.7x
  4. Regional comparisons: Measures how tool adoption varies across countries and regional markets.

Installation options

Option A: 1-line script (Recommended)
# Installs to ~/.local/bin/stackcheck with desktop shortcut and icon
curl -fsSL https://raw.githubusercontent.com/haydermuhib/StackCheck/main/install.sh | bash

# Launch dashboard
stackcheck
Option B: Python source setup
git clone https://github.com/haydermuhib/StackCheck.git
cd StackCheck

python3 -m venv .venv
source .venv/bin/activate

pip install -e .

streamlit run app.py
Option C: Build standalone executable
# Build standalone folder distribution
python build_app.py --onedir

# Or build single-file binary
python build_app.py --onefile

Command line interface

# Launch web dashboard
stackcheck

# Print version
stackcheck -v

# Check status of running dashboard process
stackcheck status

# Verify runtime dependencies
stackcheck check

# Stop running dashboard process
stackcheck stop

# Check for updates and upgrade in-place
stackcheck update

# Query jobs for a role and location
stackcheck search "Data Analyst" --location "United States" --limit 30

# Query remote backend engineering jobs
stackcheck search "Backend Engineer" --workplace remote --limit 50

# Export dataset
stackcheck export --format all

Running tests

Run the unit test suite:

pytest tests/

Quick reference

Command or filePurpose
stackcheckLaunch local web dashboard
stackcheck -vPrint installed version
stackcheck statusCheck server status, process ID, and port
stackcheck checkVerify runtime dependencies
stackcheck stopStop running dashboard process
stackcheck search <query>Query live jobs into local SQLite storage
stackcheck export --format allExport dataset to CSV, JSON, and Markdown
stackcheck updateUpdate binary from GitHub Releases
index.htmlLanding page
CONTRIBUTING.mdContribution guidelines and developer setup
LICENSEMIT License

License

This project is licensed under the MIT License.