Upwork Proposal Skill — SkynetLabs Edition
Goal: produce proposal client wants to reply to. Not CV-dump. Not generic. Not "I hope this finds you well."
Inputs
User provides ONE or BOTH of:
- Upwork JD (full job post text)
- Client message (their first DM/reply after invite)
If only JD given → write proposal.
If only client message given → write reply (skip the JD-extraction step, mirror the message instead).
If both → write proposal that anticipates the reply concerns.
If user gives neither, ask: "Paste the JD (or invite message). Anything you already know about the client/budget?"
Workflow
Step 1 — Red-flag scan (skip-or-bid decision)
Before writing, check JD for:
- Payment method not verified → skip if job <$1K
- "Send a sample first" / "do a test task" → free-work scam, skip
- Budget <20% of stated scope ($50 for "build me Uber") → skip
- "Communicate on Telegram/WhatsApp first" → TOS violation + scam pattern, skip
- 0 hires + posted >2 weeks → ghost client, deprioritize
- Spelling/grammar inconsistencies → AI-generated scam, skip
- "NDA before any conversation" → skip
- "Urgent — need today" + no budget listed → panic client, churn risk
- Hire rate <30% with 50+ jobs posted → shopper not buyer
- Vague ("build me an app like Uber") → unscope-able, skip
Output a 1-line verdict before the proposal:
Verdict: BID / BID-WITH-CAUTION / SKIP — reason.
If SKIP, stop. Do not draft.
Step 2 — Extract from JD
Pull these 8 signals (mentally, not in output):
- Stated problem — what they typed
- Hidden problem — underneath (e.g., "need fast site" = previous dev ghosted)
- Tech stack constraints — named tools = non-negotiable
- Decision-maker tells — "we / my team / founder / agency"
- Budget signal — range, "open", or absent
- Timeline urgency — "ASAP", "no rush", date-anchored
- Past-pain phrases — "last freelancer", "tried before", "didn't work"
- Success metric — revenue / speed / launch / compliance
Reflect 2 of these in the opener. Never all 8 (parrot territory).
Step 3 — Pick the proof point (Profile→Proposal bridge)
From your real builds, weave ONE per plan-bullet. Rotate from this bank:
| Niche |
Proof point |
Live URL / receipt |
| WordPress |
A custom companion plugin, HMAC+replay auth, kills ZIP uploads |
your-personal-site.com |
| n8n |
50+ flows shipped, AEO content engine, LinkedIn auto-post, FB clone engine |
example.com |
| WhatsApp bot |
A real-estate client, €850 / 5-day MVP |
(ask for client perm before naming) |
| Healthcare site |
A colon & rectal surgeon pre-launch |
example.vercel.app |
| Wellness funnel |
6-page editorial WP, Upwork wellness brief |
wellness-funnel-demo.vercel.app |
| Clinic site |
A UK clinical lead nurse |
(private — describe shape, not name) |
| AEO/SEO |
CiteLift / aeo-audit-tool 5-API stack |
citelift.app (in build) |
| Local-services |
A home-services NYC quote-funnel |
(private — case study OK) |
| Demo-first habit |
Builds free demo before pitch |
shows in pattern, not bullet |
Rule: ONE proof per bullet, woven, not stacked. Live URL > screenshot > claim. Never list >2 URLs in proposal — clients click 1.
Step 4 — Decide: Loom and/or speculative micro-deliverable
Loom worth it when: job ≥$1K, scope is concrete, client has ≥1 prior hire. 60–90 sec, screen-record on their site/brief, give 3 specific recommendations.
Speculative demo worth it when:
- job ≥$500
- scope concrete (a site, a flow, a funnel)
- client payment-verified
- you can ship demo in <2 hrs
Neither when: vague JD, $50 budgets, "send samples first" requests (free-work scam), 0-hire ghost clients.
If recommended, say so in Meta block (after proposal). Don't actually build the demo until user confirms.
Step 5 — Draft proposal (120–180 words)
Skeleton:
- Hook (2 lines, ≤25 words line 1) — mirrors job, never starts with "I"
- 3-bullet plan — each bullet = action + "Done = ..." outcome + woven proof
- 1 proof artifact — inline link, not "see portfolio at end"
- 2-3 sharp questions — micro-demo of expertise (see Q-bank below)
- Price anchor — concrete number + scope + timeline
- Presumptive CTA — choice-based ("two ways to start: A or B"), signed first name only
Hook templates (pick the fit)
- Mirror + claim: "[Specific JD pain] is almost always [diagnosis] — fixable in [timeline]."
- Diagnostic hook: "Your post mentions [tool A] AND [tool B] — order matters here, and most builds get it backwards."
- Pattern-match flex: "Just shipped a near-identical [thing] last week ([client/context], [scope+price+timeline])."
- Specific compliment: "Your brief is already 80% spec'd — rare. Only gap I see is [X]."
Banned openers: "I hope this finds you well", "I am the perfect fit", "I have X years experience", "Dear Hiring Manager", "I came across your job post".
Question bank (pick 2-3, never lazy)
Lazy (banned): "What's your budget?" "When do you need this?" "What's the goal?"
Sharp:
- "Is the [WhatsApp bot / chat flow] routing to a human after qualification, or fully autonomous?"
- "n8n self-hosted or cloud? (Changes credentials approach.)"
- "Existing GA4 + Search Console access, or do we set up tracking from zero?"
- "Shopify theme — Dawn-based or custom/legacy? (Affects upgrade path.)"
- "When you say 'AI integration' — Claude/GPT API direct, or via Make/n8n wrapper?"
- "WordPress — managed host (WP Engine/Kinsta) or shared (BanaHosting/Hostinger)? Affects deploy method."
- "Is the success metric leads, bookings, or revenue? Build sequencing changes."
Pricing language (anchor, never apologize)
- Anchor: "$2,500 fixed for the scope you described — [scope items], [revisions], [timeline]. Done = [observable artifact]."
- Tiered (high-ticket): "Three ways to start: (A) $400 discovery sprint — audit + spec + clickable wireframe. (B) $1,800 build — implements A. (C) $3,500 build + 30 days post-launch support."
- "What's your budget?" jobs: "Comparable builds I've shipped run $1,200–$3,000 depending on [variable]. Happy to scope to either end once I know [Q1, Q2]."
- Hourly defense: "$65/hr, capped at 25 hrs for this milestone — over is on me."
- Race-to-bottom defense (last resort): "Not the cheapest bid you'll get — the one who's already shipped 3 of these. If lowest price is the brief, no hard feelings."
Closing CTA — presumptive close
Banned: "Looking forward to hearing from you", "Let me know if interested", "Hope to chat soon", "Best regards / SkynetLabs Team."
Alive:
- "Two ways to start: 15-min call this week, or I send a 2-slide plan tomorrow — your pick. — [Your Name]"
- "Want the demo URL? Reply 'yes' and it's in your inbox in an hour."
- "If [Q1] is yes, discovery doc to you tomorrow. — [Your Name]"
- "Worth a 10-min call Thursday? I'll come with the wireframe pre-built."
Step 6 — Output format
Always output in this structure:
═══════════════════════════════════════
VERDICT: <BID / BID-WITH-CAUTION / SKIP>
Reason: <one line>
═══════════════════════════════════════
PROPOSAL (paste-ready):
---
<the proposal — 120-180 words>
---
META:
- Word count: <n>
- Connects: <est cost> | Boost: <YES if 9/10 fit + verified + ≥$1K else NO>
- Loom: <YES + what to show / NO>
- Speculative demo: <YES + what to ship / NO>
- Red flags found: <list or "none">
- Anticipated client objections: <2-3>
- If they reply "what's your timeline / when can you start": <prepared answer>
═══════════════════════════════════════
Reply mode (client already messaged back)
If user pastes a client reply, switch to reply mode:
- Mirror their last message in line 1 (quote a phrase or restate their concern)
- Answer ONE concern fully, not all of them (avoid wall-of-text)
- Always end with ONE forward-motion question
- Length: 60–120 words, plain text, no bullets unless they used bullets
- Match their formality level (formal client → formal you; casual → casual)
Hard rules
- Never start a proposal with "I"
- Never write more than 200 words
- Never list more than 2 URLs
- Never use "Looking forward to hearing from you"
- Never quote a price as a range without the upper-bound logic ("$X–$Y depending on Z")
- Never offer free trial week / first task free / money-back guarantee
- Never lie about a build (no fake metrics, no invented clients) — see feedback-no-fake-claims
- If naming a real client — only first names or shape ("a real-estate developer", "a UK clinical nurse"), never full client identifiers without permission
Quality checklist (run before delivering)
Connects economics (for Boost decision)
- $0.15/Connect. Standard bid = 6C ($0.90). Competitive = 10–16C.
- Plus plan: $19.99/mo, 100 Connects. Worth past ~50 bids/mo.
- Boost only when ALL true: 9/10 fit, client payment-verified, hire rate >50%, job ≥$1K, <20 proposals already.
- Healthy reply rate: 20–35%. Below 15% = hook or targeting wrong, not volume.
When to invoke
User says any of:
- "write upwork proposal" / "upwork bid" / "draft a proposal for this Upwork job"
- "/upwork-proposal"
- pastes an Upwork JD
- "client just messaged back, what do I say"
- "help me reply to this Upwork client"
When NOT to invoke
- Generic cover letter requests (LinkedIn, email outreach, RFP) — different game
- Existing client comms inside an active Upwork contract — that's not a proposal
- Fiverr gig descriptions — different platform mechanics
Reference: Full research synthesis in playbook.md (loaded only if user asks "why" or wants deeper teardown).
1---2name: upwork-proposal3description: Win Upwork proposals. Given a job description (and optionally the client's first reply message), produce a 120-180 word proposal that mirrors the JD, anchors price, weaves real proof, asks 2-3 sharp questions, and closes with a presumptive CTA. Also flags red flags, recommends Connects/boost decision, and suggests Loom or speculative micro-deliverable when ROI fits. Tuned for SkynetLabs: WordPress, n8n, AI integrations, AEO/SEO, Shopify, WhatsApp bots, healthcare, wellness funnels. Trigger when user says: "write upwork proposal", "upwork bid", "/upwork-proposal", pastes an Upwork JD, or asks to draft a proposal/cover letter for a freelance brief.4license: MIT5---67# Upwork Proposal Skill — SkynetLabs Edition89Goal: produce proposal client wants to reply to. Not CV-dump. Not generic. Not "I hope this finds you well."1011## Inputs1213User provides ONE or BOTH of:14151. **Upwork JD** (full job post text)162. **Client message** (their first DM/reply after invite)1718If only JD given → write proposal.19If only client message given → write reply (skip the JD-extraction step, mirror the message instead).20If both → write proposal that anticipates the reply concerns.2122If user gives neither, ask: "Paste the JD (or invite message). Anything you already know about the client/budget?"2324## Workflow2526### Step 1 — Red-flag scan (skip-or-bid decision)2728Before writing, check JD for:2930- Payment method **not verified** → skip if job <$1K31- "Send a sample first" / "do a test task" → free-work scam, skip32- Budget <20% of stated scope ($50 for "build me Uber") → skip33- "Communicate on Telegram/WhatsApp first" → TOS violation + scam pattern, skip34- 0 hires + posted >2 weeks → ghost client, deprioritize35- Spelling/grammar inconsistencies → AI-generated scam, skip36- "NDA before any conversation" → skip37- "Urgent — need today" + no budget listed → panic client, churn risk38- Hire rate <30% with 50+ jobs posted → shopper not buyer39- Vague ("build me an app like Uber") → unscope-able, skip4041**Output a 1-line verdict before the proposal:**42`Verdict: BID / BID-WITH-CAUTION / SKIP — reason.`4344If SKIP, stop. Do not draft.4546### Step 2 — Extract from JD4748Pull these 8 signals (mentally, not in output):49501. **Stated problem** — what they typed512. **Hidden problem** — underneath (e.g., "need fast site" = previous dev ghosted)523. **Tech stack constraints** — named tools = non-negotiable534. **Decision-maker tells** — "we / my team / founder / agency"545. **Budget signal** — range, "open", or absent556. **Timeline urgency** — "ASAP", "no rush", date-anchored567. **Past-pain phrases** — "last freelancer", "tried before", "didn't work"578. **Success metric** — revenue / speed / launch / compliance5859Reflect **2 of these** in the opener. Never all 8 (parrot territory).6061### Step 3 — Pick the proof point (Profile→Proposal bridge)6263From your real builds, weave ONE per plan-bullet. Rotate from this bank:6465| Niche | Proof point | Live URL / receipt |66| ---------------- | -------------------------------------------------------------------------- | ------------------------------------ |67| WordPress | A custom companion plugin, HMAC+replay auth, kills ZIP uploads | your-personal-site.com |68| n8n | 50+ flows shipped, AEO content engine, LinkedIn auto-post, FB clone engine | example.com |69| WhatsApp bot | A real-estate client, €850 / 5-day MVP | (ask for client perm before naming) |70| Healthcare site | A colon & rectal surgeon pre-launch | example.vercel.app |71| Wellness funnel | 6-page editorial WP, Upwork wellness brief | wellness-funnel-demo.vercel.app |72| Clinic site | A UK clinical lead nurse | (private — describe shape, not name) |73| AEO/SEO | CiteLift / aeo-audit-tool 5-API stack | citelift.app (in build) |74| Local-services | A home-services NYC quote-funnel | (private — case study OK) |75| Demo-first habit | Builds free demo before pitch | shows in pattern, not bullet |7677**Rule:** ONE proof per bullet, woven, not stacked. Live URL > screenshot > claim. Never list >2 URLs in proposal — clients click 1.7879### Step 4 — Decide: Loom and/or speculative micro-deliverable8081**Loom worth it when:** job ≥$1K, scope is concrete, client has ≥1 prior hire. 60–90 sec, screen-record on **their** site/brief, give 3 specific recommendations.8283**Speculative demo worth it when:**8485- job ≥$50086- scope concrete (a site, a flow, a funnel)87- client payment-verified88- you can ship demo in <2 hrs8990**Neither when:** vague JD, $50 budgets, "send samples first" requests (free-work scam), 0-hire ghost clients.9192If recommended, say so in **Meta** block (after proposal). Don't actually build the demo until user confirms.9394### Step 5 — Draft proposal (120–180 words)9596Skeleton:97981. **Hook** (2 lines, ≤25 words line 1) — mirrors job, never starts with "I"992. **3-bullet plan** — each bullet = action + "Done = ..." outcome + woven proof1003. **1 proof artifact** — inline link, not "see portfolio at end"1014. **2-3 sharp questions** — micro-demo of expertise (see Q-bank below)1025. **Price anchor** — concrete number + scope + timeline1036. **Presumptive CTA** — choice-based ("two ways to start: A or B"), signed first name only104105### Hook templates (pick the fit)106107- **Mirror + claim:** "[Specific JD pain] is almost always [diagnosis] — fixable in [timeline]."108- **Diagnostic hook:** "Your post mentions [tool A] AND [tool B] — order matters here, and most builds get it backwards."109- **Pattern-match flex:** "Just shipped a near-identical [thing] last week ([client/context], [scope+price+timeline])."110- **Specific compliment:** "Your brief is already 80% spec'd — rare. Only gap I see is [X]."111112**Banned openers:** "I hope this finds you well", "I am the perfect fit", "I have X years experience", "Dear Hiring Manager", "I came across your job post".113114### Question bank (pick 2-3, never lazy)115116**Lazy (banned):** "What's your budget?" "When do you need this?" "What's the goal?"117118**Sharp:**119120- "Is the [WhatsApp bot / chat flow] routing to a human after qualification, or fully autonomous?"121- "n8n self-hosted or cloud? (Changes credentials approach.)"122- "Existing GA4 + Search Console access, or do we set up tracking from zero?"123- "Shopify theme — Dawn-based or custom/legacy? (Affects upgrade path.)"124- "When you say 'AI integration' — Claude/GPT API direct, or via Make/n8n wrapper?"125- "WordPress — managed host (WP Engine/Kinsta) or shared (BanaHosting/Hostinger)? Affects deploy method."126- "Is the success metric leads, bookings, or revenue? Build sequencing changes."127128### Pricing language (anchor, never apologize)129130- **Anchor:** "$2,500 fixed for the scope you described — [scope items], [revisions], [timeline]. Done = [observable artifact]."131- **Tiered (high-ticket):** "Three ways to start: (A) $400 discovery sprint — audit + spec + clickable wireframe. (B) $1,800 build — implements A. (C) $3,500 build + 30 days post-launch support."132- **"What's your budget?" jobs:** "Comparable builds I've shipped run $1,200–$3,000 depending on [variable]. Happy to scope to either end once I know [Q1, Q2]."133- **Hourly defense:** "$65/hr, capped at 25 hrs for this milestone — over is on me."134- **Race-to-bottom defense (last resort):** "Not the cheapest bid you'll get — the one who's already shipped 3 of these. If lowest price is the brief, no hard feelings."135136### Closing CTA — presumptive close137138**Banned:** "Looking forward to hearing from you", "Let me know if interested", "Hope to chat soon", "Best regards / SkynetLabs Team."139140**Alive:**141142- "Two ways to start: 15-min call this week, or I send a 2-slide plan tomorrow — your pick. — [Your Name]"143- "Want the demo URL? Reply 'yes' and it's in your inbox in an hour."144- "If [Q1] is yes, discovery doc to you tomorrow. — [Your Name]"145- "Worth a 10-min call Thursday? I'll come with the wireframe pre-built."146147### Step 6 — Output format148149Always output in this structure:150151```152═══════════════════════════════════════153VERDICT: <BID / BID-WITH-CAUTION / SKIP>154Reason: <one line>155═══════════════════════════════════════156157PROPOSAL (paste-ready):158---159<the proposal — 120-180 words>160---161162META:163- Word count: <n>164- Connects: <est cost> | Boost: <YES if 9/10 fit + verified + ≥$1K else NO>165- Loom: <YES + what to show / NO>166- Speculative demo: <YES + what to ship / NO>167- Red flags found: <list or "none">168- Anticipated client objections: <2-3>169- If they reply "what's your timeline / when can you start": <prepared answer>170═══════════════════════════════════════171```172173## Reply mode (client already messaged back)174175If user pastes a client reply, switch to **reply mode**:176177- Mirror their last message in line 1 (quote a phrase or restate their concern)178- Answer ONE concern fully, not all of them (avoid wall-of-text)179- Always end with ONE forward-motion question180- Length: 60–120 words, plain text, no bullets unless they used bullets181- Match their formality level (formal client → formal you; casual → casual)182183## Hard rules184185- Never start a proposal with "I"186- Never write more than 200 words187- Never list more than 2 URLs188- Never use "Looking forward to hearing from you"189- Never quote a price as a range without the upper-bound logic ("$X–$Y depending on Z")190- Never offer free trial week / first task free / money-back guarantee191- Never lie about a build (no fake metrics, no invented clients) — see [feedback-no-fake-claims](../../projects/C--Users-info/memory/feedback-no-fake-claims.md)192- If naming a real client — only first names or shape ("a real-estate developer", "a UK clinical nurse"), never full client identifiers without permission193194## Quality checklist (run before delivering)195196- [ ] Opener doesn't start with "I"197- [ ] Opener mirrors ≥1 specific JD detail (not just rephrases JD)198- [ ] 3 plan bullets, each with "Done = ..." or proof link199- [ ] Concrete price stated200- [ ] 2-3 sharp questions, no lazy ones201- [ ] CTA is presumptive, not "looking forward"202- [ ] Word count 120-180203- [ ] Signed "— [Your Name]" not "Best, SkynetLabs Team"204- [ ] No fake claims / invented metrics205- [ ] Loom + spec-demo decisions stated206207## Connects economics (for Boost decision)208209- $0.15/Connect. Standard bid = 6C ($0.90). Competitive = 10–16C.210- Plus plan: $19.99/mo, 100 Connects. Worth past ~50 bids/mo.211- **Boost only when ALL true:** 9/10 fit, client payment-verified, hire rate >50%, job ≥$1K, <20 proposals already.212- Healthy reply rate: 20–35%. Below 15% = hook or targeting wrong, not volume.213214## When to invoke215216User says any of:217218- "write upwork proposal" / "upwork bid" / "draft a proposal for this Upwork job"219- "/upwork-proposal"220- pastes an Upwork JD221- "client just messaged back, what do I say"222- "help me reply to this Upwork client"223224## When NOT to invoke225226- Generic cover letter requests (LinkedIn, email outreach, RFP) — different game227- Existing client comms inside an active Upwork contract — that's not a proposal228- Fiverr gig descriptions — different platform mechanics229230---231232**Reference:** Full research synthesis in `playbook.md` (loaded only if user asks "why" or wants deeper teardown).