Skip to content
Luiz Jelonschek
    • Products
    • Experience
    • Projects
    • About
    • Contact
    • SetupBarato — Case study
    • Open website: SetupBarato
    • MiranteSEO — Case study
    • Open website: MiranteSEO
    • VitrineBeauty — Case study
    • Open website: VitrineBeauty
    • Copy email
    • Toggle light/dark theme
    • Mudar para português
    • LinkedIn
    • GitHub
    • WhatsApp
    • View this site’s source
↑ ↓ to navigate · Enterjelonschek.com
PT, Ler em português
All products
Beauty price comparison

VitrineBeauty

Compares the same cosmetic across 18 stores, by shade, by size and by price per ml.

I built VitrineBeauty on my own and launched it in September 2026. It reads the public catalogs of 18 Brazilian stores every three hours, groups offers by each variant’s barcode and shows, on a single page, what the same product costs at each store.

Role
Creator and developer: product, backend, data collection, front-end and infrastructure
Live since
Sep 2026
Stack
Next.js, TypeScript, PostgreSQL, Prisma, Tailwind CSS, Cloudflare
VitrineBeauty homepage with the headline “O mesmo produto, todos os preços.” and 485,754 offers compared across 18 stores
offers compared
485k
products with live offers
116k
brands
4,201
stores with live offers
18

01VitrineBeauty

The problem

Two stores can name the same shampoo in ten different ways. Comparing by name lumps together things that don’t compare, like a 300 ml bottle against a three-pack, and produces savings that don’t exist.

Size is misleading too. A 300 ml shampoo at R$ 86 works out to R$ 0.29 per ml; a 1.5 L bottle at R$ 250 works out to R$ 0.17. The pricier tag is the better deal.

And the struck-through list price that is supposed to prove a discount is often inflated in beauty retail. Without an independent price history, there is no way to tell whether today’s sale is real.

02VitrineBeauty

What it does

  • Matching by barcode

    Offers are grouped by the GTIN/EAN of each SKU, which means per shade and per size. The barcode is shown on the product page so anyone can check it.

  • Price per ml and gram

    Every card and every offer shows the unit cost, and any listing can be sorted by it.

  • Its own price history

    Each product page says in plain words whether today’s price is the best seen so far, or how far below it the product went in the last 90 days.

  • Delivery times from each store

    Delivery time comes from each store’s own freight calculator, by state or CEP (postal code). Where a store publishes no freight calculator, the column shows a dash instead of an estimate.

  • Price-drop email alerts

    Alerts are set per variant and checked on every collection run. Each email reports a lower price than the one before, so the same news never arrives twice.

  • No third-party trackers

    No Google Analytics and no social pixels. Audience measurement is first-party and stores no IP, and affiliate links are marked as sponsored.

03VitrineBeauty

How it works

  1. Collection

    Reads the public catalogs of 18 stores every three hours and stores each price with the date and time it was seen. No price is typed in by hand.

  2. Matching

    Groups offers by each SKU’s barcode. An offer joins the group only if its size, pack quantity and title agree with the barcode.

  3. Normalization

    Converts every offer into a price per ml or per gram, so different sizes and kits become comparable.

  4. History

    Keeps the lowest price of each variant over time, across all stores, and uses the lowest value of the last 90 days as the reference. Offers that stop showing up in collection runs drop off the list.

  5. Verdict

    The product page sorts offers from cheapest to most expensive, shows when each price was seen and says whether to buy now or wait.

  6. Alerts

    Alerts are checked on every run, and an email goes out when any store reaches the requested price.

04VitrineBeauty

Engineering decisions

  1. Better not to match than to match wrong

    The barcode is the key, but it isn’t enough: if it disagrees with the listing’s size, pack quantity or title, the offer stays out. Some offers end up ungrouped, but that is what keeps a 300 ml bottle from being compared with a three-pack and turned into fake savings.

  2. The reference price is the observed one, not the store’s

    In beauty retail the struck-through list price is often inflated, so it can’t prove a discount. I built the verdict on the lowest price VitrineBeauty itself recorded over 90 days across all stores. The cost is that the site needs collection time before it can give an opinion.

  3. When in doubt, the page stays quiet

    If the offers grouped under an option don’t describe the same thing, the page stops claiming savings instead of publishing a big number. If the option has only been tracked for a short time, it says for how many days and holds back its opinion. The page loses a flashy headline, but every number it shows holds up.

  4. Integrate the platform, not the store

    I wrote the integration per e-commerce platform rather than per store. A new store on a supported platform goes live in hours, not weeks. The heavier work is concentrated in each new platform.

  5. Commission doesn’t buy position

    The site earns referral commissions from some stores, but the offer list is always sorted from lowest to highest price, and no store pays to appear first. Links that may earn a commission are marked as sponsored in the page markup.

05VitrineBeauty

By the numbers

offers compared
485k
485,754 on the homepage counter.
products with live offers
116k
116,204, per the site footer and FAQ.
brands
4,201
Footer and About page.
stores with live offers
18
Drugstores, beauty retailers and fashion retailers, such as Droga Raia, Época Cosméticos, Sephora and Riachuelo.
maximum time between collections
3 h
Each store is re-read at most three hours apart, per the FAQ.
reference-price window
90 days
Lowest observed price per variant, across all stores.
URLs published in sitemaps
122k
122,405 URLs across 12 public sitemaps, almost all products, brands and categories. Counted on the day.

Public numbers from the live site, as of October 28, 2026.

06VitrineBeauty

Screens

Wella Invigo Nutri-Enrich conditioner, 200 ml: lowest price R$ 79.99, highest R$ 124.99 and a 36% gap across 11 stores
The page keeps the 200 ml option apart from the 1 L one, shows R$ 0.400/ml and notes that the site has recorded R$ 57.00 in the last 90 days, 29% below today’s price, so it may pay to wait.
Offers with price per ml and when each was last seen, a 51-day step chart of the lowest price and a price-alert box
The history uses only prices the site observed itself, from R$ 57.00 to R$ 90.90 over 51 days, and it is what backs the verdict on the page.