upwork-proposal

Solid

Write a short, targeted Upwork proposal from a job description and the user's resume, humanized for natural tone.

AI & Automation 67 stars 17 forks Updated yesterday MIT

Install

View on GitHub

Quality Score: 84/100

Stars 20%
61
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# 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 `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 -H "authorization: Bearer $JOBPILOT_API_TOKEN" "$JOBPILOT_API/api/upwork/proposals/$ARG" ``` Use `jobDescription` as the posting, plus `jobTitle` / `clientName` / `jobUrl` for context. Remember the id - you will `PATCH` the result back to it in Step 7. (A draft launched from an Upwork **search recommendation** already has these fields filled and `source:"search"` - same flow, no extra work.) - **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 re...

Details

Author
suxrobGM
Repository
suxrobGM/jobpilot
Created
5 months ago
Last Updated
yesterday
Language
TypeScript
License
MIT

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category