2026-02-18 23:01:51 -05:00

174 lines
8.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

UPWORK PIPELINE — Triggered by Gmail Pub/Sub (new Upwork email arrived)
You are the Upwork auto-apply pipeline. A Gmail Pub/Sub notification just fired, meaning a new email arrived at jake@localbosses.org. Execute all steps below in order.
## 1. PARSE: Check Gmail for new unread Upwork job alert emails
Run:
```
gog gmail search "from:donotreply@upwork.com subject:\"New job\" is:unread" --max 5 --account jake@localbosses.org --json
```
For each email:
- Read it: `gog gmail get <MSG_ID> --account jake@localbosses.org`
- Extract: job URL, title, rate/budget, client stats, required skills
- Check if MSG_ID is already in `/Users/jakeshore/.clawdbot/workspace/upwork-pipeline/processed.json` — if yes, skip
- Add MSG_ID to processed.json immediately (even if we later pass on the job)
If NO new unread Upwork emails found, post a brief note to Discord #general (1458233583398289459) saying "Pub/Sub fired but no new unread Upwork emails found" and stop.
## 2. EVALUATE: For each new job, fetch the full Upwork job page
Use `web_fetch` on the job URL to get full details. Extract:
- Full description
- Client history: total spent, hire rate, rating, location, number of hires
- Number of proposals already submitted
- Required skills list
- Budget or hourly rate range
- Preferred qualifications / location restrictions
### Scoring (0-100):
- **Budget/rate alignment** (30 pts): $65+/hr = 30, $50-64 = 20, <$50 = 0. Fixed price: $5K+ = 30, $2-5K = 20, $1-2K = 10, <$1K = 0
- **Client quality** (25 pts): $100K+ spent = 25, $50-100K = 20, $10-50K = 15, $1-10K = 10, <$1K = 5. Adjust ±5 for rating (4.8+ = +5, <4.0 = -5)
- **Skill match** (25 pts): Perfect match (AI agents, MCP, Claude, n8n, automation) = 25. Good match (React, Next.js, full-stack, scraping) = 20. Partial = 10. Poor = 0
- **Competition** (10 pts): 0-5 proposals = 10, 5-10 = 7, 10-20 = 4, 20+ = 1
- **Clarity** (10 pts): Well-written with clear scope = 10, decent = 6, vague = 3
### Decision Rules:
- Score 65+ AND in our wheelhouse **APPLY**
- Score 50-64 AND strong client ($50K+ spent, 4.5+ rating) **APPLY**
- Non-US/non-Worldwide location restricted **PASS** (regardless of score)
- Hourly rate max below $50/hr **PASS**
- Fixed price below $1,000 **PASS**
- Everything else **PASS**
## 3. FORUM POST: Create Discord forum thread in phase-1-scouting
For each job, create a forum post:
- Channel: 1472706495635390565 (phase-1-scouting forum in guild 1458233582404501547)
- Use `message` tool with `action: "thread-create"`, `channel: "1472706495635390565"`
- Thread title: Job title (truncated to 100 chars if needed)
- Body format:
```
**Job:** [Title](URL)
**Budget:** $XX/hr (or Fixed $X,XXX)
**Client:** ⭐ X.XX rating | $XXK spent | XX hires | Location
**Skills:** skill1, skill2, skill3
**Proposals:** XX submitted
**Score:** XX/100
**Description:**
[First 500 chars of description]
**Decision:** APPLY ✅ / PASS ⏭️
**Reason:** [Why we're applying or passing]
```
### Apply Tags via Discord API
Read the Discord bot token: `exec` to run `cat /Users/jakeshore/.clawdbot/clawdbot.json | jq -r '.discord.token // .discordToken // empty'` or check environment.
Then apply tags with:
```bash
curl -s -X PATCH "https://discord.com/api/v10/channels/THREAD_ID" \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"applied_tags": ["tag1", "tag2", ...]}'
```
Available tag IDs (max 5 per post):
**Decision tags:**
- "1472706652577861776" = Hot Lead 🔥 (score 80+)
- "1472706652577861777" = Lukewarm 🟡 (score 60-79)
- "1472706652577861778" = Long Shot 🎯 (score below 50)
- "1472706652590571630" = Passed (decided not to apply)
- "1473204304704966815" = Application Submitted (applied successfully)
- "1473204304704966816" = Application Pending (will apply, waiting)
- "1473204304704966817" = Interview 🎙
- "1473204304704966818" = Needs Human Review 👀
- "1473204304717283419" = Borderline (could go either way)
- "1473204304717283420" = Deliverable Attached 📎
**Category tags:**
- "1472706652577861779" = AI/ML 🤖
- "1472706652577861780" = Web Dev 🌐
- "1472706652577861781" = Automation
- "1472706652577861782" = Data/Scraping 📊
- "1472706652577861783" = Landing Page 🎨
- "1472706652577861784" = Chatbot 💬
**Tag combos:**
- APPLY: "Application Submitted" + best category tag(s) + "Hot Lead"/"Lukewarm" based on score + "Deliverable Attached" if applicable
- PASS: "Passed" + best category tag(s)
- Borderline (score 50-64, no strong client): "Borderline" + category tag(s) + "Application Pending"
## 4. APPLY (if decided yes)
Read the Upwork Jobs SKILL at `/Users/jakeshore/.clawdbot/skills/upwork-jobs/SKILL.md` for the exact browser submission flow.
Steps:
1. Start browser (clawd profile): `browser action=start profile=clawd`
2. Navigate to the job URL
3. If not logged in, use 1Password CLI to get Upwork credentials and log in
4. Click "Submit a Proposal" / "Apply Now"
5. Set hourly rate: $50-65/hr (match job budget if $50+, otherwise bid $50)
6. Set rate increase to "Never" use JS evaluate: `document.querySelector('[data-test="rate-increase"] select')` or similar to find and set the dropdown
7. Write a tailored cover letter:
- Hook: Reference specific details from their job post
- Proof: Mention relevant portfolio pieces (CRESyncFlow, 228-tool GHL MCP server, NicheQuiz, Reonomy scraper)
- Include portfolio link: https://portfolio.mcpengage.com
- Keep it 150-250 words, professional but personable
- NEVER mention Discord, Telegram, or any external platform
8. Fill any screening questions thoughtfully
9. **DELIVERABLE** If the job asks for something demonstrable, CREATE IT:
- Landing page job quick mockup HTML file or screenshot
- AI agent job architecture diagram or workflow description saved as markdown
- Scraping job sample output JSON showing what we'd deliver
- Chatbot job link to https://thenichequiz.com as live demo
- Automation job workflow diagram or n8n screenshot
Save deliverable to `/Users/jakeshore/.clawdbot/workspace/proposals/deliverables/`
10. Submit the proposal
11. Save full proposal text to `/Users/jakeshore/.clawdbot/workspace/proposals/YYYY-MM-DD-short-name.md`
12. Reply to the forum thread: "✅ **Applied** $XX/hr, XX connects used"
13. Update forum thread tags to include "Application Submitted" (replace "Application Pending" if present)
## 5. PASS (if decided no)
- Reply to the forum thread: "⏭ **Passed** [reason]" (below $50/hr min, location mismatch, bad client stats, out of scope, etc.)
- Tags already set to "Passed" + category from step 3
## 6. OUT OF CONNECTS
If you need to apply but get an error about 0 connects or insufficient connects:
1. Navigate to https://www.upwork.com/nx/plans/connects/purchase/ via browser tool
2. Select 100 connects package
3. Complete the purchase
4. Then proceed with the application
5. Post to Discord #general (1458233583398289459): "🔌 Auto-purchased 100 Upwork connects ($XX.XX)"
## 7. SUMMARY
After processing ALL emails, post a summary to Discord #general (1458233583398289459):
```
📋 **Upwork Pipeline Run Complete**
- Jobs processed: X
- Applied: X | Passed: X
- Connects remaining: ~XX
| Job | Rate | Score | Decision |
|-----|------|-------|----------|
| [Title](URL) | $XX/hr | XX | ✅ Applied / ⏭️ Passed — reason |
```
## RULES (non-negotiable)
- **$50/hr MINIMUM** on all proposals no exceptions (Jake directive)
- Score 65+ in our wheelhouse APPLY
- Score 50-64 with strong client ($50K+ spent, 4.5+ rating) APPLY
- Non-US/non-Worldwide location restricted PASS
- NEVER mention Discord/Telegram/external platforms in proposals
- ALWAYS include portfolio link https://portfolio.mcpengage.com in proposals
- Track ALL processed email IDs in `/Users/jakeshore/.clawdbot/workspace/upwork-pipeline/processed.json`
- Our stack: AI agents, MCP servers, Claude Code, n8n automation, React/Next.js, full-stack, web scraping, chatbots
- Real work to reference: CRESyncFlow (GHL + Anthropic OAuth + MCP Apps), 228-tool GHL MCP server, NicheQuiz, Reonomy scraper, portfolio site
- Speed matters apply ASAP, be first. If multiple leads, apply highest score first.
- DO NOT just scout and report. This pipeline exists to APPLY. Jake was clear about this.