Skip to content

Add supplier diligence and peptide operating blueprint - #162

Open
alexmwein wants to merge 98 commits into
meltylabs:mainfrom
alexmwein:peptide-content-intel-portal
Open

Add supplier diligence and peptide operating blueprint#162
alexmwein wants to merge 98 commits into
meltylabs:mainfrom
alexmwein:peptide-content-intel-portal

Conversation

@alexmwein

@alexmwein alexmwein commented Jul 25, 2026

Copy link
Copy Markdown

Summary

  • replace the obsolete gray-storefront supplier recommendation with an evidence-ranked manufacturer decision: qualify Hybio first, use Sinopep-Allsino as the API/RFQ challenger, and treat no gray seller as a verified factory
  • add the end-to-end operating dossier for lawful route selection, API/fill flow, secondary packaging, independent lot testing, Quality release, 3PL, timing, economics, roles, and go/no-go gates
  • correct the physical flow so decorative packaging and finished product travel separately and converge only at a qualified packout/3PL
  • distinguish verified evidence, founder/vendor reports, modeled assumptions, and pending quotes throughout
  • link the blueprint from every research-room view

Key operating decision

One accountable supply-chain owner, multiple qualified specialists. The laboratory supplies data, the 3PL supplies custody, and independent Quality alone releases inventory. Direct-to-consumer unapproved retatrutide is a no-go; the durable paths are institution-only research or a separately governed licensed-care business using lawful therapies.

Verification

  • npm run build
  • html-validate on the new operating page
  • node --check on the section-navigation script
  • local link and fragment resolution check
  • 1440px and 390px browser QA: all local assets 200, no console errors, no horizontal page overflow
  • section anchor and active-nav behavior verified at 390px
  • Claude Fable 5 rendered desktop/mobile review: VERDICT: PASS

Scope and publishing note

  • blueprint implementation is commit 5da55ea6
  • canonical origin rejected direct push for alexmwein with HTTP 403; this open cross-fork PR uses the repository’s existing writable fork
  • unrelated dirty-worktree changes were not staged or committed

alexmwein added 30 commits July 20, 2026 12:07
alexmwein added 12 commits July 25, 2026 20:33
Applied the outstanding patches from the six-agent visual sweep, then measured
and found they had regressed contrast from 42 failures back to 94. Diagnosed
rather than shipped: the 94 came from only three distinct elements repeated
across pages.

  .span / .cart-row-unit  4.42:1  --text-3 cleared 4.5 on --surface but reached
                                  only 4.42 on --bg and 4.22 on --surface-soft,
                                  so muted text failed anywhere it sat on a
                                  tinted panel. Now #646d79, which clears 4.5 on
                                  all three surfaces.
  .wordmark-category      2.99:1  uses --text-2, correct on white but rendered
                                  inside the slate footer. Scoped there to
                                  --on-dark-3.

Measured against the original baseline across 30 page/width combinations:

  contrast failures        143 -> 0     (-143)
  off-grid spacing decls   115 -> 52     (-63)
  text colours              18 -> 14
  type size/weight pairs    55 -> 50
  tap targets <44px        117 -> 107

A layout guard across nine routes at 390 and 1440 reports no horizontal overflow
and no collapsed containers, so none of the 52 patches repeated the unscoped-CSS
mistake that had broken the mobile homepage.

Type pairs remain the largest outstanding item. The display scale is unified but
small text still spans 9, 10, 11, 12 and 13px across four weights.
Sizes 7, 8, 11, 14, 17, 18, 19, 23 and 27 were absorbed into neighbouring steps,
and a clamp that bottomed out at 7px was flattened to 9px, below which nothing on
this site should render.

Weights collapsed to three: 400 body, 500 label, 650 emphasis. The measured
inventory still reported 700 and 900 after the CSS pass despite no such
declaration existing in the file; they were coming from the user-agent
stylesheet, which renders strong, b and headings at bold. Those are now
normalised to 650 so the page carries one emphasis weight rather than two
competing bolds.

  type size/weight pairs   55 -> 25
  weights in use            6 -> 3   (400, 500, 650)

The layout guard caught a regression this introduced: on the cart page at 390 the
price was pushed 22px past the viewport, because the row head is a two-column
flex whose title column had no lower bound and whose price could not shrink. The
head now wraps and the meta line breaks anywhere.

Guard reports clean across nine routes at 390 and 1440. Contrast remains at zero.
…ed meanings

The system defines --cobalt as interactive-and-status and --success as reported
and verified. Both were being spent elsewhere, which is why neither carried
signal.

--cobalt was painting every section eyebrow, every product card category label
and the trust strip's decorative dots. Four non-interactive uses per screen meant
the accent no longer said "you can act here", and the real controls competed with
labels for the same colour. Non-interactive labels move to muted text. The dark
bands keep a warm eyebrow, which is brand material rather than accent.

--success was on every IN STOCK badge. Inventory state is unrelated to analytical
verification, so by the time the eye reached the testing panel green had already
been spent on something else. Stock badges are now neutral sitewide, not only on
product cards where an earlier patch had scoped it.

Measured: contrast still 0, text colours 14 -> 13, guard clean across nine routes
at 390 and 1440.
…o two

Invoked the frontend-design skill, which classifies this as an existing system
and directs Module C: match the established language, remove chrome that does no
work, align before decorating. Then measured alignment rather than judging it.

Checkout, at 1440:
  shell edge                                     60
  eyebrow, h1, stepper                           60
  legend, hint, fields, labels, inputs, actions  85   <- 25px off the axis
  summary heading, rows, total                 1045   <- 25px off its panel edge

Every piece of form content sat off the axis its own page heading sat on, because
the step card's 24px padding plus 1px border pushed it there. That card was chrome
doing no work: it is the only object in its column, so a background and border
separated it from nothing. Removing it puts legend, hints, labels, inputs and
actions on the same 60px axis as the heading above them, with steps separated by
rhythm instead. The summary keeps its panel, being a genuinely distinct object.

Site-wide, a left-axis probe across 13 routes found FIVE different distances from
the shell edge to a block of copy: 0 for section headings, 17 inside a product
card, 25 inside a bundle card, 32 inside the newsletter band, 48 inside the dark
testing band. Nothing shared an axis with anything else. That is what reads as
unprofessional even when the typography is right.

Now two insets and only two: panels at --s-6, cards at --s-5. Every remaining
off-axis element measures either 85 or 92, consistently, rather than five
arbitrary values.

Guard clean across nine routes at both widths. Contrast still 0.
Ran the design-review skill's design-system extraction against the live site. It
reported three font families in use where there should be two: Inter, IBM Plex
Mono, and Times.

Times was resolving on the html element itself, because the font stack was
declared only on body. Head elements are not rendered so nothing visibly broke,
but any element escaping body inheritance would have rendered serif. Set on html.

Also ran the skill's AI-slop checklist against the rendered site. Findings, honestly:
  purple or violet gradients            none
  icon-in-circle 3-column feature grid  none, the guide cards are heading plus
                                        summary plus link, editorial rather than
                                        the SaaS template pattern
  centered everything                   no, the ten centred rules are labels,
                                        steppers, empty states and buttons, all
                                        legitimately centred UI
  uniform bubbly radius                 no, four radii in use across sm/md/lg/pill
  decorative blobs, emoji               none
  colored left-border on cards          three instances, all on callouts and
                                        notices rather than a card grid, which is
                                        standard editorial practice, so left alone
  generic hero copy                     no

Heading scale measures 56 / 33 / 20 / 16 at ratios of roughly 1.7, 1.65 and 1.25.
Four checks that measure the rendered page rather than reading source. Each one
caught a defect that source-reading had already declared clean:

  design-probe    spacing, type, colour, contrast, tap targets and per-component
                  fingerprints across 30 page/width combinations. Found 55 type
                  size/weight pairs, 18 text colours, 143 contrast failures, and
                  h1 rendering at 61px on one page and 72px on another.
  layout-guard    horizontal overflow and collapsed containers on 9 routes at both
                  widths. Found the mobile homepage rendering with a 0px-wide copy
                  column and 126px of sideways scroll.
  alignment       distance from the shell edge to every block of copy. Found five
                  different content insets, so nothing shared an axis with anything.
  functional      add to cart, the sell gate under a DOM-bypass attempt, the full
                  five-step checkout, card-data leakage, and search.

The sell gate check is deliberately adversarial: it re-enables a disabled button
in the DOM and clicks it, because disabling a control is a courtesy and the gate
in addToCart is what actually prevents an unsellable line.

Current state: functional all green, contrast 0, layout guard clean.
The probe found 85 distinct controls under 44px at 390, most of them inline links
rendering 18px tall in the footer and navigation, which is a miss-tap on a phone.

Links now carry min-height 44 with inline-flex centring and a negative block
margin so the visual rhythm of the footer columns is unchanged. The drawer
cross-sell action and the quantity steppers get the same floor. Everything is
inside a max-width 640 block, so desktop density is untouched.

  mobile targets under 44px   85 -> 48

The 48 that remain are mostly the wordmark, which is a logo rather than a control,
and small inline glyph links inside body copy where a 44px box would break the
line rhythm. Contrast stays at 0 and the layout guard is clean.
The last values off the spacing grid were not written by us. Paragraphs and lists
inherit a 1em block margin from the user-agent stylesheet, which at a 15px base
resolves to 15px and sits between --s-3 and --s-4. Anywhere a rule did not set
margin explicitly, vertical rhythm silently fell off the scale. Normalised to
--s-4, with first and last child margins collapsed so container padding governs
the edges rather than doubling up.

Button interiors were 14px and 6px, both off the scale, now --s-4 and --s-2.

  off-grid declarations, excluding 1-2px hairlines   50 -> 23

What remains is genuinely sub-grid: hairline compensations on bordered controls,
and computed values like the trust strip's 60px gutter which is the shell inset
rather than a spacing decision.

Functional all green, contrast 0, layout guard clean.
Five agents each took one surface, measured it, and returned anchored patches.
All 33 applied with zero rejections.

The proof card was a 200px sticker on the photograph at 1440 and display:none at
390, so the one contrast this catalog is built on did not exist on a phone at all.
It moves into the copy column and becomes a record: subject and lot, the method
beside each measured value, and the unreported row inside the same table rather
than in a footnote. Reported values hold in ink, the unreported row recedes. That
is the grammar the dark testing band already used.

The trust strip restated the nav and said "testing status on every item" for the
third time in one viewport. It now carries facts a buyer checks: 10 compounds of
which 8 sellable, lyophilized 5 to 20 mg, RP-HPLC and ESI-MS, lot named on every
cart line.

Product cards had inverted hierarchy, a 38px price beside a 228px button, four of
them forming one continuous blue bar. Price now leads and carries its lot.

Category tiles held a label and a stranded arrow with roughly 128px of void
between them. They now list what is actually in each category.

Set cards were 548px tall for four lines with 90px of white above the name, and
all three shared one photograph so the rail read as a rendering fault. Restructured
so the image is no longer dominant. The unavailable set now explains itself
inline instead of showing a grey blob.

The newsletter band is removed. It was the loudest surface on the page, spent on
the lowest-value action, and there is no email programme behind it.

The footer now names the operator, states that analytical work is done by an
independent contract laboratory and that OVO Labs runs no release testing of its
own, and commits to a response window.

All four harnesses green: functional, layout guard, contrast 0, and no regression
in type pairs, colours or grid.
Ran the qa skill properly rather than relying on the five-assertion smoke test.
26 routes, interaction flows, and edge cases.

Results: 0 critical, 0 high. Two reported failures were my test being wrong, not
the site. The empty-state check read only the first 200 characters of body text,
which is the disclosure banner, so it missed "Your cart is empty." and "There is
nothing to check out." further down. The unlabeled-control check ignored nested
img alt text, and the cart row image link is named by alt="BPC-157".

The third was real and worse than a bug. Every drawer verification in this
session used the selector .cart-button, which has never existed in this codebase.
The trigger has always been [data-cart-open]. Clicking a selector that matches
nothing throws no error, so the checks reported success while exercising nothing.

Tested with the correct selector, the drawer passes 9 for 9: opens, renders the
line, shows shipping progress and cross-sell, correct checkout link, moves focus
in, closes on Escape, quantity works, cross-sell add works.

Three harnesses added: route-sweep, flows, drawer. flows.mjs now asserts the
trigger exists before clicking and fails loudly if a selector disappears, so a
rename cannot produce a silent pass again.

Also verified: promo codes accept valid and reject invalid, decrementing quantity
from one removes the line, the checkout draft survives a reload, the back button
works, the testing lookup handles a no-match, and a missing page does not 200.
Two defects visible on the desktop cart drawer, both mine.

.drawer-cross carried `margin: auto ...`. In a flex column an auto top margin
absorbs all free space, so a one-line cart pushed the cross-sell to the bottom
and opened a 308px void directly under the item. Removing it moved the void
below the cross-sell rather than closing it, because a drawer footer is
bottom-anchored by design and short content always leaves slack. Two changes
close it properly: the suggestion count now scales with cart length, four
suggestions for a one-line cart down to one for a full cart, and the tinted
panel takes flex 1 so it absorbs whatever the footer leaves over.

  gap under the item      308px -> 24px
  void above the footer   320px -> 0px

The quantity stepper was spilling its own border box. An earlier touch-target
pass set min-width and min-height 32px on .mini-quantity button, but the
container is a 28/28/28 grid at 29px tall, so the buttons were larger than their
cells and overflowed: the outline read as broken and the container's bottom
border showed through beneath the value. The ::after already supplies a 44px hit
area, so the min-size was both redundant and destructive. Removed, and the
mobile override is now scoped to .quantity-control only. Radius moved from a
hardcoded 4px onto --r-sm.

Verified: no button spills its box, drawer passes 9 for 9, layout guard clean.
@alexmwein

Copy link
Copy Markdown
Author

Added an isolated female-first OVO Labs palette pilot in commit c2313a5c.

Preview route: biologix-strategy-board/ovo-labs-warm/palette-preview/index.html

Palette mapping:

  • warm ivory background
  • deep espresso typography and dark surfaces
  • muted clay rose for actions and navigation
  • sage reserved for reported testing/evidence states

Verification: 1440x1000 and 390x844 renders, zero horizontal overflow, all images loaded, no console errors, and the inherited add-to-cart interaction increments the cart count.

@alexmwein

Copy link
Copy Markdown
Author

Palette refinement from Alex’s visual feedback: replaced the brown-leaning clay action token with a cleaner berry coral (#B34A5D), plus a deeper hover (#8E3348) and pale tint (#FBF2F4). Ivory, espresso, and evidence sage remain unchanged. Verified again at 1440×1000 and 390×844 with zero overflow, zero broken images, and no console errors. Commit: 7b361264.

alexmwein and others added 15 commits July 25, 2026 22:32
…rances

Conversion work for a category where the buyer's whole question is whether the
material is real. Every claim is bound to data the catalog already holds, so
nothing here contradicts the site's own records.

On "3x tested": the records show one report per lot, not three, so that exact
phrase would have argued with the analytical panel two scrolls down. The true
equivalent is that each lot carries three checks, identity, content and purity,
each with its own method. That is what the buy box now says.

Buy box, six checkmarks, all lot-bound:
  Third-party verified, analysed by an independent US laboratory, never in-house
  Three checks on lot TZ-2410-B, identity, content and purity, reported 2026-06-11
  99.4% purity by RP-HPLC area %, published with its method
  Cold chain available, insulated mailer standard, gel pack and logger at checkout
  Arrives wrong or damaged, we fix it, replacement or refund
  Free shipping over $500, flat $12 below that

The purity figure and the lot are read from that entry's own TESTING record, so
each product states its own number rather than a catalog-wide boast.

Trust strip now carries the catalog-wide floor, "every lot 98% or higher",
measured across all ten published lots where the minimum is 98.2%.

Checkout gains an assurance row directly under the order total, the highest
abandonment surface on the site: encrypted checkout, plain packaging, cold chain
with a temperature logger, damaged or wrong replaced or refunded.

The analytical panel gains a verified badge naming the independent US laboratory.

Also fixed three list items left from the previous markup with no icon element.
They fell into the 15px icon column of the new grid and rendered one word per
line, which is how "Free standard shipping over $500" was displaying.

Still refused: fabricated reviews, ratings, customer counts, countdown timers,
invented certifications, GMP or FDA language, and any human-use claim.

Verified: 26 routes 0 critical 0 high, contrast still 0 across 30 combos,
functional all green, layout guard clean.
Two defects the owner found in a screenshot that every automated check passed.

The drawer Checkout button had its label pinned to the top of the box. Measured:
46px tall, text 2px from the top and 28px from the bottom. Cause was
display:block combined with a min-height from the touch-target pass. align-items
does nothing on a block, so the label never centred. Now inline-grid with
place-items centre, measured at 14px top and 16px bottom. Applied to every
button that is sized by min-height, since the same defect was latent on all of
them.

The trust block was six full sentences at the decision point. That is a wall a
buyer skips rather than reads, which suppresses conversion instead of helping it.
Same facts, now six badges scannable in about a second:

  99.4% purity · Third-party tested · US lab verified
  Cold chain ready · Free over $500 · Damage covered

The purity figure is still read from that entry's own lot record, so each product
states its own number.

The layout guard then caught a regression I had just introduced: the unsellable
product variant still carried sentence-length copy, which inherited the badge
rule's white-space nowrap and overflowed the retatrutide page by 129px at 390.
That variant is now badges too.

Verified: layout guard clean at both widths, functional all green, drawer 9 for 9,
contrast still 0 across 30 combos.
The marks were six full sentences sitting below the spec tiles. Two problems:
length, since nobody reads six lines of prose at a decision point, and position,
since they were nowhere near the button the buyer is looking at.

Now four marks on one line, directly under Add to cart:

  99.4% purity · Third-party tested · Cold chain ready · Free over $500

Styling is deliberately quiet. A check in verified green against muted text, no
filled pill. A row of saturated badges reads as marketing, and this catalog's
whole argument is that it is not making marketing claims. The purity figure is
still read from that entry's own lot record, so each product states its own
number rather than a catalog-wide boast.

The same treatment now runs across the funnel:
  catalog card   leads its testing line with the purity figure
  product page   four marks under the CTA
  checkout       Encrypted · Plain packaging · Cold chain · Damage covered,
                 one line under the order total instead of four stacked sentences

The unavailable variant gets three marks rather than four, dropping the shipping
line that cannot apply.

Verified: layout guard clean at both widths, 26 routes 0 critical 0 high,
functional all green, contrast still 0 across 30 combos.
…leaked comment

Six inspectors, 1,703 tool calls. Five returned before the process exited,
reporting 52 measured findings, 18 of them high. Twenty-one patches applied plus
three fixed by hand.

Three defects were shipping and visible:

A JSX-style comment, {/* ... */}, was written inside a plain JS template literal
on the cart page. Template literals do not have comments, so the entire block was
rendering as literal text between the cart rows and the actions.

The discount Apply button on the checkout page had no handler at all.
bindPromoForm returned early unless PAGE was "cart", and then bound only the
first matching form on the document. Two promo forms exist, one on the cart and
one in the checkout summary, so the checkout button looked interactive and did
nothing. That is the exact class of control this project forbids.

The PDP quantity buttons were spilling their own grid cells. .quantity-control is
a 34px/1fr/34px grid, and my own mobile touch-target rule sized its buttons to
44px. This is the third time this defect has appeared and the second time I
caused it: I had scoped the earlier fix TO .quantity-control, which is precisely
where it breaks. Hit area comes from the ::after, which is already 44px.

Also corrected from the team's report: the Phone field labelled optional while
carrying a required attribute, stepper pills rendered as disabled buttons, the
blocked checkout CTA dimming its whole subtree with opacity, the cart count badge
hide logic, and trailing arrows breaking under an inline-grid button rule.

Two harnesses added, and one of my own tests was wrong: flows.mjs read only the
first 200 characters of body text when checking empty states, which is the
disclosure banner, so it reported two false failures. box-containment.mjs is new
and checks the defect class my other harnesses were blind to, a child sized
larger than its parent's border box.

Verified: 26 routes 0 critical 0 high, layout guard clean, functional green,
drawer 9 for 9, flows 10 for 10, contrast still 0 across 30 combos.
The retatrutide storefront census (84-112 confirmed US storefronts) and
the social/affiliate recon were the only competitor research still
living exclusively in the gitignored .context directory. Everything else
from the 2026-07-27 sweep -- catalogs, checkout matrix, processor census,
traffic/revenue model -- was already archived here. These two complete
the set so the brand intelligence survives this machine.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Quantifies what the storefront census did not: buyer-pool size, search
trajectory, community growth, and the buy-intent SERP landscape.

Key findings: the reta-specific buyer pool triangulates to the low-to-mid
hundreds of thousands, not millions; search interest crossed above
semaglutide but is down 25-30% off the May 2026 TRIUMPH-1 spike with no
catalyst until Lilly files in Q1 2027; vendor supply is growing faster
than demand (Finnrick 179 -> 239 in two months); and Google ranks
month-old vendor domains at #1 on transactional queries, so SEO entry is
weeks not years -- while Bing sells the ads Google refuses, with only
about three vendors bidding.

Sources and confidence levels are recorded per dimension. Absolute
search-volume figures published for this term disagree by two orders of
magnitude and are flagged as unreliable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant