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. Choose who gets the emails and the sender name in Settings. The Mailjet keys (MAILJET_API_KEY, MAILJET_SECRET_KEY) and the sender address (MAILJET_FROM_EMAIL, verified in Mailjet) stay in the server's env file (.env locally); change them there and restart.
Portfolio
Layout and colors
Pick a palette template. Each card shows how the dashboard looks in it.