upwork-proposallisted
Install: claude install-skill suxrobGM/jobpilot
# Upwork Proposal Generator
Write a concise, winning Upwork proposal that directly addresses the client's needs. Clients skim proposals on mobile, between meetings — if it takes more than ~30 seconds to read, it's gone. Optimize every line for a fast skim.
## Setup
Follow `../shared/setup.md`. Then `Read` the resume at `data.primaryResumeSourceAbsolutePath` for full context (identity, skills, experience, projects, research).
## Step 1: Resolve the Input
The argument is either a **proposal id** (an integer, when launched from the JobPilot UI) or a raw **job description** (manual use). Detect which:
- **Integer id** → fetch the draft row and use its stored job details as the JD:
```bash
curl -fsS "$JOBPILOT_API/api/upwork/proposals/$ARG"
```
Use `data.jobDescription` as the posting, plus `data.jobTitle` / `data.clientName` / `data.jobUrl` for context. Remember the id — you will `PATCH` the result back to it in Step 7.
- **Anything else** → treat the argument itself as the job description. There is no row yet; you will `POST` a new one in Step 7.
## Step 2: Analyze the JD
Identify: what the client needs built/fixed, required tech and skills, scope and timeline clues, pain points/challenges, and any specific questions the client asks. Pull out one concrete detail unique to _this_ posting — you'll reference it in the hook so the client can tell the proposal isn't a mass send.
## Step 3: Select ONE Matching Case Study
Pick the SINGLE most relevant project from