Pick a job to read its draft.
Ready to send
Find jobs with custom options
"Check feed now" reads your default Upwork feed. Keyword searches only run when you start one here.
Recent runs
| # | Started | Trigger | Result | Found | New | Filtered | Drafted | Waiting for AI |
|---|
Pick an entry to see its details, such as the exact prompt sent to the AI or its reply.
AI usage and cost
Cost per day
By model
| Model | Calls | Input tokens | Output tokens | Total tokens | Avg reply | Cost |
|---|
Every call
| When | Job | For | Model | Result | Input | Output | Total | Time | Cost |
|---|
Emails
Why emails failed
| Reason | Times | Last time |
|---|
By recipient
| Address | Sent | Failed | Last sent |
|---|
Every email
| When | Job | Type | To | Result | Reason / Mailjet ID | Time |
|---|
Upwork access
This app only reads jobs. It can't submit proposals, send messages or change anything on your Upwork account.
AI providers
Drafts are written by DeepSeek: deepseek-v4-pro, with deepseek-flash as the backup if pro is busy. The key is DEEPSEEK_API_KEY in .env; models live in config/ai-providers.json.
| # | Provider and model | Status | Last 24 h | Last problem |
|---|
Email alerts
Every new job that gets a draft is sent in its own email: title, budget, applicants, client, full description, the AI draft and the Upwork link. Sent with Mailjet; set MAILJET_API_KEY, MAILJET_SECRET_KEY, MAILJET_FROM_EMAIL (a sender verified in Mailjet) and NOTIFY_EMAILS (one address, or several separated by commas) in .env, then restart.
Portfolio
Layout and colors
Pick a palette template. Each card shows how the dashboard looks in it.