Resolution Layer Case Study · Read & Diagnose
A direct-to-consumer swimwear brand.
A catalog read across a fit-led swim range and the styles carried alongside it — for a business whose whole proposition is that a suit bought without a fitting room will fit.
This is a real EKOM catalog analysis, with the brand's identity removed. The client is a direct-to-consumer swimwear brand whose size range runs beyond the standard grade and whose styles are carried as families of sibling records. EKOM read the live public catalog cold and surfaced 22 flagged items, 15 of which are actionable catalog defects.
What makes a fit-led catalog different is where the promise actually lives. Nobody buying a swimsuit online can try it on, so the brand has to encode fit into the record: a size run and a set of structured attribute tags for support, compression, cut and coverage. That is a real taxonomy and it is more than most swim catalogs carry. It is also the primary form in which the fit promise reaches a filter, a marketplace listing, a partner's system or an AI assistant. The attributes are the fit.
On most catalogs a wrong field costs a sale. On a fit-led catalog it costs the return — and a return caused by a fit attribute is the one that also costs the trust.
Unlike a distributor case study, no manufacturer names are carried through here: anything this brand does not author itself has been withheld along with the client's identity. Style names, colorway names, item codes, product handles, field names and marketing copy have all been generalized or described rather than quoted. What is exact is the shape of every defect, and the reasoning that found it.
What's inside
- What a shopper runs into first — one garment, one page, one colorway, and a size run answering to several different item codes.
- A page that describes something else — three critical findings where the content is complete, well formed, and wrong.
- One attribute, several vocabularies — why a filter on seat coverage returns a partial catalog and reports nothing wrong.
- Published, and unbuyable — live pages reached from two opposite directions with nothing on them to buy.
- Where it traces back — fifteen findings, six upstream mechanisms.
- What we set aside — the seven findings EKOM withdrew, grouped and explained rather than quietly dropped.
Twenty-two findings were raised on a cold read of the public catalog. Fifteen are reported; seven were withdrawn before the client report was written, and page 11 says exactly why.
15
Actionable findings
(22 flagged)
1
Read
The public catalog as any shopper, retail partner or assistant sees it — no file handoff, no credentials, no integration.
The whole live catalog, in one pass.
→
2
Profile
Infer what each field is for from how the catalog itself uses it, then hold every product to that.
The brand's own conventions, learned from the catalog itself rather than supplied — which is what makes a single break detectable.
→
3
Analyze
Surface defects, rate severity, and bind each one to the products and values behind it.
15 findings, 7 themes, 6 upstream causes.
Step two is the part that does not generalize from a template. Nothing was supplied about what this catalog's fields mean — the conventions above were learned from the catalog itself, and they are the reason a single break is detectable at all. A catalog with no conventions produces no findings; it produces confusion.
There is a fourth step that does not fit the diagram, because it happens after the analysis rather than inside it. Before the client report shipped, the findings carrying the most weight were taken back to the live storefront and confirmed still present, and the ones that had been raised from an inference were pushed at the field that would settle them. Those findings are marked verified live on the pages that follow. It is the difference between handing a client a list of leads and handing them a list they can act on.
On counting. The numbers on this page are findings, severities and themes. This case study publishes no catalog volumes and no counts of how many products a given defect touches — where the scale of a pattern matters, the pattern is described instead.
What a shopper runs into first.
The most consequential finding on this catalog is not a blank field or a typo. It is that the size run of a single product — one page, one garment, one colorway — is stitched together from two, three, even four different base item codes.
Critical · Size-run integrity · verified live
Sizes of the same suit carry item codes from different families.
On a set of products the SKU list runs across more than one base code, so two sizes of the same garment resolve to what look like two different items. A picker working from SKU has no way to know which garment they are holding, and size-level inventory cannot roll up to the product it belongs to. This is a fulfillment risk, not a cosmetic one.
The codes are not random, and they mix in two distinguishable ways. On some products two structurally different code families coexist inside one size run; on others two codes from the same family do. Both shapes are structured rather than accidental, which is what makes them fixable as a rule instead of product by product. It also reaches across sibling records rather than sitting in one corner of the range — on one record a single size out of an otherwise clean run answers to a different code.
Every product behind this finding was read across its own variant records and then confirmed still present on the live storefront before the client report was written.
High · Option-field integrity
A size run listed out of order, with its SKU list scrambled to match.
One product's size values are stored out of order rather than ascending — with the extended grades interleaved mid-run — and the SKU list is ordered to match the scramble rather than the sizes. The size selector on a product page renders in the order the field holds, so this is what a shopper sees. The same product also mixes two base codes across its run, and declares two color values on what is a single-color garment.
The reordering needs no outside information — ascending is derivable from the values themselves. Which of the two color labels survives is a decision only the brand can make, and it is the kind of question this pass surfaces rather than answers.
A page that describes something else.
Three of the four critical findings sit on what the product page shows and says. Two are content that belongs to another product. The third is a page contradicting itself about a fit attribute. None of them is a gap — in every case the content is complete, well formed, and wrong.
Critical · Content that does not match the product · verified live
A dress is described as a one-piece swimsuit, in both copy fields.
A product classified as a dress, carrying dress-specific tags, has one-piece swimsuit copy on it. The copy reads well. It is describing a different garment, on a page a shopper reached by looking for a dress. The same text sits in both copy fields — the short one and the long-form one — so there is no clean version behind the broken one to restore.
The copy also names a second style as its reference point, and that style is no longer in the catalog — a storefront search for it returns this product and nothing else. So the reference now resolves to the very product it is misdescribing.
Critical · Content that does not match the product · verified live
A top is filtered as maximum support and described as the opposite.
One product's prose describes a light level of support. The structured support tag on the same record carries the maximum level.
Table scrolls sideways →
Field
What it holds
Says
the copy field
prose describing a light level of support
the light end
the support tag
the structured value at the top of the scale
the top
These are not two shades of one claim — they are the two ends of the axis, on a brand whose shoppers select on support. A shopper who filters for maximum support and then reads the page has been told two different things before she reaches the size selector. The likely cost is a return, and returns on a fit attribute are the expensive kind.
Both sides of it were confirmed live before the client report was written: the maximum-support classification carries through the tag, the category label and the collection the product sits in, while the description on the same page still reads as the light end.
A page that describes something else — continued.
The third critical finding on the content layer is the one worth the most space, because of how it was handled rather than what it says. It was raised from an inference, the inference was written down with its boundary, and then the boundary was closed.
Critical · Content that does not match the product · limit closed
The lead image on a swim dress is filed under another style's codes.
On one product the primary photograph carries a filename encoding a different style and a different colorway. Every other image on the same product follows this product's own naming pattern. A shopper choosing on the photograph is choosing a garment she will not receive.
A limit named, then closed — and that sequence is the method. This finding was raised from a filename, and a filename on its own is strong evidence in a catalog that keys its assets that way but not proof: it can survive a re-shoot or a rename. So the boundary was written down, and then it was checked. The storefront's own primary-image field — the field that decides which photograph actually renders — returns that same mismatched file, and every sibling record in the style returns a file under the style's own code. The limit is closed and the finding stands without it.
Naming the boundary is what made closing it possible. A finding asserted flatly would have shipped with the same words and none of the confidence.
A finding is only as good as what a client can do with it on Monday morning. An inference dressed as a fact gets checked once, found soft, and quietly discounts everything around it.
Why this one gets its own page
Three critical findings on the content layer read almost identically in a summary: content that does not match the product. What separates them is the evidence underneath. Two were quoted straight from the record — the field said it, so the finding says it. This one required an inference from a naming convention, which is a weaker kind of evidence and had to be labelled as such before it could be trusted. Treating those two cases the same way is how a report starts sounding uniformly confident and stops being uniformly reliable.
The same discipline is why seven findings are not in this report at all, and why the counts on page 3 are the counts a client can hold EKOM to.
One attribute, several vocabularies.
The attribute tags are the machinery behind every filter on the storefront and every attribute a retail partner or a marketplace reads. Four findings land on them, and a filter cannot see across a name.
High · Filter vocabulary drift · verified live
Seat coverage is expressed six ways for what the values themselves describe as three levels.
The divergence is systematic and it has a shape: sibling records of one style describe the same coverage level with different words — the same adjective attached to two different nouns, neither of them wrong on its face. Three levels, two nouns each, six spellings in use.
Table scrolls sideways →
Records
Coverage value
Agree?
style A, one record
the first level, named with noun one
—
style A, its sibling
the same level, named with noun two
no
style B, one record
the second level, named with noun one
—
style B, its sibling
the same level, named with noun two
no
style C, one record
the third level, named with noun one
—
style C, its sibling
the same level, named with noun two
no
A shopper filtering on one of those does not see the other. The brand also keeps an internal coverage tag alongside the public one, and that tag does not carry the level across siblings at all: on the pairs checked live it is present on one record and absent from the other, so it cannot be used to reconcile the split either.
On one record the level is stated three ways at once — the structured value plus two loose free-text tags saying the same thing in different words. That is the shape of the whole problem in a single record.
The correction needs no research — every spelling maps to a single canonical level, and what the brand approves is the name, once.
High · Filter vocabulary drift · verified live
One material is called two things, and the title and the tag do not always agree with each other either.
Within and across style families, a fabric appears under a construction name in some records and a fiber name in others — in the product title and in the fabric tag independently, so a record can carry one form in its title and the other in its tag. A shopper filtering on one form misses items carrying the other. The same mismatch appears on sibling records in both directions, so it is a naming problem across the catalog rather than a problem with one part of the range.
The cleanest live illustration is a single style published twice under two different fabric names — the same garment, the same material, two names, both live, and the name sits in the URL a shopper lands on as well as the title she reads. Every record behind this finding was re-checked on the storefront and each one still carries the mismatch.
One attribute, several vocabularies — continued.
The other two findings on the attribute layer are not vocabulary splits. They are single records that break a convention the rest of the catalog keeps — which is only detectable because the convention exists.
Medium · Sibling records out of convention
Individual records break tagging conventions their siblings otherwise follow.
Small tags, disproportionate effect: one decides whether a suit appears under a color filter at all, the other decides what name renders on a product card and in email. The first two rows below are on one record; the third is on another.
Table scrolls sideways →
Record
What it holds
Should be
one style, one record
a color value but no color-grouping tag, while its sibling record carries one
present
the same record
a short-name tag in its sibling's form rather than its own
its own
another style, one record
the short-name tag twice — once in each form, at the same time
one form
Each correction is derivable from the catalog itself: the color grouping is copied from the sibling record that already carries it, and the naming form is the one its siblings follow.
Published, and unbuyable.
Live product pages with nothing on them a shopper can buy, and live product pages with nothing on them to read. They arrive from opposite directions and they cost the same thing.
High · Published without a buyable variant
A set of records badged as new has no available variant at all.
Records badged as new arrivals show a variant count above zero and an available variant count of zero — a published page, a size run listed, nothing in stock. Shoppers arriving from ads or organic search reach a page they cannot buy from. Separately, a set of fully sold-through items is still live carrying no clearance flag of any kind, so a shopper lands on an unsellable page with no explanation for why. Whether those stay live as a search surface is a merchandising decision, not a data one — but nothing on the record distinguishes an unstocked launch from a sold-out page.
High · Missing copy and classification
Published items with no product copy at all, on exactly the launches that matter most.
A set of live products has both copy fields empty — collaboration and drop launches, the arrivals that carry the most promotion behind them. Copy-free product pages typically rank and convert worse, and a launch is the worst moment to discover it.
Table scrolls sideways →
Field
What it holds
Cost
short copy field
empty, on live collaboration and drop items
no copy
long-form copy field
empty, on the same records
no copy
classification field
empty, where a sibling record in the same range carries a value
unfiled
The empty classification field is the quiet one. It drops a product out of collection rules, out of navigation filters and out of the shopping feed — the record is live and simultaneously invisible to every mechanism that would put it in front of someone.
Medium · Missing copy and classification · reported with a stated limit
The structured copy field is empty on the records the brand authors, and populated on much of what it receives.
The field that holds structured bullet copy — the machine-readable alternative to parsing long-form HTML — is empty on every record the brand authors itself, while a little over half of the records it receives from outside populate it. Checked at source rather than inside EKOM's own extraction, so the asymmetry is real and not an artifact of the read. The records the brand writes are the worse-documented ones.
Where the inference stops. A field that only suppliers populate may be exactly what it is meant to be. One sentence from whoever owns the field settles whether this is a content gap or a design decision — and until it is answered the gap cannot be scoped. EKOM reports it, states the boundary, and does not assert past it.
Fifteen findings sounds like fifteen problems. They collapse into six upstream mechanisms — and a mechanism can be fixed once and stopped from recurring. Each one below is named with its tell: the thing in the data that evidences the cause rather than asserting it.
More than one item code alive for one garment
Consistent with two identifier systems running at once: one product's size list carries more than one base item code — sometimes two structurally different code families side by side, sometimes two codes from the same family. Each code is well formed on its own; what fails is that one garment answers to several. It produced the size-run finding and the scrambled SKU list.
One attribute, more than one live vocabulary
Consistent with a vocabulary added to rather than governed: on coverage, the same level appears as a pair differing only in its noun. On fabric it is two different names for one material. On one product two color labels, one of which may be a retired form, sit in the same field at once. Every value in play is plausible on its face, which is why a split survives unnoticed.
Sibling records that diverge only in their tags
Consistent with sibling records maintained independently of one another: where a style's records diverge, the divergence is in the tags — one record missing a tag its sibling carries, or carrying the same tag in two forms at once — while the rest of the record's structure is intact. It produced both convention breaks on the sibling records.
Copy and assets attached to the wrong record
Consistent with content managed apart from the record it belongs to: the content is complete and well formed, and it either belongs to a different product or contradicts a structured attribute on its own record. In one case it is identical across both copy fields, so there is no clean version underneath. It produced three of the four critical findings.
Published pages with no availability check in evidence
Consistent with a publish step that never tests availability: a live page with an available-variant count of zero, reached from two opposite directions — a launch and a sell-through — and the record carries nothing that distinguishes an unstocked launch from a sold-out page. It produced the badged-new dead ends and the unflagged sold-out items.
Records live before their copy and classification
The records with no copy at all are collaboration and drop launches, and the classification field is blank on a stocked record whose sibling carries it. Both are consistent with a copy-and-classification step that runs separately from publication rather than as a condition of it. Separately, the structured copy field is populated only on records supplied from outside.
Fixing fifteen findings one at a time fixes those fifteen. Fixing six mechanisms fixes every product that has already passed through them, and every product that will. That is the difference between cleaning a catalog and correcting the process that fills it.
Twenty-two findings were raised and fifteen are reported. The seven that are not are described here rather than quietly dropped, because a case study that only shows its hits is not evidence of anything.
Five described the shape of the data, not a defect in it
Five findings flagged multi-value fields — the tag list, the image list, the option-value lists and the structured copy field — as columns that ought to be split into separate ones. That is a statement about how a product record on this platform is shaped, not about anything wrong with this brand's. They describe the reading.
Two flagged a schema slot as a gap
Two findings flagged an option slot the platform allocates to every product and this catalog all but never uses. An unused slot the platform provides is the schema rather than a gap.
Why this page exists
Reporting them would have inflated the count by nearly half. None of the seven describes anything wrong with the brand's data, so none is in the fifteen, and none is in any severity or theme total anywhere in the client report. Reporting a miss costs EKOM less than having the client find it — the confident-sounding finding is the one that earns the extra check.
A withdrawal is not the same as a limit, and neither is a failure. A withdrawal means the finding is wrong — it describes the reading, or the record turns out to be correctly filed. A stated limit means the finding is right and the proof has a boundary, so the boundary gets named: what the inference rests on, where it stops, and what a human would check to close it. Two findings above were raised that way. The limit is not an apology; it is the place where the reasoning becomes visible, and removing it would take the reasoning out of the document with it.
And a named boundary is a checkable one. Before the client report shipped, the findings carrying the most weight were taken back to the live storefront and confirmed still present — and on the lead-image finding that check reached the field that actually decides which photograph renders, which is exactly what the stated limit said would close it. So one of the two limits is closed in the delivered report and the other is still declared, because the question behind it belongs to the client rather than to the data. That is the whole discipline in one page: say what the evidence reaches, go and close what can be closed, and leave the rest visible instead of rounding it up.
around
40%
Coresight Research, in a report sponsored by fit-technology firm Alvanon, found that around 40% of US shoppers said they had abandoned an online apparel purchase because of confusing or missing product information — in the same study that puts the US online apparel return rate at 23.4% for 2025, and reports that nearly 70% of shoppers who returned clothing bought online cited size and fit as the reason. Size, fit and the words describing them are exactly the fields this analysis is about.
Coresight Research, Shifting the Size and Fit Paradigm, May 2026 — sponsored by Alvanon
A brand like this one sells a resolved problem as much as a product: the promise that fit can be settled before the box arrives. Building that is harder than building a storefront, and the record shows it was built deliberately — support, compression, cut and coverage are structured attributes rather than adjectives in a paragraph. These findings are what happens when the catalog that carries the promise is maintained one product at a time while the promise is made at the scale of a brand.
The cost is not abstract. A shopper filtering for maximum support finds a top whose own page describes a light level of support. A shopper filtering for a color does not see one suit at all, because the tag that would place it there is missing from that record while its sibling carries it. Seat coverage answers to six different names, so any filter on it returns a partial catalog and reports nothing wrong. And the record is what a partner's system, a marketplace or an AI assistant reads: the attributes, the identifiers and the size run, which is where every one of these findings lives.
Three moves, in order. The first needs no new data at all.
This pass read and diagnosed. The same structural understanding powers what follows — turning a diagnosed catalog into one a shopper, a partner and a machine can all read the same way.
1 · Apply the corrections the record already answers for itself
Collapse every coverage spelling onto one canonical level. Standardize the fabric label across the tag and the title together. Restore the color grouping one record is missing from the sibling that carries it, and bring its naming into the form its siblings follow. Put the scrambled size run and its SKU list back in ascending order. Fill the empty classification field from the sibling that already has it. Approved as patterns, not product by product.
2 · Answer the questions only the brand can answer, and unblock the rest
Which item code the warehouse trusts. Which support level the garment actually has. Whether the structured copy field is meant to be filled in-house. Each one gates a body of work that cannot start until it is settled — which is why they belong at the front of the sequence, not at the end of a report.
3 · Hold the line at intake
Keep ongoing intelligence where new product lands, so the next drop does not arrive with the same mixed codes, the same ungoverned vocabulary and the same open copy step — and so a launch cannot publish before it has copy or stock.
This is how EKOM moves a catalog from insight to impact —
and keeps the fit promise reading right as the brand grows.