[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 — 12:27 PM (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 execute a scheduled cron task to post a deal to X (Twitter) and Pinterest. Let me follow the workflow carefully.

First, I need to:
1. Fetch deals from the API
2. Check which ones have been posted already
3. Pick an unposted deal
4. Download the share image
5. Build and validate a tweet
6. Post to X using Maya VM
7. Post to Pinterest using Maya VM
8. Record the posts

Let me start by fetching deals and checking what's already been posted.

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)}%\")"


34143|MrBeast Lab Hyper Fusion Mutat...of Articulation,Collect All|PRICE:11.99|39%
34141|OxiClean Max Force Laundry Sta...Remover Spray Refill,48 fl |PRICE:9.98|38%
34142|Please,Wake Up|PRICE:0.99|66%
34138|VASAGLE,Entryway Storage Benc...droom,Maroon Brown ULSB053K5|PRICE:37.48|50%
34135|10.43*:Champion unisex adult Waist Pack,Black/White Logo,One|PRICE:10.43|None%
34133|Snailed it!Game | Easy to Lea...layers | 20 Mins.| Kids Gift|PRICE:4.29|49%
34130|HPD Half Price Drapes Signatur...ains for Windows,Spirit Gre|PRICE:48.23|38%
34132|Woo'd in Haste (The Taming Series Book 1|PRICE:0.5|89%
34134|International Concepts Shaker Console Table,72-Inch Long,Sol|PRICE:160.0|None%
34128|RiverRidge Catch-All Kids Toy...Decor Toy Organizers and Bin|PRICE:64.47|43%
34129|Luxury Flat Sheet on Amazon El...ce Flat Sheet,Full Size,Gre|PRICE:9.87|41%
34131|Amazon Prime:5 PLUS® 14 Inch Rear Wiper Blade Replacement fo|PRICE:5.99|None%
34121|OLIXIS 3 Tier Utility Rolling...Bathroom & Narrow Places,Gra|PRICE:18.83|36%
34123|49 | The North Face Womens Wander Jogger 2.0 at Amazon|PRICE:49.0|None%
34124|22.19 | Mayfair Cassel Slow Close Toilet Seat,Elongated,Whit|PRICE:22.19|50%


Good, I got the deals. Now let me check which ones have already been posted to X. I'll check the posted_db.py to see the status of these deals.


34143: POSTED:NO
34141: POSTED:NO
34142: POSTED:NO
34138: POSTED:YES
34135: POSTED:NO
34133: POSTED:NO
34132: POSTED:NO
34130: POSTED:NO
34128: POSTED:NO
34134: POSTED:NO


Good, deal 34138 is already posted. Now let me look at the available deals:

- 34143: MrBeast Lab Hyper Fusion Mutant - $11.99, 39% off
- 34141: OxiClean Max Force - $9.98, 38% off
- 34142: "Please, Wake Up" - $0.99, 66% off (book/game?)
- 34135: Champion Waist Pack - $10.43, no discount shown
- 34133: Snailed it! Game - $4.29, 49% off
- 34132: Woo'd in Haste book - $0.50, 89% off
- 34130: HPD Half Price Drapes - $48.23, 38% off
- 34128: RiverRidge Catch-All - $64.47, 43% off
- 34134: International Concepts Shaker Console Table - $160.00, no discount

I should pick a deal that's appealing. The 66% off book at $0.99 is good, the game at $4.49 with 49% off is under $10, and the MrBeast toy could be popular. Let me pick deal 34142 - it's 66% off, under $1, and seems like an interesting item. Or maybe 34133 - the game at $4.29 with 49% off.

Actually, let me pick deal 34142 - "Please, Wake Up" at $0.99 with 66% off. That's a great deal - under $1 with a high discount percentage.

Let me download the image for this deal and build a tweet.

Let me pick deal **34142** - "Please, Wake Up" at $0.99 with 66% off. It's under $1 and has a high discount percentage.

wget -q "https://www.gottahavecoups.com/api/v1/share/image/34142" -O /tmp/deal_img.jpg && ls -la /tmp/deal_img.jpg


-rw-rw-r-- 1 crogers2287 crogers2287 79799 Feb 13 12:27 /tmp/deal_img.jpg


Good, image downloaded. Now I need to build a tweet. The deal is "Please, Wake Up" at $0.99, 66% off. I need to:
- Hook with emoji
- Product name + price
- 5-8 hashtags
- Link LAST
- Under 280 chars

Let me draft:
🔥 66% OFF! "Please, Wake Up" — grab it for just $0.99!

#BookDeals #KindleDeals #AmazonDeals #eBook #BargainHunter #DailyDeals #GottaHaveCoups

gottahavecoups.com/deal/34142

Let me count characters and validate.

Now let me build and validate the tweet:

python3 scripts/validate_tweet.py '🔥 66% OFF! "Please, Wake Up" — grab it for just $0.99!

#BookDeals #KindleDeals #AmazonDeals #eBook #BargainHunter #DailyDeals #GottaHaveCoups

gottahavecoups.com/deal/34142'


VALID


Tweet is valid. Now I need to:
1. Copy the tweet text to Maya VM
2. Copy the image to Maya VM
3. Post to X using twikit
4. Post to Pinterest
5. Record the post

Let me do this step by step.

Tweet validated. Now posting to X via Maya VM:

ssh maya@maya "cat > /tmp/tweet.txt << 'TWEET'
🔥 66% OFF! "Please, Wake Up" — grab it for just $0.99!

#BookDeals #KindleDeals #AmazonDeals #eBook #BargainHunter #DailyDeals #GottaHaveCoups

gottahavecoups.com/deal/34142
TWEET"


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


Good, the tweet file was created on Maya. Now let me copy the image and post.


Now let me post to X using the twikit script on Maya.

ssh maya@maya "python3 /home/maya/workspace/scripts/x_twikit_post2.py 34142 --file /tmp/tweet.txt"


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


X post successful! Tweet ID: 2022286648977879160

Now I need to post to Pinterest. I need the title and description. Let me fetch the deal details first to get a proper title and description.

X posted successfully! Now posting to Pinterest:

python3 -c "
import urllib.request, json
req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals/34142', 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\"Discount: {data.get('discount_percentage',0)}%\")
print(f\"Image: {data.get('image_url','')}\")"


Title: Please,Wake Up
Price: 0.99
Discount: 66%
Image: https://www.gottahavecoups.com/api/v1/deal-images/82d2f25a73b84052.jpg


Good, I have the deal details. Now I'll post to Pinterest using the py3-pinterest script. The board ID is 1134485031073239531.

ssh maya@maya "python3 /home/maya/workspace/scripts/pin_post_v2.py 34142 'Please, Wake Up' '🔥 66% OFF! Grab \"Please, Wake Up\" for just \$0.99. Limited time deal on this Kindle book!' 1134485031073239531"


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/379TxfNj.jpeg
Pin create: 200
SUCCESS! Pin ID: 1134484962398656547


Pinterest post successful! Pin ID: 1134484962398656547

Now I need to record both posts in the database.

Both posts successful! Recording to database:

python3 scripts/posted_db.py record 34142 x 2022286648977879160 "https://x.com/GottaHaveCoups/status/2022286648977879160"


Recorded 34142 for x


Now let me record the Pinterest post as well.

python3 scripts/posted_db.py record 34142 pinterest 1134484962398656547 "https://pinterest.com/pin/1134484962398656547"


Recorded 34142 for pinterest


Great, both posts recorded. Now let me log this in the memory file for today.

write

## 2026-02-13 — GottaHaveCoups Marketing Activity

### 12:27 PM UTC — Deal Posted to X + Pinterest

**Deal:** Please, Wake Up
**Price:** $0.99 (66% off)
**Deal ID:** 34142

**X Post:**
- Tweet ID: 2022286648977879160
- URL: https://x.com/GottaHaveCoups/status/2022286648977879160
- Status: ✅ SUCCESS

**Pinterest Post:**
- Pin ID: 1134484962398656547
- Board: 🔥 Today's Best Deals
- Status: ✅ SUCCESS

**Tweet Content:**
```
🔥 66% OFF! "Please, Wake Up" — grab it for just $0.99!

#BookDeals #KindleDeals #AmazonDeals #eBook #BargainHunter #DailyDeals #GottaHaveCoups

gottahavecoups.com/deal/34142
```

---


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


All done. Let me summarize the results for the cron task.

**Deal Post Complete — Summary**

| Platform | Status | ID | URL |
|----------|--------|-----|-----|
| **X (Twitter)** | ✅ SUCCESS | 2022286648977879160 | https://x.com/GottaHaveCoups/status/2022286648977879160 |
| **Pinterest** | ✅ SUCCESS | 1134484962398656547 | https://pinterest.com/pin/1134484962398656547 |

**Deal Posted:** "Please, Wake Up" — $0.99 (66% off)
**Deal ID:** 34142
**Board:** 🔥 Today's Best Deals

Both posts recorded in `posted_deals.json` and logged to `memory/2026-02-13.md`.