Skill: joeyyyy0430/design-platform-search (version 1.0.1)

--- name: design-platform-search description: Run public design search flows on Dribbble, Pinterest, and Behance without login, and extract normalized result fields such as title, search-page cover image, author, source URL, and publish time when available. Use when Codex needs a reusable method for public inspiration retrieval across major design platforms, especially when the collection strategy should stay lightweight and search-page-first. --- # Public Design Search Use public search pages as the primary source of truth and keep the workflow login-free. ## Workflow 1. Choose search tags. - Prefer English tags for these three platforms unless a platform clearly supports another language. - Load [references/tag-taxonomy.md](references/tag-taxonomy.md) for generic tag-selection guidance and example category/tag patterns. - Keep tag choice independent from platform-specific extraction logic. 2. Build public search URLs. - Dribbble: `https://dribbble.com/search/<urlencoded-tag>` - Pinterest: `https://www.pinterest.com/search/pins/?q=<urlencoded-tag>&rs=typed` - Behance: `https://www.behance.net/search/projects?search=<urlencoded-tag>` 3. Collect candidate cards from the search page. - Prefer browser automation over raw HTTP for all three platforms. - Normalize search-card fields first: `title`, `source_url`, `cover_image_url`, `summary`, `author_name` when exposed, and `raw_metrics` when exposed. 4. Backfill sparingly. - Default: keep the search-page `cover_image_url`. - Use detail pages primarily for `publish_time`. - Only backfill `author_name` when the search card exposes nothing and the request budget allows it. - On constrained servers or proxy-heavy environments, disable Pinterest detail backfill entirely and rely on search-page results. 5. Return a normalized public-only record. - Keep unstable fields nullable. - Record the input tag or matched tag set when useful. - Do not fabricate authors, publish times, or engagement metrics. ## Extraction Priorities - `title`: search-card title first, then safe public meta/title fallback. - `cover_image_url`: search-page image first; only do light URL upgrades when the site uses obvious small fixed-size variants. - `author_name`: search-card author first; leave `Unknown` if public search does not expose it reliably. - `publish_time`: detail-page public metadata when available; otherwise `null`. - `summary`: normalized title or short public snippet. Platform-specific rules live in: - [references/platform-methods.md](references/platform-methods.md) - [references/tag-taxonomy.md](references/tag-taxonomy.md) ## Network Guidance - Pinterest and Behance may require VPN or proxy access in restricted regions. - Browser traffic may work best through SOCKS5 while image download or pHash download may need an HTTP proxy. - Verify network reachability before changing selectors. - If a platform is reachable only through unstable proxies, reduce detail backfill before changing the tag set. ## Guardrails - Public pages only. No login-only APIs, cookies, or authenticated sessions. - Prefer search-page fields over detail scraping whenever they are good enough. - Do not chase high-resolution cover images unless the search-page image is clearly unusable. - Treat missing metrics as normal. - Expect DOM drift and anti-bot behavior. - These three platforms are effectively English-first in most reusable workflows. ## Output Shape Normalize results into a shape close to: ```json { "title": "", "platform": "dribbble|pinterest|behance", "source_url": "", "cover_image_url": "", "author_name": "", "publish_time": null, "keyword": "", "matched_tags": [] } ```

path: agents/openai.yaml
content: interface:
  display_name: "Design Platform Search"
  short_description: "Login-free public design search for Dribbble, Pinterest, and Behance"
  default_prompt: "Use $design-platform-search to run a search-page-first public retrieval workflow on Dribbble, Pinterest, or Behance."


path: references/tag-taxonomy.md
content: # Tag Guidance

This skill is platform-focused, not domain-locked. Use tags that fit the user's topic, but keep the tag-selection logic lightweight and public-search-friendly.

## Core Principles

- Prefer short English search tags for Dribbble, Pinterest, and Behance.
- Start with 1 to 3 high-signal tags per topic before expanding.
- Move from broad to narrow:
  - broad discovery: `dashboard design`
  - narrower intent: `enterprise dashboard UI`
- Separate the topic from the extraction method. The same extraction workflow should work for many domains.

## Practical Tag Patterns

### UI / Dashboard

- `dashboard design`
- `data dashboard`
- `enterprise dashboard UI`
- `control panel UI`

### 3D / Scene

- `3D scene`
- `3D visualization`
- `architectural visualization`
- `digital twin 3D`

### Chart / Data Visual

- `chart design`
- `data chart`
- `graph design`
- `statistics UI`

### 3D Icon

- `3D icon design`
- `3D UI icon`
- `clay icon`
- `app icon 3D`

### Motion

- `UI animation`
- `motion design`
- `micro interaction`
- `loading animation`

### Color

- `color palette`
- `dark UI color`
- `dark theme design`
- `gradient color`

## Platform Tendencies

- `Dribbble`
  - Strong for polished UI shots, motion, product concepts, and high-fidelity visual design.
- `Pinterest`
  - Strong for broad visual references, color, mood, collage-like inspiration, and trend exploration.
- `Behance`
  - Strong for fuller project cases, multi-screen presentations, and more complete design narratives.

## Expansion Strategy

When testing a new topic:

1. Start with one broad tag.
2. Add one narrower tag if results are too noisy.
3. Stop expanding when search quality is already good enough.
4. Prefer fewer, better tags over large tag pools that generate unnecessary requests.


path: references/platform-methods.md
content: # Platform Methods

## Shared Rules

- Use a real browser for search pages.
- Prefer search-card fields over detail-page fields.
- Keep `cover_image_url` from the search page unless the platform exposes an obvious tiny fixed-size variant.
- Use detail pages mainly for `publish_time`.
- In restricted networks, validate VPN/proxy reachability before changing selectors.

## Dribbble

### Search URL

`https://dribbble.com/search/<urlencoded-tag>`

### Search-page collection

- Query `a.shot-thumbnail-link.js-shot-link[href*="/shots/"]`.
- Keep only anchors whose `href` matches `/shots/<numeric-id>`.
- For `title`, prefer:
  - `.shot-title`
  - `img.alt`
  - anchor `title`
  - accessibility text
- For `cover_image_url`, prefer:
  - highest `srcset` candidate
  - or upgrade `resize=320x240|400x300|800x600` to a larger variant such as `1600x1200`
- For `author_name`, prefer non-shot profile links already visible on the card.
- For metrics, public cards may expose `likes`, `views`, and `comments`.

### Detail-page backfill

- Use detail pages mainly for `publish_time`.
- Useful public signals:
  - `article:published_time`
  - `og:updated_time`
  - JSON text fields such as `datePublished`, `uploadDate`, `dateCreated`
- Do not depend on detail pages for cover image or author unless search cards are clearly insufficient.

### Practical notes

- Public publish time is still unstable.
- Dribbble is usually the strongest source for `dashboard`, `scene3d`, `motion`, and UI-heavy `icon3d`.

## Pinterest

### Search URL

`https://www.pinterest.com/search/pins/?q=<urlencoded-tag>&rs=typed`

### Search-page collection

- Query `a[href*="/pin/"]`.
- Keep only anchors whose `href` matches `/pin/<numeric-id>/`.
- For `title`, prefer:
  - `img.alt`
  - `aria-label`
  - cleaned anchor text
- For `cover_image_url`, prefer the search-page image and only do light upgrades such as:
  - `236x -> 736x`
  - `474x -> 736x`
- Search cards rarely expose a reliable `author_name`; leave it empty if needed.

### Detail-page backfill

- Use detail pages only for `publish_time` when the environment can afford it.
- Preferred public field:
  - `meta[property="og:updated_time"]`
- On slow servers or VPN-only environments, disable Pinterest detail backfill and keep search-page-only extraction.

### Practical notes

- Pinterest is often the most network-sensitive source.
- Search cards are usually enough for `chart`, `icon3d`, and `color`.
- If the environment is slow, protect throughput by avoiding detail requests.

## Behance

### Search URL

`https://www.behance.net/search/projects?search=<urlencoded-tag>`

### Search-page collection

- Query `a.ProjectCoverNeue-coverLink-U39[href*="/gallery/"]`.
- Keep only anchors whose `href` matches `/gallery/<numeric-id>`.
- For `title`, prefer:
  - project title link text
  - `aria-label`
  - `title`
  - `img.alt`
- For `cover_image_url`, prefer:
  - `picture img`
  - `img` `srcset`
  - current `img.src`
- Search cards may not expose `author_name`; do not fabricate it.

### Detail-page backfill

- Use detail pages mainly for `publish_time`.
- Useful public signals:
  - page text patterns such as `发布时间`
  - `application/ld+json` with `VisualArtwork`
  - `datePublished`, `uploadDate`, `dateCreated`

### Practical notes

- Behance can be region-sensitive.
- It is strong for `dashboard`, `scene3d`, `chart`, and `icon3d`.
- Search-page covers are often good enough; do not force extra image enrichment unless they are placeholders.

## Proxy Notes

- Browser automation may work better through `socks5://...`.
- Image download and pHash download may need `http://...` mixed-port proxies even when the browser uses SOCKS5.
- When debugging a restricted server:
  - verify platform reachability with `curl`
  - verify the browser can load the search page
  - only then tune selectors or timeouts


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)