[cron:6dd85dd2-28ce-411f-b2de-8106e314da47 Deal Post - X + Pinterest (every 30 min)] SCHEDULED TASK: Post 1 deal to X and Pinterest using Maya VM twikit/py3-pinterest.

## CRITICAL: Use Maya VM, NOT Fred social-poster
- X: twikit v2.3.3 on Maya VM (`ssh maya@maya`)
- Script: `/home/maya/workspace/scripts/x_twikit_post2.py`
- Cookies: `/home/maya/workspace/x_cookies.json`

## Workflow
1. **Fetch deals with Python (NOT shell pipes with $):**
   ```python3
   import urllib.request, json
   req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest', headers={'User-Agent':'Mozilla/5.0'})
   data = json.loads(urllib.request.urlopen(req, timeout=15).read())
   deals = data if isinstance(data, list) else data.get('deals', [])
   for d in deals[:15]:
       print(f"{d['id']}|{d.get('title','')[:60]}|PRICE:{d.get('price','')}|{d.get('discount_percentage',0)}%")
   ```
2. Check hash: `python3 scripts/posted_db.py check <deal_id> x`
3. If POSTED:YES — SKIP, pick another
4. Pick unposted deal (50%+ off, popular brand, limited time, freebies, under $10)
5. Download share image: `wget -q "https://www.gottahavecoups.com/api/v1/share/image/<deal_id>" -O /tmp/deal_img.jpg`
6. **BUILD TWEET:** Hook + value + 5-8 hashtags + link LAST. KEEP UNDER 280 CHARS.
7. **MANDATORY VALIDATION:** `python3 scripts/validate_tweet.py '<tweet_text>'` — If INVALID, STOP and pick different deal.
8. **POST TO X (Maya VM twikit):**
   ```bash
   ssh maya@maya "cat > /tmp/tweet.txt << 'TWEET'
   <tweet text here>
   TWEET"
   scp /tmp/deal_img.jpg maya@maya:/tmp/deal_img.jpg
   ssh maya@maya "python3 /home/maya/workspace/scripts/x_twikit_post2.py <deal_id> --file /tmp/tweet.txt"
   ```
9. **POST TO PINTEREST (Maya VM py3-pinterest):**
   ```bash
   ssh maya@maya "python3 /home/maya/workspace/scripts/pin_post_v2.py <deal_id> '<title>' '<description>' 1134485031073239531"
   ```
10. Record posts: `python3 scripts/posted_db.py record <deal_id> x <tweet_id> <url>`
11. Log in memory/YYYY-MM-DD.md

## If X cookies expired
Run: `ssh maya@maya "DISPLAY=:0 python3 /home/maya/workspace/scripts/extract_x_cookies.py"`

## Tweet format (STRICT)
- Hook (emoji + deal highlight)
- Product name + price (with $, e.g., "$12.99")
- 5-8 hashtags
- Link LAST: gottahavecoups.com/deal/<id>
- KEEP UNDER 280 CHARS

## NEVER post if validation fails:
- Shell artifacts (/bin/bash, python3 -c)
- Broken prices (.20 instead of $10.20)
- Broken emojis (�)
- > 280 chars
Current time: Friday, February 13th, 2026 — 8:27 AM (UTC)

Return your summary as plain text; it will be delivered automatically. If the task explicitly calls for messaging a specific external recipient, note who/where it should go instead of sending it yourself.


The user wants me to post a deal to X and Pinterest. Let me follow the workflow:

1. First, I need to fetch deals using Python
2. Check if they've been posted
3. Pick an unposted deal
4. Download the share image
5. Build and validate a tweet
6. Post to X and Pinterest

Let me start by fetching the deals.

exec

python3 -c "
import urllib.request, json
req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest', headers={'User-Agent':'Mozilla/5.0'})
data = json.loads(urllib.request.urlopen(req, timeout=15).read())
deals = data if isinstance(data, list) else data.get('deals', [])
for d in deals[:15]:
    print(f\"{d['id']}|{d.get('title','')[:60]}|PRICE:{d.get('price','')}|{d.get('discount_percentage',0)}%\")
"


34051|10.39 | Spektrum 350mAh 2S 7.4V LiPo w/ PH2.0 2pin Power Con|PRICE:10.39|None%
34048|Canal House Cooking Volume N° 5:The Good Life|PRICE:1.99|75%
34050|Life Extension DHEA 15 mg – Ho...en-Free,Non-GMO,100 Capsule|PRICE:5.36|45%
34049|National Tree Company 7.5 ft P...99 Tips,Includes Stand,Gree|PRICE:138.99|51%
34047|OVENTE Electric Warming Tray w...Stainless Steel,Silver FW17|PRICE:18.16|48%
34042|Poolmaster Roll 'N Go Swimming Pool Mattress Float,Blue|PRICE:13.69|46%
34043|Sailing to Capri:A Novel|PRICE:2.99|72%
34041|Anderson Metals - 54048-1006 B...are Tube O.D.x 3/8" Male Pi|PRICE:3.89|62%
34040|Bostitch Office Konnect Cubicl...lls,Set of 2 (KT-RAILHANGER|PRICE:4.5|54%
34045|8-Oz CeraVe Acne Control Cleanser w/ 2% Salicylic Acid $8.75|PRICE:8.75|None%
34044|AC] $25.41:adidas Men’s Own The Game 3.0 Basketball Shoe,Bla|PRICE:25.41|None%
34032|47.70:Under Armour Unisex-Adult Lockdown 7 Basketball Shoe,(|PRICE:47.7|None%
34033|2-lb Jack&Pup Pig Ears Slivers for Dogs $18.89 + Free Shippi|PRICE:18.89|None%
34034|45.70:Adidas Unisex-Adult Break Start Mid Top,Cloud White/Sh|PRICE:45.7|None%
34035|41.70:Adidas X_PLR Path Mens Shoes,Black/Grey/Gum(2024),Size|PRICE:41.7|None%


Good, I have the deals. Now let me check which ones are unposted. I'll start with the best deals:
- 34048: Canal House Cooking Volume - $1.99, 75% off
- 34043: Sailing to Capri - $2.99, 72% off
- 34041: Anderson Metals - $3.89, 62% off
- 34040: Bostitch Konnect - $4.50, 54% off
- 34049: National Tree Company - $138.99, 51% off

Let me check these in order to find an unposted one.

python3 scripts/posted_db.py check 34048 x && python3 scripts/posted_db.py check 34043 x && python3 scripts/posted_db.py check 34041 x && python3 scripts/posted_db.py check 34040 x


POSTED:YES
POSTED:NO
POSTED:NO
POSTED:NO


34048 is posted. Let me check the next ones. 34043 looks good - Sailing to Capri novel at $2.99, 72% off.

**Deal selected:** ID 34043 — Sailing to Capri: A Novel — $2.99 (72% off)

python3 -c "
import urllib.request, json
req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals/34043', headers={'User-Agent':'Mozilla/5.0'})
data = json.loads(urllib.request.urlopen(req, timeout=15).read())
print(f\"Title: {data.get('title','')}\")
print(f\"Price: {data.get('price','')}\")
print(f\"Original: {data.get('original_price','')}\")
print(f\"Discount: {data.get('discount_percentage','')}%\")
print(f\"URL: {data.get('url','')}\")
"

wget -q "https://www.gottahavecoups.com/api/v1/share/image/34043" -O /tmp/deal_img.jpg && echo "Image downloaded"


Title: Sailing to Capri:A Novel
Price: 2.99
Original: 10.78
Discount: 72%
URL:


Image downloaded


Good, I have the deal details. Now let me build a tweet:
- Title: Sailing to Capri: A Novel
- Price: $2.99 (was $10.78)
- Discount: 72%
- Deal URL: https://www.gottahavecoups.com/deal/34043

Let me craft a tweet under 280 chars:
"📚 Escape to Italy! Sailing to Capri novel just $2.99 (was $10.78) — 72% off!

Perfect summer read 🇮🇹⛵

#BookDeals #KindleDeals #Reading #Books #SailingToCapri #BookLovers #DealAlert #Savings

https://www.gottahavecoups.com/deal/34043"

Let me count: that's about 220 chars. Good.

python3 scripts/validate_tweet.py '📚 Escape to Italy! "Sailing to Capri" novel just $2.99 (was $10.78) — 72% off!

Perfect summer read 🇮🇹⛵

#BookDeals #KindleDeals #Reading #Books #SailingToCapri #BookLovers #DealAlert #Savings

https://www.gottahavecoups.com/deal/34043'


VALID


Tweet validated. Now I need to post to X and Pinterest using Maya VM.

Tweet validated. Posting to X and Pinterest via Maya VM...

ssh maya@maya "cat > /tmp/tweet.txt << 'TWEET'
📚 Escape to Italy! "Sailing to Capri" novel just $2.99 (was $10.78) — 72% off!

Perfect summer read 🇮🇹⛵

#BookDeals #KindleDeals #Reading #Books #SailingToCapri #BookLovers #DealAlert #Savings

https://www.gottahavecoups.com/deal/34043
TWEET"


Warning: Permanently added 'maya' (ED25519) to the list of known hosts.


SSH key added. Let me continue with scp and posting.


Good. Now let me post to X and then Pinterest.

ssh maya@maya "python3 /home/maya/workspace/scripts/x_twikit_post2.py 34043 --file /tmp/tweet.txt" 2>&1


Warning: Permanently added 'maya' (ED25519) to the list of known hosts.
Cookies loaded
Authenticated as: @GottaHaveCoups
Image downloaded: /home/maya/workspace/downloads/deal-34043.jpg (72552 bytes)
Uploading image...
Image uploaded, media_id: 2022226205010014208
Posting tweet...
SUCCESS! Tweet ID: 2022226208583561335
URL: https://x.com/GottaHaveCoups/status/2022226208583561335


X post successful! Now let me post to Pinterest.

X post successful! Now posting to Pinterest...

ssh maya@maya "python3 /home/maya/workspace/scripts/pin_post_v2.py 34043 'Sailing to Capri: A Novel - 72% Off!' 'Escape to Italy with this captivating novel! Just \$2.99 (was \$10.78) — perfect for your summer reading list. #BookDeals #Kindle' 1134485031073239531" 2>&1


Warning: Permanently added 'maya' (ED25519) to the list of known hosts.
Loaded 8 cookies
Boards: 200
Found 7 boards (raw type: dict)
Raw keys: ['all_boards', 'boards_shortlist', 'create_suggestions']
  🔥 Today’s Best Deals (id: 1134485031073239531)
  Limited Time Promo Codes (id: 1134485031073239590)
  Gifts Under $50 (id: 1134485031073239588)
  Amazon Deals & Coupons (id: 1134485031073239559)
  Home & Kitchen Savings (id: 1134485031073239570)
Image upload: 200
Image URL: https://i.pinimg.com/previews/pIAwaMXj.jpeg
Pin create: 200
SUCCESS! Pin ID: 1134484962398647695


Pinterest post successful! Now let me record the post in the database and log it.

Both posts successful! Recording to database...

python3 scripts/posted_db.py record 34043 x 2022226208583561335 https://x.com/GottaHaveCoups/status/2022226208583561335


Recorded 34043 for x


write

## Cron Deal Post — 2026-02-13 08:30 AM ET

**Deal Posted:** ID 34043 — Sailing to Capri: A Novel
- **Price:** $2.99 (was $10.78, 72% off)
- **Platforms:** X (Twitter) + Pinterest
- **X Tweet ID:** 2022226208583561335
- **X URL:** https://x.com/GottaHaveCoups/status/2022226208583561335
- **Pinterest Pin ID:** 1134484962398647695
- **Status:** ✅ Both posts successful

**Tweet Text:**
> 📚 Escape to Italy! "Sailing to Capri" novel just $2.99 (was $10.78) — 72% off!
> Perfect summer read 🇮🇹⛵
> #BookDeals #KindleDeals #Reading #Books #SailingToCapri #BookLovers #DealAlert #Savings

---


Successfully wrote 591 bytes to memory/2026-02-13.md


---

## ✅ Deal Posted Successfully

| Platform | Status | Link |
|----------|--------|------|
| **X (Twitter)** | ✅ Posted | [View Tweet](https://x.com/GottaHaveCoups/status/2022226208583561335) |
| **Pinterest** | ✅ Posted | Pin ID: 1134484962398647695 |

**Deal:** Sailing to Capri: A Novel — $2.99 (72% off, was $10.78)

**Next post:** In 30 minutes (cron scheduled)