Back to portfolioEcommerce · 2026

RoSPORT

Wholesale and retail in one store: 13,000+ bike and sport products, partner pricing with a dedicated manager, and a rebuild that kept the old URL structure intact.

Visit live site
rosport.ua
rosport.ua
  • 13,000+ product catalog
  • Per-partner wholesale pricing
  • Merchant Center product feeds

The Brief

RoSPORT imports bikes, parts and sport gear and sells them from its own warehouse — retail to cyclists across Ukraine, wholesale to shops and repair workshops. The old site couldn't hold a catalog of this size, and wholesale partners had no place to see their own prices, so both channels were being run half-manually.

What Was Built

1. A headless storefront for two different buyers

We built the new storefront on Next.js over Medusa.js, with a faceted catalog (brand, wheel size, brake type, frame material, age group), search by name, brand or SKU, guest checkout, wishlist, compare, reviews, one-click buy and cross-sell. Two fully translated locales (uk/ru) cover content, category names and metadata with correct hreflang — a real second language for the Ukrainian market, not an auto-translated export. A separate wholesale track runs alongside retail, with partner pricing, a dedicated account manager, invoice payment and an application flow.

2. A migration that kept the search footprint intact

The store moved off its old engine with the legacy URL structure preserved, so roughly 13,000 product URLs and the old category slugs still resolve. A dynamic sitemap index (a core map plus six product maps, with lastmod refreshed daily), canonicals and hreflang on every page, and Product/Offer/BreadcrumbList structured data on product pages keep a catalog this size indexable.

3. An admin the client's team runs on its own

Both sales channels are operated from one admin: modules for editing pages, menus, filters and notification templates, plus a product-export module that generates a live Google Merchant Center feed and key-protected feed variants for other channels. Behind the same login sit a currency converter for buying from foreign suppliers, an integration with the client's accounting system, an SMS gateway, and a Telegram bot that notifies managers about new orders.

The Result

Both sales channels now run from one admin instead of two separate workflows.

  • Merchandising, categories, filters and notification texts are self-serve — no developer in the loop.
  • Product feeds go out automatically to Google Merchant Center and other channels.
  • The catalog has room to grow past its current 13,000 items without the platform being the limit.

Stack: Next.js App Router with next-intl on the front, Medusa.js split into admin and worker services, PostgreSQL and Redis behind it, media on Cloudflare R2. Checkout runs on Nova Poshta (branch, parcel locker, courier), LiqPay, cash on delivery and bank invoice, with GA4 for analytics.

Need a website built?

Tell me in a few sentences what you need — I'll reply with an estimate and a timeline within 24 hours.

Or go straight to the brief