name: upwork-proposal
version: 1.0.0
description: |
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.
license: MIT
compatibility: claude-code
allowed-tools:
- Read
- Write
- Edit
- Grep
- Glob
- WebFetch
- AskUserQuestion
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."
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.
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."
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)
- [ ] Opener doesn't start with "I"
- [ ] Opener mirrors ≥1 specific JD detail (not just rephrases JD)
- [ ] 3 plan bullets, each with "Done = ..." or proof link
- [ ] Concrete price stated
- [ ] 2-3 sharp questions, no lazy ones
- [ ] CTA is presumptive, not "looking forward"
- [ ] Word count 120-180
- [ ] Signed "— [Your Name]" not "Best, SkynetLabs Team"
- [ ] No fake claims / invented metrics
- [ ] Loom + spec-demo decisions stated
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).