From a0349aa9c4aece667ade6a12164e16bdce6374a5 Mon Sep 17 00:00:00 2001 From: Adriano Belisario Date: Sun, 3 May 2026 22:58:06 +0000 Subject: [PATCH] chore: db snapshot with item images (batch 1) + image skill doc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Images applied to 9 items (Macacões RN, Bodies RN, Luvas, Meias, Sapatinhos malha, Bodies ML 1-3m, Bodies MC 1-3m, Calças 1-3m, Macacões 1-3m, Swaddle). Adds docs/skill-item-images.md with search/patch workflow and DB snapshot steps. Co-Authored-By: Claude Sonnet 4.6 --- data/db/wishlist.db | Bin 53248 -> 77824 bytes docs/skill-item-images.md | 80 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 docs/skill-item-images.md diff --git a/data/db/wishlist.db b/data/db/wishlist.db index 457253559d46cdaf7fe6805f3d0f4a564aceff36..c429ab0b69755cf944c8c6cb0b2d20ff27ca3ead 100755 GIT binary patch literal 77824 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 diff --git a/docs/skill-item-images.md b/docs/skill-item-images.md new file mode 100644 index 0000000..5339b4a --- /dev/null +++ b/docs/skill-item-images.md @@ -0,0 +1,80 @@ +--- +name: item-images +description: Use when finding and updating product images for items on the Chá do Martin wishlist. Triggers on "find image", "add image", "update image", or when an item is missing its imageUrl. +--- + +# Item Images — Chá do Martin + +Finds a product image for a wishlist item via web search and patches it to the API. + +## Config + +- **Base URL**: `https://chadomartin.omeu.website` +- **Admin token**: read from `/home/adriano/chadebebe/.env` (key `ADMIN_TOKEN`) +- **Auth**: cookie `adm_token=` sent with every request + +## Instructions + +1. Load the admin token: + ```bash + ADMIN_TOKEN=$(grep ADMIN_TOKEN /home/adriano/chadebebe/.env | cut -d= -f2) + ``` + +2. Search the web for a clean product image. Good queries: + - `" bebê" site:amazon.com.br` + - `" newborn product photo"` + - Try mitiendanube stores, newbiestore.com, or brand sites (burtsbeesbaby.com, halosleep.com, honestbabyclothing.com) + +3. Find a direct image URL ending in `.jpg`, `.png`, or `.webp`. + +4. Verify the URL returns an actual image: + ```bash + curl -sI "" | grep -i "content-type\|http/" + # Must be HTTP 200 and content-type: image/* + ``` + +5. PATCH the item: + ```bash + curl -s -X PATCH \ + "https://chadomartin.omeu.website/api/items/" \ + -H "Content-Type: application/json" \ + -H "Cookie: adm_token=${ADMIN_TOKEN}" \ + -d '{"imageUrl": ""}' + ``` + +6. Check response for `"success": true`. + +## Listing items without images + +```bash +ADMIN_TOKEN=$(grep ADMIN_TOKEN /home/adriano/chadebebe/.env | cut -d= -f2) +curl -s "https://chadomartin.omeu.website/api/wishlists/r7ug0ez62x7ljx8c870ofwcv/items" \ + -H "Cookie: adm_token=${ADMIN_TOKEN}" | python3 -c " +import json, sys +data = json.load(sys.stdin) +for it in sorted(data['items'], key=lambda x: x['sortOrder']): + if not it['imageUrl']: + print(it['id'], it['name']) +" +``` + +## Committing the DB snapshot after updates + +Images are stored in the live SQLite DB (`/home/adriano/chadebebe/data/db/wishlist.db`). +After a batch of image updates, commit a snapshot: + +```bash +sqlite3 /home/adriano/chadebebe/data/db/wishlist.db "PRAGMA wal_checkpoint(FULL);" +cp /home/adriano/chadebebe/data/db/wishlist.db /home/adriano/chadebebe/src/data/db/wishlist.db +cd /home/adriano/chadebebe/src +git add data/db/wishlist.db +git commit -m "chore: db snapshot with updated item images" +``` + +## Notes + +- Do NOT use placeholder or stock photo URLs — find actual product images +- Prefer `.webp` or `.jpg` from CDNs (faster loading) +- Good CDN sources: `mitiendanube.com`, `newbiestore.com`, `burtsbeesbaby.com`, `halosleep.com`, `honestbabyclothing.com` +- Always verify HTTP 200 before patching — dead URLs show broken images to guests +- Run multiple items in parallel (background subagents, model: haiku) for speed