PatternFolio · Walkthrough

How a PatternFolio scan runs

One end-to-end scan, from the moment a competitor URL lands in the intake to the moment a tamper-evident audit record ships out the other end. Five stages, every stage deep-links into the live surface where it actually runs.

Start the walkthrough → See the methodology →
Stage 01

Vertical selection

Every scan starts by answering one question: what kind of competitor is this? The vertical choice drives the tier weight, the breach priority formula, and the surface that the audit record lands in.

verticalapparel
tier_weight5 — Pro
cadencebi-weekly
cataloginner_i_patterns[23]
What happens here. The intake form carries a vertical field. Free / Starter / Pro / Enterprise tiers map to tier_weight values (1 / 3 / 5 / 8) used later in priority_score.

The decision is made in the PatternFolio intake form at #quick-audit.

Stage 02

Signal collection

Three intake modes funnel into the same POST /api/v1/audit endpoint. URL mode fetches the page HTML, pulls og:image and prominent product images, and picks the best candidate; file mode uploads directly; text mode ships the corpus straight through.

$ curl -X POST https://shapeos-3.polsia.app/api/v1/audit
       -H "Authorization: Bearer $PF_KEY" \
       -F "type=url" \
       -F "input=https://competitor.example/pattern" \
       -F "vertical=apparel"
fetchGET — page HTML
extractog:image · product[0..5]
pick1280×800 candidate
embedopenai vision → text-embedding-3-large

Quick Audit lives on the PatternFolio home page. Upload, paste, or paste a URL — all three routes converge on the same scorer.

Stage 03

Scoring

The ICCAN scorer compares the embedding against the Inner I / AIdapp camo catalog (pf_patterns, 23 base products) and against every competitor pattern already in competitor_patterns. The output is a similarity percentage between 0 and 100.

similarity_pct = 1 - cosine(query_vec, catalog_vec)
band           = score_to_action(similarity_pct)   // CLEAR / REVIEW / FLAG / REJECT
tier           = TIER_WEIGHT[user.plan_tier]
Worked example. A scan with similarity_pct = 87 lands in the FLAG band (75 – 90) and contributes weight 15 to that audit's breach priority. The full formula and tier weights live on the methodology page.

The math, the bands, and the priority formula are spelled out on the publicly accessible methodology explainer.

Stage 04

Breach detection

The similarity band is mapped onto one of four actions. Clear is treated as a closed case; anything else lands in the breach drawer, where the dashboard adds a per-competitor row and fires the alert when a scheduled run shifts by more than 15 percentage points vs the prior run.

bandFLAG · 87.4%
priority_score101.78
delta_vs_prior+22.3 pp
drawermonitor breach drawer

The breach drawer and the four-band action colors are visible without login on the Monitor overview page.

Stage 05

Audit output

Each scan is sealed into a tamper-evident record: the URL, the similarity percentage, the band, the tier weight, the priority score, and a chain hash. Anything that opted in lands in the public feed, behind a shareable URL that anyone can open without an account.

audit_id     = next id from pf_audits
hash_chain   = secure_chain.append(audit_id, body)   // HMAC-SHA256
public_share = /zi/audit/<audit_id>/public
audit_id
chain_hash0x9f…7c2a (truncated)
share/zi/audit/<id>/public
feedaudit_public

The latest public record is one click away. If nothing is indexed yet, the live public feed on the PatternFolio home page is the fallback.