From israel-shopping
Use when the user wants to see only the reviews left by Israeli buyers (`reviews from IL`) on an AliExpress product page — filtering out the global review pool and surfacing what people who actually shipped to Israel said about the item, including the variant/SKU they bought, star rating, photos, review text, and date. Drives the AliExpress product page (`/item/<id>.html`) reviews section via Playwright, clicks the IL country-flag chip in the review-filter strip (validated version-agnostic selector — `[class*="country-flag-"].IL`), expands "View more" if present, and extracts the per-review fields. Trigger phrases — "show israeli reviews", "what do israelis say about X", "il reviews aliexpress", "filter aliexpress reviews to israel", "reviews from israel for this listing".
How this skill is triggered — by the user, by Claude, or both
Slash command
/israel-shopping:il-reviews-showThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Filter the reviews on an AliExpress product page down to those left by Israeli buyers and return them in a structured form.
Filter the reviews on an AliExpress product page down to those left by Israeli buyers and return them in a structured form.
AliExpress aggregates reviews globally. For an Israel-based buyer, only the IL-tagged reviews are signal — they confirm:
url (required) — full AliExpress product URL (https://he.aliexpress.com/item/<id>.html or .aliexpress.com/item/<id>.html).max_reviews (optional, default: all) — cap on number of IL reviews to extract.translate_hebrew (optional, default false) — if a review body is in Hebrew, also include an English gloss.Site must be in IL/Hebrew/ILS (see search-aliexpress skill for the cookie handshake — aep_usuc_f.c_tp=ILS, b_locale=iw_IL). The IL chip appears regardless of locale, but timestamps render per b_locale and need to be parsed accordingly.
The review-filter strip lives below the reviews header. Each chip is a <div> whose class starts with filter--filterItem--. The Israel chip carries a child <span> whose class list contains some country-flag-* versioned class plus the bare ISO-2 IL. As of capture date the versioned class is country-flag-y2023, but the -y2023 suffix telegraphs that AliExpress versions this sprite — anchor on the prefix, not the year. Validated in research/ui-selectors/product-page-review-filters.md.
Robust selector — version-agnostic, won't break when AliExpress rolls country-flag-y2024 / country-flag-v2 / etc.:
const ilChip = document.querySelector('[class*="country-flag-"].IL')
?.closest('[class*="filter--filterItem--"]');
Do not anchor on the literal country-flag-y2023 — it will break on the next sprite roll. The [class*="country-flag-"] substring + the IL ISO class together are the stable pair: any country-flag-* class with the IL co-class.
Reviews section exists: [class*="title--wrap--"] is present. If not, the listing has no reviews at all — report and stop.
IL chip exists: [class*="country-flag-"].IL is in the DOM. If absent, no reviews from Israel exist for this product — report 0 IL reviews and stop. Do not invent any.
IL chip is not invalid: the wrapper does not carry [class*="filter--invalid--"]. (An invalid chip would render with (0) and be non-clickable — but in practice if the count is 0 the chip won't appear at all on most builds.)
Read the IL count from the chip text, e.g. (1):
const m = ilChip?.textContent.match(/\((\d+)\)/);
const ilCount = m ? parseInt(m[1], 10) : 0;
Click the chip wrapper (not the inner flag span):
ilChip.click();
Then verify the chip flipped to active:
ilChip.matches('[class*="filter--active--"]'); // → true
Wait for the review list to re-render (network idle, or wait for the list container to mutate). The reviews header copy ("7 ratings", etc.) does not change after filtering — only the list below filters. Don't gate on the header.
If a View more button is present at the bottom of the review list, click it repeatedly until either:
max_reviews IL reviews have been collected.Selector (locale-dependent text):
const btn = [...document.querySelectorAll('[class*="v3--btn--"]')]
.find(b => /view more|טען עוד|הצג עוד/i.test(b.textContent));
Each review is a [class*="list--itemBox--"]. Extract:
| Field | Selector (relative to the item box) |
|---|---|
| stars (1–5) | [class*="stars--box--"] .comet-icon-starreviewfilled → count |
| variant / SKU | [class*="list--itemSku--"] (e.g. Color:black, Size:M) |
| review body | [class*="list--itemReview--"] — may be empty (star-only) |
| customer photos | [class*="list--itemThumbnails--"] img → src array |
| product thumb | [class*="list--itemPhoto--"] img → src |
| username + date | [class*="list--itemInfo--"] span — split on ` |
| helpful count | [class*="list--itemHelpText--"] → \((\d+)\) |
AliExpress Shopper (or its locale equivalent) for everyone. Do not present this as the reviewer's identity.textContent.trim().length === 0 and tag as star-only.b_locale=iw_IL, dates render in Hebrew (e.g. 11 בפבר׳ 2026). Parse defensively; if parsing fails, return the raw string.<facet>:<value>[, <facet>:<value>]… — preserve as-is, don't try to normalise.Product: <title>
URL: <url>
IL reviews: <N> (chip count: <chip_count>)
Average rating (all locales): <X.X> ← from header, not IL-filtered
For each IL review:
─────────────────────────────────────
[★★★★★] variant: <Color:black, Size:M>
date: <YYYY-MM-DD or raw> helpful: <N>
photos: <count> thumbs: [<urls>]
review:
<body or "(star-only — no text)">
─────────────────────────────────────
If translate_hebrew=true and a review body is Hebrew, append an English gloss block after the original.
0 IL reviews, stop.filter--active--* doesn't appear) → wait once more, then report inability to apply filter and bail.translate_hebrew=true is set./item/<id>.html.[class*="filter--active--"].null if absent).npx claudepluginhub danielrosehill/claude-code-plugins --plugin israel-shoppingGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.