VARNI STOREFRONTS · LAUNCH-READINESS AUDIT · 2026-07-13
Live site: https://website-44.varnijewels.com — brand-new deployment on svelte-commerce, shared api.varnijewels.com catalogue, Dokploy hosting.
Full guest journey walked in a real browser (home → megamenu → PLP filters/sort → PDP gallery/variants → add to cart → cart → checkout contact/address/shipping). Lighthouse run mobile + desktop. Headers, robots.txt, sitemap, structured data and 15+ URLs checked via curl. Report-only — no payment credentials entered, no purchase completed (checkout verified through shipping-cost calculation; the payment step itself is MANUAL/blocked by design).
Externally verified where a live check exists. Infra-only items are marked MANUAL and excluded from the average.
| Category | Score | Verdict | Key defects |
|---|---|---|---|
| 1. Core functionality | 76 | warn | 2 |
| 2. Performance / Core Web Vitals | 88 | pass | 1 |
| 3. SEO (technical) | 42 | fail | 6 |
| 4. Security (headers + surface) | 28 | fail | 3 |
| 5. Frontend / responsive | 80 | pass | 1 |
| 6. Backend (observable + MANUAL) | — | manual | 1 |
| 7. Analytics & tracking | 8 | fail | 1 |
| 8. Accessibility (WCAG) | 74 | warn | 3 |
| 8b. Brand consistency | 10 | fail | 6 |
| 9. Marketing readiness | 22 | fail | 4 |
| 10. Monitoring & maintenance | — | manual | 0 |
Average of the 9 scored categories (backend and monitoring excluded as MANUAL) = 48/100.
Jewelry-ecommerce weighting model, each section scored 0–10 against what was actually observed.
| Section | Weight | Score /10 | Weighted | Why |
|---|---|---|---|---|
| 1. Brand identity | 15% | 3 | 0.45 | Wordmark is the literal placeholder "Website-44"; supplier and third-party brand text leak into copy; favicon is a raw product photo, not a mark. |
| 2. Homepage UX | 15% | 4 | 0.60 | Hero/CTA/collections work; "Our Stores" section is a large block of unfinished placeholder content live on the homepage. |
| 3. Navigation & IA | 15% | 7 | 1.05 | Header, mega-nav, search, cart, filters, sort, breadcrumbs all present and working; a ring is reachable in ≤3 clicks. |
| 4. Product pages | 20% | 6 | 1.20 | Real photography, working variant switching with legible selected state, specs/SKU shown; no reviews, certificates, or related products observed; description leaks a competitor brand. |
| 5. Checkout & conversion | 15% | 6 | 0.90 | Guest checkout, address validation and shipping-cost calc all correct; no step progress indicator; payment step not reached (by design). |
| 6. Mobile experience | 10% | 7 | 0.70 | No horizontal scroll, responsive layout, checkout usable on a 485px viewport. |
| 7. Performance & accessibility | 5% | 7 | 0.35 | Strong CWV (LCP 839ms, CLS 0.00); a11y 96/100 but real contrast and label-name defects found. |
| 8. Trust & SEO | 5% | 3 | 0.15 | Valid SSL and policy pages resolve; sitemap is broken, soft-404s are indexable, no reviews/ratings. |
| Weighted total | 5.40/10 | |||
mcp chrome-devtools lighthouse_audit (mobile + desktop navigation mode) and a live performance trace, no throttling.
| Metric | Mobile | Desktop |
|---|---|---|
| Accessibility | 96 | 96 |
| Best Practices | 96 | 96 |
| SEO (automated) | 100 | 100 |
| Agentic Browsing | 67 | 67 |
Lighthouse's SEO=100 is a structural check only (title/meta/crawlable exist) — it does not catch the content-level SEO defects in the findings below (broken sitemap, soft-404 indexation, duplicate content, placeholder metadata).
| Core Web Vital (lab, home page) | Value | Threshold | Result |
|---|---|---|---|
| LCP | 839 ms | < 2500 ms | pass |
| CLS | 0.00 | < 0.1 | pass |
| TTFB (LCP breakdown) | 738 ms | < 800 ms good | warn |
curl -I https://website-44.varnijewels.com/
| Header | Present | Value |
|---|---|---|
| Strict-Transport-Security (HSTS) | missing | — |
| Content-Security-Policy | missing | — |
| X-Frame-Options | missing | — |
| X-Content-Type-Options | missing | — |
| Referrer-Policy | missing | — |
| Permissions-Policy | missing | — |
| Set-Cookie (litekart_store_id) | present, unsafe | Max-Age=31536000; Path=/ — no Secure, no HttpOnly, no SameSite |
| HTTPS + valid cert (apex) | pass | HTTP→HTTPS 301 works; Cloudflare-issued cert valid |
| www subdomain | broken | https://www.website-44.varnijewels.com fails TLS handshake entirely (no cert configured) |
MANUAL / infra (not externally verifiable): WAF/rate-limiting, admin-panel MFA, SQL-injection protection, dependency/plugin vuln scanning, backup cadence. Ask the Dokploy/Cloudflare owner to confirm these fleet-wide.
17 findings. shared = shared-backend/platform, affects the whole fleet, not just website-44. store = fixable directly in the website-44 theme.
Every brand surface — <title>, meta description, OG title/description/site_name, Twitter card, the JSON-LD Organization name, the H1 wordmark, the header/footer wordmark and the footer tagline — reads "Website-44", the internal project codename, not a real jewelry brand. This is separate from (and precedes) the known JewelWeSell leak: it is the theme's own themeContent.brandName that was never set. 38 occurrences found on the homepage HTML alone.
Fix: Set a real approved brand name in the website-44 theme config (themeContent.brandName) and re-generate the copy that derives from it (title templates, OG, JSON-LD, hero, footer). This is the single highest-impact fix — right now every first-touch surface reads as an unfinished build.
The homepage ships a section literally reading "Showroom locations are being confirmed — replace these with the real Website-44 network before launch." followed by 9 store cards ("Website-44 North/South/East/…/Garden"), each captioned "Location to be confirmed." This is an internal TODO note shipped to customers, and it occupies a large share of the homepage's scroll depth. The matching footer link "Our stores" (/p/our-stores) returns a hard 404.
Fix: Remove or hide the Our Stores section until real showroom data exists, or replace the placeholder copy/cards with real locations (or an honest "online-only" statement). Fix or remove the dead footer link.
The Organization JSON-LD on every page publishes businessPhone: "(973) 399-9115", businessEmail: "[email protected]" and a physical address ("1060 Springfield Ave, Irvington Township, NJ 07111"). The same email and phone also render as live mailto:/tel: links in the mobile navigation's "SUPPORT" section — visible to every shopper, not just in hidden markup. This is a different and more serious defect than the known "JewelWeSell" text leak: it exposes a real business's actual contact channel as if it were Website-44's own support line.
Fix: Source contact details from the theme's own config, not the shared API store account's business fields. Flag to the platform team — this affects every store on the shared account until the API-level business contact fields are scrubbed or overridden per-store.
Confirmed live. PDP <title> ends "… | JewelWeSell"; meta description reads "Say yes to forever with JewelWeSells Emerald Cut Diamond Halo Engagement Ring…" (note also the ungrammatical "JewelWeSells"); the product description body repeats "JewelWeSell" three times including "Presented in a JewelWeSell signature gift box." The PLP HTML for /jewelry-rings contains 25 occurrences of "JewelWeSell" in embedded product/tag data.
Fix: Per the existing project note, this is shared-backend catalogue metadata (product metaTitle/metaDescription/body). Needs a catalogue-side scrub or a per-store text-replace at render time.
robots.txt correctly declares Sitemap: https://website-44.varnijewels.com/sitemaps/website-44.varnijewels.com-sitemaps/sitemap_index.xml, but fetching it returns a JSON error body, not XML: {"message":"Sitemap not found, you can generate sitemap through the admin dashboard."}. No sitemap has ever been generated for this store.
Fix: Generate the sitemap from the Litekart admin dashboard (per the error message itself) for this store, and check whether the same is missing across the rest of the fleet.
Any slug that isn't a real category — e.g. /rings, and even the intended /about and /contact — resolves through the bare [slug] product-listing route and renders "NO PRODUCTS FOUND" with a generic <title>Products</title>, HTTP 200, and a self-referencing canonical tag (e.g. canonical href="https://website-44.varnijewels.com/rings") and no noindex meta robots tag. Search engines have no signal to treat these as non-pages; each one is crawlable, indexable, thin/empty content.
Fix: When the slug route resolves zero products and isn't a known category, return a real 404 (or at minimum inject <meta name="robots" content="noindex"> and drop the self-canonical) instead of a 200 empty catalogue page.
Store plugin config ships googleAnalytics:{}, googleTagManager:{id:"",active:false}, facebookPixel:{} — all inactive/empty. Confirmed via full network capture across home, PDP, cart and checkout: zero analytics/marketing beacons fired anywhere in the session, no dataLayer, no consent/cookie banner. There is currently no way to measure traffic, funnel drop-off, or conversions on this store.
Fix: Enable GA4 (and GTM if used) with an Enhanced-Ecommerce/dataLayer wire-up (view_item, add_to_cart, begin_checkout, purchase) in the store's plugin settings.
The structured-data Organization block's url field is double-prefixed: "url":"https://https://website-44.varnijewels.com". This will fail schema validation and rich-result eligibility.
Fix: Likely a shared SEO-header component prefixing an already-absolute store URL with another scheme. Check the shared kitcommerce-core seo-header component (same one responsible for the store.name leak per prior fleet notes) and verify across other stores.
Every category page — /jewelry, /jewelry-rings, /jewelry-earrings and any invented slug — shares the identical <title>Products</title> and the identical meta description "Discover the best deals at Website-44. Free delivery available." No category-specific title/description exists, which both weakens click-through in search and risks duplicate-metadata flags.
Fix: Template the PLP title/description from the resolved category name, e.g. "Rings — Certified Diamond Jewellery | <brand>".
Browsing /jewelry-rings surfaces long runs of what appear to be the same product re-listed under numbered suffixes — e.g. "5 Carat Pear Cut Center Stone Diamond Halo Engagement Ring for Women, 14K Yellow Gold…" appears as separate catalogue entries suffixed -1 through at least -19, each with its own product URL and identical title/price/description. This is a catalogue data-quality issue that both dilutes the shopping experience (endless scrolling through what looks like one product) and risks duplicate-content SEO penalties.
Fix: Flag to the catalogue/API team — this is shared backend product data, not a theme issue. De-duplicate or merge into a single product with size/quantity variants.
The footer's "Contact us" link resolves correctly (200) but its <title> is the generic framework default "Contact Us | Svelte Commerce" — the literal name of the underlying app framework, never replaced with the store's own branding. This is the one page in the audited set that wasn't themed at all.
Fix: Set page metadata for the contact-us route in the theme, same pattern as other themed pages.
On /checkout/address, the email and phone inputs trigger three DevTools accessibility issues: "No label associated with a form field" (×2), "A form field element should have an id or name attribute" (×2), "Incorrect use of <label for=FORM_ELEMENT>" (×2). This is the highest-value form on the site — a screen-reader user cannot reliably identify these two required fields.
Fix: Add matching id/for (or wrap input in the label) on the checkout contact-details component. Likely a shared kitcommerce-core checkout component — verify across the fleet.
Lighthouse flags the "33% OFF" badge on every product card (home rails and every PLP) at a contrast ratio of 2.26:1 (green #5dc241 on white), against a 4.5:1 requirement for 12px text. This repeats on every product card sitewide.
Fix: Darken the discount-badge green (theme token) to meet 4.5:1 against white, e.g. a deeper #2f7d1e-class green.
Every product-card image link has aria-label="View details of " with the product name missing, and every quick-add button has aria-label="Add to bag" (double space, name also missing). Lighthouse's label-content-name-mismatch audit flags these — visible text ("QUICK ADD") isn't included in the accessible name, and the intended product name never made it into the label at all.
Fix: Interpolate the product title into both aria-labels. Likely a shared ProductCard component — check whether other stores show the same empty interpolation.
The site's favicon/apple-touch-icon resolves to https://static.varnijewels.com/stores/store_.../products/20260704/frame-150607-um6zraz0pth6.jpg — a JPEG product photo from the catalogue, not a designed icon. It renders as an illegible thumbnail in a browser tab.
Fix: Set a proper favicon (wordmark-derived icon) in the theme; don't fall back to a random catalogue image.
Store config explicitly disables newsletter capture (newsletter:{active:false}), and no Instagram/Facebook/Pinterest/TikTok links exist in the header or footer. For a jewelry DTC brand this removes two standard trust/remarketing channels entirely.
Fix: Enable newsletter capture and add real (not placeholder) social profile links once accounts exist.
https://www.website-44.varnijewels.com fails the SSL handshake entirely rather than redirecting to the apex domain. Anyone who types or is autocompleted to the www. form hits a hard connection failure.
Fix: Add the www subdomain to the Dokploy/Cloudflare cert and redirect it to the apex domain.
Clicked through Metal Color, Center Stone and Ring Size option groups on a live PDP. Selected chip renders a solid maroon/pink fill with white text; unselected chips keep a white background with a grey border and dark text. Contrast and distinguishability are unmistakable in every group — no invisible or indistinguishable selected state found.
No action needed.
Opened the mobile hamburger/sidenav: it shows "Website-44" consistently with the header, footer and page titles — it does not show the unrebranded API store account name. The theme's brandName correctly wins over storeData?.name on every nav surface checked. (The brand-name text itself is still a placeholder — see the critical finding above — but the parity mechanism is correct.)
No action needed on parity; still need a real brand name (see critical finding #1).
Home → category tiles/megamenu → PLP (filters: Categories/Tags/Price/Carat Weight/Center Stone/Metal Color/Ring Size, plus Sort) → PDP (5-image gallery, 4 variant groups, live price/SKU update on variant change) → Add to Bag (cart drawer opens as sole confirmation, no duplicate toast) → cart (qty stepper, remove, correct subtotal) → checkout contact details → address form (validation, modal) → shipping cost calculated correctly ($100 flat, total recomputed to $2198.99) → reached "Continue to Payment." No console errors throughout except the expected guest-wishlist 422 (documented as expected, not a bug). Payment/order-confirmation/order-notification (email + Telegram) were not exercised — MANUAL, blocked by design (never enter payment or complete a real purchase).
Manual follow-up: Ops team to complete one real test order end-to-end (payment → confirmation → email + Telegram @varni_alerts_bot notification) outside of this automated audit.
Timed/observed task runs against the live site, guest session, mobile viewport (485px) unless noted.
| Task | Result | Clicks | Ease (1–5) | Notes |
|---|---|---|---|---|
| Find a ring under $1,000 | done | 2 | 5 | Home → Shop by Category → Rings; $599.99 ring visible without needing to filter. |
| Open filters (price/material/size) | partial | 1 | — | Filter drawer opens with all 7 facets (Categories, Tags, Price, Carat Weight, Center Stone, Metal Color, Ring Size); applying a filter and verifying the result count was not exercised in this run — flagged as a coverage gap, not a defect. |
| Add an item to cart | done | 1 | 5 | Cart drawer opens instantly with correct item, price and running subtotal. |
| Remove an item | observed only | — | — | Remove-item control is present and reachable in both the cart drawer and cart page; not executed in this run. |
| Proceed through checkout (no payment) | done | 5 | 5 | Cart → Checkout → contact details → address (modal, validated) → shipping cost correctly calculated → reached Continue to Payment. |
| Complete checkout (payment) | blocked | — | — | Not attempted — no payment credentials entered per audit rules. |
| Locate shipping & returns policy | done | 1 | 5 | Footer → Shipping policy / Refund policy, both resolve 200. |
| Contact support | partial | 1 | 3 | /contact-us resolves, but its title tag is unbranded ("Svelte Commerce"), and the mobile-nav quick contact links point to a third party's real phone/email, not Website-44's own. |
| Priority | Issue | Impact | Effort |
|---|---|---|---|
| High | Replace placeholder brand name "Website-44" with a real approved brand across title/meta/OG/JSON-LD/H1/footer | High — fixes the site's entire first impression | Low |
| High | Remove/replace the "Our Stores" placeholder section and fix the dead /p/our-stores footer link | High — visible dev TODO note live to customers | Low |
| High | Scrub JewelWeSell text and the Boris&Twins phone/email/address out of copy and JSON-LD | High — trust/legal + brand | Medium (shared backend) |
| High | Generate sitemap.xml; stop serving soft-404s as indexable 200s | High — SEO indexation | Medium (shared backend/platform) |
| High | Add CSP/X-Frame-Options/X-Content-Type-Options/Referrer-Policy/Permissions-Policy/HSTS + secure cookie flags | High — baseline security posture | Medium (shared infra) |
| Medium | Enable GA4/GTM with Enhanced-Ecommerce events | Medium-High — zero funnel visibility today | Low |
| Medium | Fix discount-badge contrast + empty aria-labels on product cards + checkout form label association | Medium — WCAG conformance | Low |
| Medium | Fix /contact-us "Svelte Commerce" title; give every PLP a unique title/description | Medium — SEO + polish | Low |
| Medium | Fix www subdomain TLS/redirect | Medium | Low |
| Low | Add newsletter capture and real social profile links; add reviews/trust bar | Medium — conversion/trust | Medium |
| Low | De-duplicate near-identical Rings catalogue listings | Low-Medium — thin/duplicate content | Medium (shared catalogue) |
| Low | Replace the 37 SVG placeholder theme images with real photography (known issue) | Medium | Medium-High |
Infra items that require dashboard/ops access — not scored, listed for the ops team to confirm.
| Item | Where to check |
|---|---|
| Order confirmation email + Telegram @varni_alerts_bot notification on a completed order | Complete one real test order end-to-end |
| DB query performance/indexing, background jobs/cron, queue health | Backend/API infra, Dokploy logs |
| WAF/rate-limiting, admin-panel MFA, SQLi protection, dependency vuln scanning | Cloudflare/Dokploy/API admin |
| Uptime, error-rate, SSL-expiry, CDN and DB health monitoring | Ops/monitoring stack — none observed configured from outside |
| Backup verification cadence | Ops/infra owner |