Python · JSON data preparation · Browser-based reporting
A prototype for organising job opportunities, comparing them with keyword preferences and tracking application status.
The project combines a Python helper with a React dashboard delivered as a single HTML file. Job data is imported manually; the collection functions are scaffolding for future integrations.
Max's profile · Analytics portfolio
- Structuring job records into a consistent JSON format.
- Adding manual records and checking existing URLs for duplicates.
- Calculating a transparent keyword-match score.
- Filtering opportunities by location, salary, source and status.
- Summarising filtered records and tracking application status in the dashboard.
The score is the percentage of supplied keywords found in the title or description. It is a rule-based match score, not a trained AI model or a probability of suitability.
- Clone or download this repository.
- Open
job_dashboard.htmlin a browser. - Select Import Jobs and paste the contents of
sample_jobs.json. - Enter comma-separated keywords and explore the filters.
- Use the status controls to organise opportunities.
The dashboard loads React, React DOM and Babel from a public CDN, so it needs those resources to be available. It stores dashboard records in browser localStorage; the Python helper uses separate JSON files. There is no automatic synchronisation between them.
Python 3 and requests are required by the current source.
git clone https://github.com/HoangCuongMax/JobSearchMax.git
cd JobSearchMax
python3 -m venv .venvActivate the environment with source .venv/bin/activate on macOS/Linux, or .venv\Scripts\Activate.ps1 in Windows PowerShell. Then:
python -m pip install requests
python job_crawler.pyThe entry point creates the local data directory and runs the scaffold routine. It does not automatically fetch or populate live job listings.
For manual entry, use the helper from a Python session started in the repository folder:
from job_crawler import JobCrawler
crawler = JobCrawler()
crawler.add_manual_job({
"title": "Data Analyst",
"company": "Example organisation",
"location": "Darwin, NT",
"salary": "$80,000 - $100,000",
"url": "https://example.com/jobs/data-analyst",
"platform": "manual",
"description": "Power BI, SQL and Python reporting"
})
print(crawler.export_for_dashboard(["Power BI", "SQL", "Python"]))Paste the exported JSON into the dashboard to include the parsed salary fields and calculated scores.
| File | Purpose |
|---|---|
job_crawler.py |
Record creation, local JSON storage, simple salary parsing and keyword scoring |
job_dashboard.html |
Import, filtering, summaries and application tracking |
sample_jobs.json |
Example records for a demonstration |
sources.json.example |
Example source configuration |
QUICKSTART.txt |
Earlier setup notes; use this README for current scope and limitations |
- Seek and Indeed helpers print suggested search URLs; the custom-URL crawler is a placeholder.
- Scheduling the helper does not turn these placeholders into working ingestion connectors.
- Salary parsing is simple numeric extraction and does not normalise currencies, hourly rates or shorthand such as "100k".
- Keyword scores depend on the supplied terms and do not measure professional suitability.
- Data is stored separately in the browser and local files. Back up records before clearing browser storage.
- Import validation, persistence behaviour and a fully tested end-to-end workflow need further development.
Add schema validation, automated checks for imports and persistence, improved salary normalisation, and a documented permitted ingestion source. Measure the resulting workflow before claiming time savings or collection coverage.