Upcraft AI – Smart filters and insights for Upwork
Upcraft AI – Smart filters and insights for Upwork
Upcraft AI is a lightweight Chrome (MV3) extension that upgrades your Upwork job search with a draggable in‑page panel, modern UI, and automatic job enrichment. It works entirely on the client side and only on upwork.com
.
Highlights
- In‑page panel: Opens from the extension icon, no separate popup.
- Draggable + remembers position: Panel and floating icon persist their last location.
- Modern UI: Dark/light aware, glassy surfaces, inline input labels.
- Quick filters:
- Job Posted (minutes)
- Min spend (USD)
- No. of proposals
- Job enrichment (per job): Reviews, Client type (Individual/Company), Member since, Jobs posted, Hire rate, Last viewed, Hires.
Downloads
Latest Release
Note: This section will be automatically updated when using GitHub Actions workflow.
Quick Download Links:
Alternative Download Methods
- From Releases Page: Visit our releases page to download any version
Screenshots
Installation (local / development)
- Clone the repository.
- Open Chromium‑based browser (Chrome or Edge) and go to
chrome://extensions/
. - Enable “Developer mode”.
- Click “Load unpacked” and select the project folder.
- Pin the extension and click the Upcraft AI icon while on an Upwork job search page.
The extension is Manifest V3 and requests minimal permissions:
{
"manifest_version": 3,
"permissions": ["activeTab", "storage", "scripting"],
"host_permissions": ["https://*.upwork.com/*"]
}
Usage
Opening the panel
- Navigate to an Upwork job search page and click the Upcraft AI toolbar icon.
- The panel opens in the page at its last saved position. Use the “Hide” button to collapse into a floating circular icon; click the icon to restore.
Filters
- Max age (hours): Enter hours (e.g., 72). The extension converts hours to days internally for matching.
- Min spend (USD): Minimum client spend shown on the card.
- # of proposals: Uses Upwork’s native proposals query parameter. When set, the URL is updated and the page may reload to apply the filter.
Enrichment
Automatically augments visible cards with:
- Reviews
- Client (Individual or Company)
- Member since
- Jobs posted
- Hire rate
- Last viewed (defaults to “Not Visible”)
- Hires (defaults to 0)
Project structure
upcraft/
├─ background.js # Handles icon click → open panel injection, dynamic icon
├─ content.js # Injected UI, filters, DOM parsing for enrichment
├─ content.css # Modern, theme‑aware styles (panel, chips, buttons, footer)
├─ manifest.json # Chrome MV3 descriptor
├─ icons/ # Toolbar icons (fallbacks; action icon drawn dynamically at runtime)
└─ docs/screenshoots/ # Drop README images here (you create this folder)
Development
There is no build step. Edit files and reload the extension in chrome://extensions/
.
Recommended workflow:
- Keep the DevTools console open to view logs from
content.js
andbackground.js
. - After editing, click “Reload” on the extension card and refresh the Upwork page.
Linting
The codebase aims to avoid linter errors; keep function and variable names descriptive, prefer early returns, and avoid deep nesting.
Privacy and scope
- Runs only on
upwork.com
(host_permissions
scoped accordingly). - No external servers; all parsing happens locally via DOM.
- No tracking or analytics.
Troubleshooting
- Panel doesn’t open when clicking the icon:
- Ensure you are on an
upwork.com
job search page. - Check the Extensions page that the extension is enabled; click “Reload”.
- Ensure you are on an
- Floating icon appears but panel doesn’t restore:
- Click the icon once (don’t drag) to restore. If it “jumps”, it’s handled by normalized drag start logic.
- Enrichment fields missing for some jobs:
- Upwork markup varies. Defaults are shown when data isn’t present on the job page. If a specific selector variant appears, open an issue with the snippet and we’ll add it.
Credits
Developed by Akif Ejaz
- GitHub:
https://github.com/akifejaz
- LinkedIn:
https://www.linkedin.com/in/akifejaz/
Design and implementation improvements by the Upcraft AI project.
License
Licensed under the MIT License. See LICENSE
for full text.