Oops Nails is a genuinely well-built Shopify store — and that is the most important context for everything that follows. The catalogue is deep (1,500+ products across 250 collections from Staleks, Saeyang, DNKa', BIBLIOTEKA, Nails Of The Day and others), the faceted filtering is better than most stores we audit (15 facets including head diameter, abrasive grit and rotation speed), all 14 footer links return HTTP 200, product descriptions are present on 100% of sampled products, and the trust stack is exceptional: seQura and Klarna instalments, 12 payment methods, WhatsApp support staffed by a beauty advisor, a live loyalty programme, 2-hour local pickup in Barcelona, and free shipping over €95. This is not a store that needs rebuilding. It is a store leaking revenue through a small number of very specific, very fixable gaps.
The single largest gap is the cart. The store advertises free shipping over €95 in the announcement bar, in the hero trust row and in the footer — but the cart never tells the customer how close they are to it. We added a €5.90 item and the cart offered no progress indicator, no upsell and no recommendations; just an empty column beside the totals. For a consumables business where salons buy gel, tips, files and gloves in bulk, a free-shipping progress bar plus a cart upsell block is the highest-ROI change available and it costs a fraction of a day's development.
The second gap is mobile purchase friction. There is no sticky Add-to-Cart on mobile. The button sits roughly 1,156px down the page; the moment a customer scrolls to read the description or the reviews, both the price and the buy button vanish with no way back except scrolling up. Compounding this, the product page scores 68/100 on mobile PageSpeed with an LCP of 5.6 seconds — more than double Google's 2.5s threshold, measured on the exact pages where purchase decisions are made. The header is also not sticky anywhere on the site, so navigating a 1,500-SKU catalogue means repeatedly scrolling a 9,700px homepage back to the top.
The third gap is that the store has no way to bring visitors back. We found GA4, Google Tag Manager, Meta Pixel and Microsoft Clarity correctly installed — but no email marketing platform (no Klaviyo, Omnisend or Mailchimp), no email-capture popup or welcome offer, and no TikTok pixel despite an active TikTok account linked in the footer. Without an ESP there are no abandoned-cart, abandoned-browse, post-purchase or replenishment flows — and replenishment is precisely where a consumables catalogue makes its repeat revenue. Every euro of TikTok traffic is currently untracked and unretargetable.
Finally, social proof is almost entirely missing at the point of decision. Judge.me is installed correctly — verified-buyer badges, sorting and a photo filter all work — but only ~14% of product cards carry any rating at all, the flagship bestseller we tested showed "Sé el primero en escribir una reseña", and even on products that do have reviews no star rating renders under the product title; a shopper must scroll ~2,600px to discover a rating exists. A distributor with a physical Barcelona showroom has the order volume to be sitting on thousands of reviews. There is also no UGC or Instagram gallery anywhere on the homepage — in a category that is fundamentally visual and inspirational.
Bottom line: the foundations here are strong and the brand presentation is genuinely premium. The gaps are concentrated in the cart, in mobile buy-flow, in retention infrastructure and in review coverage — four areas where the fixes are well-defined, bounded and disproportionately profitable.

The header computes to position: static — it scrolls away permanently. On a homepage measuring 9,702px and a catalogue of 1,500+ products across 250 collections, every navigation action forces the user to scroll all the way back to the top. This is the highest-frequency friction point on the entire site, and it affects every page.
⏱ Estimated: 4 dev hours
Search is hidden behind a magnifier icon positioned top-left, against the near-universal convention of top-right. For a 1,500-SKU professional catalogue, search is the primary discovery path and deserves a visible input field with a placeholder ("Busca marca, tipo, código…"), not a hidden toggle.
⏱ Estimated: 3 dev hours
The menu wraps onto two lines (~145px of vertical space) because 11 top-level items don't fit on one. Combined with the non-sticky behaviour, this is a large permanent cost to first-screen real estate that delivers no ongoing benefit.
⏱ Estimated: included in sticky header
Rotates through 8 genuinely useful messages: free shipping over €95 (Península y Baleares), official distributor status, physical Barcelona store, seQura instalments in 3/6/12 months, and Nacex 24–48h delivery. Specific, concrete and trust-building — far better than the usual generic "FREE SHIPPING" banner.
11 logical top-level categories (Bestsellers, Consumibles, Materiales, Herramientas, Diseños, Equipo, Fresas, Ofertas & Kits, Qué Hay de Nuevo, Marcas, Información). For a 1,500-product catalogue this shows real information-architecture discipline — no category overload.
Tested live: "lampara" returned Lámpara "ONail AI" and Lámpara SUN3 48W, plus 1 collection and 3 query suggestions — and it matched correctly despite the missing accent. The underlying search quality is good.
Account icon, cart with a live item badge, and a language/country selector (11+ EU markets with correct currencies) are all present top-right on every page.
Black text on white throughout the header, with the pink brand accent reserved for the active state. Highly legible and accessible.

The hero establishes authority through "Distribuidor Oficial" but carries no quantified proof — no aggregate rating, no customer count, no years in business, no "+X profesionales confían en nosotros". In a B2B-leaning professional-supply category buyers choose a distributor on credibility, and a single proof number in the hero is the cheapest way to supply it.
⏱ Estimated: 2 dev hours
On a 390×844 viewport the hero image collapses to roughly 155px tall, cropping the featured lamp and e-file so the products are barely identifiable. The desktop composition is excellent; the mobile crop discards most of it.
⏱ Estimated: 2 dev hours
"Todo para una manicura profesional" with the supporting line "Esmaltes semipermanentes, tornos, lámparas, fresas y materiales para uñas. Envíos a España y la Unión Europea." A visitor knows exactly what is sold and where it ships within one glance.
"DISTRIBUIDOR OFICIAL · BARCELONA & ONLINE" positions the brand as an authorised distributor with a physical presence before the visitor reads anything else — exactly the right first message for this category.
Primary "VER BESTSELLERS" in solid brand pink, secondary "OFERTAS & KITS" as an outline button. Clear visual hierarchy, both fully above the fold on desktop and mobile.
A single static banner rather than a slideshow. This is the correct decision: faster to load, one unambiguous focal point, and no content rotating away before it can be read. Many stores get this wrong; this one does not.
Four icon-led guarantees directly under the fold: Envío gratis +95 €, Pago seguro (Tarjeta · Contra reembolso · seQura), Entrega 24–48 h (Nacex), Distribuidor oficial. Positioned exactly where the first doubt occurs.
Considered typography, generous whitespace and consistent brand-pink accenting. The store genuinely looks like an authorised professional distributor rather than a dropshipper.

Cards link only to the product page — there is no Quick Add control anywhere in the grid. This is the defining friction of a professional-supply store: a salon restocking gloves, files, tips and orange sticks must open and return from a separate page for every single line item. Quick Add on cards (with a variant picker for multi-option SKUs) directly increases both conversion rate and units per order.
⏱ Estimated: 8 dev hours
The store has an active Instagram and TikTok linked in the footer, yet there is no user-generated content block anywhere on the homepage — we verified the full 15-section structure. Nail products are bought on visual inspiration; a shoppable gallery of real work by real technicians is the single best-converting homepage module available in this category, and it is entirely absent.
⏱ Estimated: 6 dev hours
All 5 visible bestseller cards carry an identical teal "Favorito" badge. A badge appearing on 100% of products in a row carries zero differentiating signal — it becomes wallpaper. Reserve it for a genuine subset and diversify the badge vocabulary (Nuevo, Top valorado, Reposición, Últimas unidades).
⏱ Estimated: included in badge rework
Only 29 of 209 rendered cards (≈14%) display any rating. On the bestseller row specifically, 4 of 5 products show nothing. Ratings on cards are one of the strongest click-through drivers in a grid — see Block 09 for the underlying review-coverage problem.
⏱ Estimated: covered in Block 09
The bestsellers module is placed below a full-height collection-list section, putting it roughly two screens down. Social-proof-backed bestsellers are the strongest early merchandising asset and are currently the fourth content block rather than the second.
⏱ Estimated: 1 dev hour
In the bestsellers module the tab labels run under the carousel navigation buttons — "CUIDADO PODOLÓGICO" is visibly truncated mid-word by the arrow controls. A small but visible polish defect on a prominent module.
⏱ Estimated: included in badge rework
"¡Conoce los productos más vendidos!" with six switchable category tabs (Bestsellers, Lámparas, Alicates, Pinceles, Cuidado de Manos, Cuidado Podológico) lets very different buyer types self-select from one compact module. Genuinely smart merchandising.
181 of 209 rendered cards carry a second image and swap correctly on hover, letting shoppers see an alternate angle without leaving the grid.
Percentage badges (−35%, −15%) and "Oferta" labels appear only on products that are actually discounted, and they are paired with real strikethrough pricing (€45,00 → €39,00). No invented anchor prices — this is honest, credible merchandising.
Every card shows a clean EUR price in high contrast, with no hidden "from" pricing games.
A prominent "VER TODO" button closes the bestsellers module, giving engaged browsers an obvious next step into the full collection.

The homepage carries a well-built FAQ section ("¿Tienes preguntas? Obtén respuestas."), but there is no route to it from the footer. The content already exists and is well written — it is simply unreachable from the one place users reflexively look for it.
⏱ Estimated: 1 dev hour
The Barcelona showroom address (C/ del Consell de Cent, 64) appears only in a mid-homepage section. For a business whose core differentiator is being a real, physical, official distributor, full NAP details in the footer is both a trust signal and a local-SEO asset that is currently unused.
⏱ Estimated: 1 dev hour
We extracted every internal footer href and tested each one: all 14 return HTTP 200. No 404s anywhere in the footer. This is rarer than it should be and reflects real maintenance discipline.
Datos de envío, Pago con seQura, Devoluciones y cambios, Contacta con nosotros, Política de Privacidad, Política de Cookies and Condiciones Generales de Venta are all present and grouped under a clear "Atención al cliente" heading.
Visa, Mastercard, Maestro, American Express, PayPal, Apple Pay, Google Pay, Klarna, Bancontact, Wero, Cartes Bancaires and UnionPay. Broad EU coverage with BNPL visible at the point of reassurance.
"¿Necesitas ayuda? Escribe a una asesora de belleza por WhatsApp" with the number +34 611 84 90 18 shown as a large tappable link. Offering a named human advisor — not a bot — is a genuine differentiator in professional supply.
Country/currency switching across 11+ EU markets (España, Francia, Portugal, Alemania, Italia, Países Bajos, Bélgica, Austria, Andorra, Luxemburgo, Dinamarca) with correct local currencies. Real cross-border infrastructure.
Instagram and TikTok are linked, and a newsletter capture field sits in a dedicated footer column.
A dedicated "Productos sin stock" link lets professionals check availability directly rather than hunting through collections — a thoughtful touch for trade buyers planning restocks.

On a standard 1440×900 desktop screen the customer lands on a collection and sees no merchandise at all. The title block and banner image consume roughly 330px, then four wrapped rows of filter controls consume another ~180px, pushing the first product row to approximately 760px. A collection page's only job is to show products; this one requires a scroll before it does that. Compact the header and move the 15 facets into a left sidebar or a "Filtrar" drawer.
⏱ Estimated: 6 dev hours
The audited collection returned 0 characters of description. Across 250 collections — many targeting high-intent commercial terms like "base builder gel", "alicates" and "fresas de diamante" — this is a substantial organic-traffic gap. A short, genuinely useful intro paragraph per collection also helps buyers choose between similar categories.
⏱ Estimated: 5 dev hours
Collections use numbered pagination with no infinite scroll or "Cargar más" button. On large collections (157 products in the one tested) pagination measurably reduces the number of products viewed per session versus progressive loading.
⏱ Estimated: 3 dev hours
The H1 is simply "BESTSELLER" — one word, no keywords, no descriptive value. A heading like "Bestsellers — Los productos de manicura profesional más vendidos" serves both the shopper and search.
⏱ Estimated: 2 dev hours
15 facets including Marca, Categoría, Tipo, Colección, Tipo de color, Color, Forma, Punta, Grosor/abrasivo, Diámetro de cabeza, Longitud de la cabeza, Longitud de hoja, Velocidad de rotación, Disponibilidad and Ofertas. These are real professional purchase criteria, not generic defaults — this is the best-executed part of the entire store.
We counted 416 facet labels carrying live product counts, so users know how many results each option yields before clicking — this prevents the dead-end empty-result experience.
The search results page carries the same facet set (Marca, Categoría, Tipo, Colección, Tipo de color, Color, Disponibilidad) plus sorting. Many stores filter collections but leave search unfiltered; this one does not.
"Ordenar por" is present alongside a clear "157 productos" count, so users always know the scope of what they're browsing.
"OOPSNAILS / BESTSELLER" gives clear hierarchical context and a one-click route back up the tree.
We parsed all 1,500 products and found exactly one duplicated product title and only 3 "copy-of-" handles. For a catalogue of this size that is remarkably well maintained — duplicate listings normally fragment reviews and pollute search results.

The audited product exposes five genuine colour options — Negro, Rosa, Violet, Blanco, Azul — as plain text buttons. On a nail products store, where colour is frequently the entire purchase decision, forcing customers to read colour names instead of seeing them is a direct conversion cost. This matters most across the gel polish and Cat Eye lines. Visual colour chips (or variant thumbnails) should replace text pills wherever the option is a colour or finish.
⏱ Estimated: 8 dev hours
No <video> or model-viewer element was found. For the equipment range — e-files, lamps and dust vacuums in the €100–400 band — video is the single most decisive asset: buyers want to see the torque, the noise level, the build quality and the actual cure. Static supplier photos cannot answer those questions.
⏱ Estimated: covered in photography workstream
Own-brand lines (DNKa') have polished, on-brand imagery on consistent lilac backgrounds, while distributed lines use raw supplier box shots on plain white — one card even carries a burnt-in third-party certification sticker. A single "También te puede interesar" row mixed white, orange-gradient, purple and lifestyle backgrounds. The grid reads as inconsistent even though the products are legitimate.
⏱ Estimated: 6 dev hours
The gloves offer XS/S/M/L with no sizing reference, and no size-guide element was found anywhere on the page. Sizing uncertainty on a consumable bought in boxes of 100 drives both hesitation and returns.
⏱ Estimated: 3 dev hours
7 images with a thumbnail strip, navigation arrows and a functioning lightbox/zoom modal. Multiple angles including in-use shots are available.
"OOPSNAILS / Consumibles" appears above the product, giving clear category context and improving both navigation and SEO — the checklist item many Shopify themes skip entirely.
The vendor (e.g. SANTEX) is displayed above the product name. In professional supply, buyers shop by brand first — surfacing it prominently matches real purchase behaviour.
The H1 is set at a genuinely large size in near-black on white, immediately establishing what the customer is looking at.
"€5,90 EUR" shown large, followed by "Impuestos incluidos. Los gastos de envío se calculan en la pantalla de pago" with the shipping policy linked. No tax surprises at checkout.
Brand products carry clean labelled specs (Colección, Tipo de color, El color, Volumen disponible, Artículo/SKU) — exactly the reference data a professional needs to reorder the right item.

No sticky or fixed buy element exists on desktop. Once the customer scrolls into the description, specifications, cross-sell and reviews, the Add-to-Cart button and the price are both gone. On long product pages this forces a scroll back up at precisely the moment intent peaks. (The mobile version of this problem is more severe — see Block 12.)
⏱ Estimated: 3 dev hours
This is the most avoidable miss on the page. The store owns outstanding trust assets — free shipping over €95, returns and exchanges, official distributor status, secure payment, 24–48h Nacex delivery — and displays none of them adjacent to the buy button. They appear in the announcement bar and the footer, but not at the exact moment of decision. A compact three-icon strip directly under the CTA is a few hours of work.
⏱ Estimated: 3 dev hours
No inventory element was found. Professionals restocking consumables respond strongly to genuine availability signals ("Solo quedan 4 unidades", "En stock — listo para envío hoy"). Given real inventory data is available, honest stock messaging is low-risk and effective.
⏱ Estimated: 2 dev hours
"AGREGAR AL CARRITO" is a full-width solid brand-pink button — the single highest-contrast element in the buy column, with no competing CTA stealing attention.
Two live seQura widgets sit immediately beneath the button: "Recibe tu compra antes de pagar" and "Paga a plazos tu compra desde 29,00 €", each with a "+info" expander. For the €100–400 equipment range this is exactly the right financing message in exactly the right place — and Klarna is available at checkout as well.
"Retiro disponible en Oops Nails BCN — Normalmente está listo en 2 horas" with a link to store information. A 2-hour pickup promise from a real Barcelona showroom is a powerful competitive advantage over pure e-commerce rivals, and it is surfaced correctly on the product page.
A −/+ stepper rather than a bare number field — important for a store where orders are frequently multi-unit.
The quantity label updates to "Cantidad (1 en el carrito)", telling the customer what they already have before they add more. A genuinely thoughtful detail that prevents accidental duplicate ordering.
Instalment messaging is handled by seQura and Klarna and is appropriate to the equipment price band — no need for additional BNPL providers. Marked as fully implemented.
With 1,500 SKUs across many colour/size variants, out-of-stock variants are hidden rather than shown, and no sold-out product was encountered during the audit. A back-in-stock notifier would add noise without value here, so this is correctly marked N/A rather than flagged as missing.

No <details> or tab elements were found in the product information area. On simple consumables the description is short enough to work; on the equipment range — where specs, contents, warranty and usage instructions all belong on one page — a flat wall of text pushes reviews and cross-sell far down and buries the details buyers are hunting for.
⏱ Estimated: 4 dev hours
The brand already runs a training arm ("Academia Elena Antul", featured on the homepage) but none of that expertise reaches the product page. Application guidance — cure times, layer counts, compatible bases and tops — reduces both hesitation and post-purchase support load, and it is content the business already owns.
⏱ Estimated: 4 dev hours
We sampled 40 products via the catalogue API: every single one had a real description (zero under 40 characters). Across a 1,500-product distributor catalogue, having no empty product pages is a genuine content achievement.
Descriptions lead with bold labelled facts (Colores disponibles, Tallas disponibles, Cantidad) then explain the actual benefit — e.g. why chlorinated nitrile gloves don't stick together and how they outperform latex with micro-perforations. Specific and useful rather than generic filler.
A compact horizontal upsell showing frequently added companions with price, an inline variant dropdown and a direct "Comprar" button on each — customers can add a complementary item without ever leaving the page. This is a properly implemented upsell and one of the strongest features on the site.
"También te puede interesar" surfaces four genuinely related products (brushes, arm rests, hand rests and kits alongside a gel) rather than random catalogue filler, with live discount badges where applicable.
We scanned all links within the product description area: zero point to external domains. Nothing pulls the customer off-site mid-decision.

Only 29 of 209 rendered product cards (≈14%) carry any rating at all. The bestselling product we audited displayed "Sé el primero en escribir una reseña" — zero reviews — and the top-ranked DNKa' product had exactly one. A distributor with 1,500 SKUs, EU-wide shipping and a physical Barcelona showroom has the order history to be sitting on thousands of reviews. The Judge.me infrastructure is already installed and working; what is missing is the automated post-delivery request flow and a backfill campaign against historical orders.
⏱ Estimated: 6 dev hours
Even on products that do have reviews, no rating badge renders near the H1 — we verified this on a product with a live 5.0 rating and found no preview badge anywhere in the buy column. The rating only exists at the bottom of the page, roughly 2,600px down. A clickable star summary directly beneath the title (anchor-linking to the reviews) is standard practice and is one of the highest-impact single elements on any product page.
⏱ Estimated: included in reviews workstream
Judge.me's "Solo Imágenes" filter is present and functional, but there is no photo content to filter. In a visual category, customer photos of actual manicures are the most persuasive asset available — incentivising photo reviews should be built into the request flow from day one.
⏱ Estimated: included in reviews workstream
There is no store-wide rating, testimonial block or review carousel anywhere on the homepage. Once review volume exists, an aggregate figure ("4.8/5 de X reseñas verificadas") belongs in the hero and near the bestsellers module.
⏱ Estimated: included in hero social proof
The widget renders cleanly in Spanish with a "Verificado" verified-buyer badge, a clear "Escribir una reseña" CTA, working sort controls (Más Recientes, Mayor Calificación, Menor Calificación) and a photo-only filter. The platform work is already done — only the content is missing.
Where reviews exist, star ratings and counts appear correctly on product cards in grids and on the homepage bestsellers module — so the moment coverage improves, the benefit propagates across the catalogue automatically.


The store advertises free shipping over €95 in the announcement bar, in the hero trust row and in the footer — but the cart never mentions it. We added a €5.90 item and the cart gave no indication whatsoever that €89.10 more would unlock free delivery. A progress bar ("Te faltan 89,10 € para el envío gratis") in the cart, in the add-to-cart notification and in the header is the single highest-ROI change available to this store, and for a consumables catalogue where topping up an order is effortless, it is close to free money.
⏱ Estimated: 5 dev hours
The cart page has a large empty column beside the totals and offers no complementary products at all. This is the moment of highest purchase intent in the entire session, and it is completely unmonetised — especially wasteful given the store already has a working recommendation engine ("Top añadidos") on product pages that could be reused directly.
⏱ Estimated: 6 dev hours
We confirmed no cart drawer element exists in the theme; the store uses Dawn's lightweight cart notification instead. Reviewing or editing the cart therefore means a full navigation away from the product the customer was browsing, breaking the multi-item shopping flow that a professional-supply store depends on.
⏱ Estimated: 8 dev hours
A reproducible layout defect: after adding an item, the confirmation popup overlays the right side of the buy column and hides part of the variant options — the Color row was reduced from five visible options (Negro, Rosa, Violet, Blanco, Azul) to two, and Size "L" was partially obscured. A customer wanting to add a second colour or size is physically blocked by the confirmation of the first.
⏱ Estimated: 2 dev hours
The cart carries no payment icons, no returns reminder and no secure-checkout signal — despite 12 payment methods and a clear returns policy existing elsewhere on the site. The final pre-checkout screen is where reassurance matters most.
⏱ Estimated: 2 dev hours
Each line has a −/+ stepper and a dedicated trash icon, so adjusting or removing an item takes a single click with no form resubmission.
110px product thumbnails alongside the full title, unit price and selected variants ("Color: Negro", "Size: XS") — the customer can verify exactly what they're buying at a glance.
"Total estimado €5,90 EUR" sits directly above the checkout button with an honest note that taxes are included and shipping/discounts are calculated at checkout.
Below the primary "PAGAR PEDIDO" button, PayPal and Google Pay express buttons let returning customers skip form entry entirely.
"Inicia sesión para canjear tus puntos por recompensas" appears right above checkout — surfacing the loyalty programme at the exact moment it can influence the decision and drive account creation.
There is no discount-code field on the cart page — it is handled at checkout. This is the correct decision: a visible empty coupon box sends customers off-site hunting for codes they don't have.
"Instrucciones especiales del pedido" is available — valuable for trade customers specifying delivery windows or salon collection details.
The notification confirms the item with a thumbnail and the chosen variants, then offers three sensible paths: "VER CARRITO (1)", "PAGAR PEDIDO" and "Seguir comprando" — the continue-shopping option is correctly present rather than forcing checkout.


Measured font-size: 15px on the body. Beyond general legibility on small screens, sub-16px font sizes on form inputs trigger automatic zoom on iOS Safari — which disrupts the newsletter form, the search field and every checkout input. Raising the base to 16px is a one-line change with disproportionate benefit.
⏱ Estimated: 3 dev hours
We measured the first 60 interactive elements: 34 fall below the 44×44px accessibility minimum, most at 217×40px — only 4px short. Padding these to 44px removes mis-taps on menu and footer links at essentially zero design cost.
⏱ Estimated: included in mobile typography
At 390px width the announcement messages wrap, consuming double the intended header height and pushing the hero further down. Shortening the mobile variants of these messages recovers the space.
⏱ Estimated: included in mobile typography
The hamburger opens a clean full-screen menu with generous ~56px row heights, a clear visual hierarchy, chevrons indicating expandable sections, emoji accents highlighting key categories, and account login plus the country/currency selector docked at the bottom. This is a genuinely well-executed mobile menu.
Both stay accessible beside the logo rather than being buried inside the drawer, and the cart badge correctly displays the live item count.
Document width measured exactly 390px against a 390px viewport — zero horizontal scroll anywhere. Clean responsive implementation.
We waited 8 seconds on a fresh mobile session: no full-screen interstitial, no blocking cookie modal. Nothing obstructs the first impression.
"VER BESTSELLERS" lands at roughly 550px — comfortably within the 844px viewport — with the secondary CTA and trust icons following directly.
Hero, trust bar, product grids, filters, cart and footer all adapt cleanly with no broken elements or clipped content across every template tested.

This is the highest-impact mobile fix available. The Add-to-Cart button sits at approximately 1,156px down the page, and we confirmed no fixed or sticky buy element exists. The screenshot above shows the reality: a customer reading the product description sees no price and no buy button anywhere on screen, with no way to purchase without scrolling back up. Mobile is where the majority of Shopify traffic converts, and every scroll away from the CTA is a conversion leak. A persistent bottom bar carrying price, variant summary and Add-to-Cart resolves it.
⏱ Estimated: 5 dev hours
Because the price lives only in the buy column, it scrolls out of view with the CTA. Customers comparing options while reading specifications have no persistent price reference — the sticky bar should carry the live variant price, not just the button.
⏱ Estimated: included in sticky ATC
The mobile gallery uses a native slider component, so images can be swiped through with standard touch gestures rather than requiring thumbnail taps.
The quantity field is type="number", so mobile devices present the numeric keypad rather than the full alphabetic keyboard — meaningful for a store where multi-unit orders are routine.
Gallery, title, price, variant pills, quantity and CTA stack in a logical single column with comfortable spacing and no clipped content or overflow.
Product pages score 68/100 on mobile with a Largest Contentful Paint of 5.6 s — more than double Google's 2.5 s threshold, and the slowest template on the site. These are the exact pages where purchase decisions happen, and they are measurably slower than the homepage (3.6 s). The main product image is not being prioritised: it needs fetchpriority="high", explicit width/height, a preload hint, and lazy-loading must be removed from the first gallery image. This also carries a direct organic-ranking cost.
⏱ Estimated: 8 dev hours
Despite excellent desktop paint metrics (FCP 0.7 s, LCP 1.0 s), the page is unresponsive to input for 610 ms — firmly in Google's "poor" band. The cause is visible in the resource audit: 1.60 MB of JavaScript spread across 171 separate files from 20 third-party hosts (POWR, Judge.me, Microsoft Clarity, Meta, GTM, seQura, loyalty). The page paints fast, then freezes while scripts execute. Deferring non-critical apps and auditing which POWR widgets are still in use would recover most of this.
⏱ Estimated: 6 dev hours
Homepage CLS on mobile measures 0.135, above Google's 0.1 threshold (desktop is fine at 0.034). The likely causes are the rotating 8-message announcement bar reflowing as text lengths change, and images rendering without reserved dimensions. Fixing the announcement bar height and adding explicit aspect ratios resolves it.
⏱ Estimated: 3 dev hours
The homepage renders 449 image elements and 209 product cards in a single document because every tab panel in the three tabbed modules is rendered upfront rather than on demand. Lazy-rendering inactive tab panels would cut both request count and DOM size substantially.
⏱ Estimated: 4 dev hours
FCP measures 3.3 s on the homepage and 3.2 s on product pages — over the 3 s threshold on both. Users on mobile data see nothing meaningful for over three seconds, and mobile is the majority traffic source.
⏱ Estimated: included in LCP work
442 of 449 images (98%) carry loading="lazy". Given the homepage renders hundreds of product images, this is doing significant heavy lifting and is the main reason the page is usable at all.
Exactly one H1 per page across every template audited, with a logical H2 hierarchy beneath (16 H2s structuring the homepage sections). No heading-tag abuse for styling.
Images are served through the Shopify CDN with full responsive srcset breakpoints (165w / 360w / 533w / 720w / 940w) and automatic WebP negotiation — devices receive appropriately sized, modern-format images without manual work.
TTFB measured 18 ms on a warm connection, with desktop FCP at 0.7 s and LCP at 1.0 s. The hosting and the critical rendering path are genuinely fast — the bottleneck is script execution, not infrastructure.
Desktop CLS of 0.034 is well inside the 0.1 "good" threshold — desktop content does not jump as it loads.
CSS totals just 56 KB and fonts only 73 KB. The styling layer is efficient; the weight problem is isolated almost entirely to third-party JavaScript.

We found no Klaviyo, Privy, Omnisend or any other popup form on the site, and no popup appeared during an 8-second wait on a fresh session — there is no welcome offer and no exit-intent capture. The only capture point is a passive footer form that most visitors never scroll to. For a store running paid social traffic, this means the overwhelming majority of first-time visitors leave with no way to ever be contacted again. A welcome-offer popup plus exit-intent is the standard fix and typically captures a multiple of what a footer form alone achieves.
⏱ Estimated: 5 dev hours
The footer form promises only "Novedades, colecciones y ofertas exclusivas en tu correo" — no discount, no free shipping, no concrete benefit. A specific first-order incentive ("−10% en tu primer pedido") reliably multiplies signup rate against a generic newsletter pitch, and for this store it also nudges customers toward the €95 free-shipping threshold.
⏱ Estimated: included in popup work
A loyalty programme already exists but there is no referral mechanism. Nail technicians operate in an unusually tight, highly networked professional community where peer recommendation drives brand adoption — referral is a natural fit here and an obvious extension of the loyalty infrastructure already in place.
⏱ Estimated: 4 dev hours
A persistent WhatsApp button sits bottom-left on every page, backed by the footer message "Escribe a una asesora de belleza por WhatsApp" and a real number. For consultative professional supply — where buyers ask which base suits which builder gel — a named human on the customer's preferred channel beats a generic chatbot outright.
A "Puntos de fidelidad" widget is present sitewide and the cart surfaces redemption ("Inicia sesión para canjear tus puntos por recompensas"). For a repeat-purchase consumables business, points are exactly the right retention mechanic and they are already live.
We scanned for countdown timers and artificial urgency widgets and found none. The store sells on genuine merits — official distributor status, real stock, real delivery times — rather than manufactured pressure. This protects long-term trust with a professional audience that sees through such tactics immediately.
No popup obstructs the first visit on desktop or mobile, and there is no blocking cookie wall. First impressions are clean and uninterrupted.
The homepage includes a collapsible FAQ module ("¿Tienes preguntas? Obtén respuestas.") that pre-empts common objections without requiring a support contact.
A clean email field with an OK button is in place — the collection mechanism works; it needs an incentive and a more prominent entry point.
We scanned every loaded script and found no Klaviyo, Omnisend, Mailchimp or equivalent ESP. Without one, the store has no abandoned-cart flow beyond Shopify's basic default, no abandoned-browse, no post-purchase sequence, no win-back and — most costly here — no replenishment flow. A consumables catalogue (gel, bases, tops, files, tips, gloves) has entirely predictable reorder cycles, and automated replenishment reminders are typically among the highest-revenue flows such a business can run. This is the largest untapped revenue system on the site.
⏱ Estimated: 12 dev hours
TikTok is linked in the footer as an active brand channel, but window.ttq is absent — the TikTok pixel is not installed. Every visitor arriving from TikTok is invisible to analytics, cannot be retargeted, and cannot feed conversion optimisation. In a category where TikTok is arguably the dominant discovery platform for nail professionals, this is a significant blind spot on both spend and attribution.
⏱ Estimated: 2 dev hours
Abandoned-browse depends on an ESP with on-site tracking. With no platform installed, visitors who view products without adding to cart — the largest segment of any store's traffic — cannot be re-engaged at all.
⏱ Estimated: included in ESP setup
Judge.me supports automated post-delivery review requests, but the near-zero review coverage documented in Block 09 strongly suggests the flow is either disabled or was never configured. Turning it on — plus a one-off backfill campaign against historical orders — is the fastest route to meaningful review volume.
⏱ Estimated: included in reviews workstream
Both gtag/dataLayer and a live GTM container were confirmed. Analytics foundations and a tag-management layer are in place, which makes adding the missing pixels straightforward.
window.fbq is active with fbevents.js loading correctly — Facebook and Instagram campaigns are tracked and retargetable.
Clarity is live, providing free session recordings and heatmaps. This is genuinely valuable and under-used by most stores — it means several findings in this report (the collection above-the-fold problem, the mobile ATC scroll-back) can be verified against real user sessions immediately.
The seQura integration runs sitewide with product-level instalment messaging and pre-payment options — a meaningful conversion asset for the higher-priced equipment range in the Spanish market specifically.
The infrastructure for review collection and automated requests is already present and correctly localised — only the automation and content are missing, which makes the reviews workstream far cheaper than a fresh implementation.
Average dev hours and a fixed price at $40/hour. Suggested order: Critical → Medium → Low.
| Block | Task | Hours (avg) | Fixed Price |
|---|---|---|---|
| 15 | Email platform setup (Klaviyo) + abandoned cart, browse, post-purchase & replenishment flows | 12 | $480 |
| 13 | Product page mobile LCP optimisation (image priority, preload, dimensions) | 8 | $320 |
| 3 | Quick Add on product cards (with variant picker) | 8 | $320 |
| 10 | Cart upsell & recommendations block | 6 | $240 |
| 9 | Star rating under product title + Judge.me request automation & backfill | 6 | $240 |
| 5 | Collection above-the-fold rebuild (compact header + filter drawer) | 6 | $240 |
| 10 | Free-shipping progress bar (cart + notification + header) | 5 | $200 |
| 12 | Mobile sticky Add-to-Cart bar with live price | 5 | $200 |
| 14 | Welcome-offer email popup + exit-intent capture | 5 | $200 |
| 1 | Sticky header on scroll (desktop + mobile) | 4 | $160 |
| 15 | TikTok pixel install + event mapping | 2 | $80 |
| Subtotal — Critical | 67 hrs | $2,680 | |
| Block | Task | Hours (avg) | Fixed Price |
|---|---|---|---|
| 6 | Visual colour swatches replacing text variant pills | 8 | $320 |
| 10 | Cart drawer replacing the notification popup | 8 | $320 |
| 3 | Homepage UGC / Instagram shoppable gallery | 6 | $240 |
| 13 | Third-party JS audit — defer non-critical apps, reduce TBT | 6 | $240 |
| 5 | Collection SEO descriptions (template + rollout) | 5 | $200 |
| 8 | Product description accordions for equipment specs | 4 | $160 |
| 7 | Trust & reassurance row beneath Add-to-Cart | 3 | $120 |
| 7 | Desktop sticky Add-to-Cart | 3 | $120 |
| 13 | Mobile CLS fixes (announcement bar height + image dimensions) | 3 | $120 |
| 5 | "Cargar más" / infinite scroll on collections | 3 | $120 |
| 11 | Mobile typography to 16px + 44px tap targets + announcement bar | 3 | $120 |
| 1 | Expanded search input in the header | 3 | $120 |
| 3 | Badge strategy rework + bestseller tab overflow fix + module reorder | 3 | $120 |
| 10 | Fix add-to-cart popup overlapping variant selectors | 2 | $80 |
| 10 | Cart trust badges & payment icons | 2 | $80 |
| 7 | Honest stock / availability indicator | 2 | $80 |
| 4 | Footer FAQ link + store NAP block | 2 | $80 |
| 2 | Hero social-proof element (aggregate rating / customer count) | 2 | $80 |
| Subtotal — Medium | 68 hrs | $2,720 | |
| Block | Task | Hours (avg) | Fixed Price |
|---|---|---|---|
| 6 | Product photography consistency guidelines + retouch batch | 6 | $240 |
| 14 | Refer-a-friend widget on top of existing loyalty | 4 | $160 |
| 8 | How-to / application content module on product pages | 4 | $160 |
| 13 | Homepage request reduction (lazy-render inactive tab panels) | 4 | $160 |
| 6 | Size guide popup for sized products | 3 | $120 |
| 5 | Keyword-rich collection H1s | 2 | $80 |
| 2 | Mobile hero image crop optimisation | 2 | $80 |
| Subtotal — Low | 25 hrs | $1,000 | |
* Hours are averages and the price is fixed at $40/hour, for development implementation only. Content creation (product videos, photography shoots) and third-party subscription costs (Klaviyo, loyalty and referral apps) are not included. Suggested order: Critical → Medium → Low.
The fixes in this report aren't theory — they're the same conversion levers we implement for the stores we work with. Here's the Total Sales curve from a store running our approach versus the previous period:
Total Sales over the period: $168,636 — +19% vs the prior period. Solid line = current (our approach), dotted = before.