Skip to content
Pedro Melo
All projects

BMW Group | CTW

The cart and the BMW Motorrad launch on BMW Group's shop

Fullstack on a high-traffic e-commerce platform for BMW, MINI and BMW Motorrad, live in more than 30 countries. Built on site in Lisbon.

See the live BMW Motorrad shop
Role
Fullstack developer
Period
Jun 2022 – Jul 2023
brands on one platform, Motorrad included
3
countries
30+
visits a day, per Adobe Analytics
40k

Try it

Enter a sample VIN to identify the vehicle and see which parts fit, browse BMW Motorrad gear with sizes, fill the cart and check out. Requests go to simulated Lambdas; products, VINs and prices are made up.

Enter a VIN to see which parts fit.

Find your vehicle

The VIN is on the registration document: 17 letters and numbers.

Sample VINs

BMW Motorrad shop

Prices include VAT
  • Men-40%
    Rally jacket, waterproof

    705,60 €1.176,00 €

  • Unisex
    Adventure gloves

    179,00 €

  • Women-40%
    Logo T-shirt

    23,40 €39,00 €

Crossed-out price: the lowest price in the 30 days before the discount.

Cart (0)

Your cart is empty. Add a service, a part or some gear.

Subtotal
0,00 €
VAT 19% included
0,00 €
Total
0,00 €

API calls, served by simulated Lambdas

    Behind the shop: the catalog importer

    Products, filters and dealers reach the shop through a CSV import on AWS. Pick a file and follow each step; the second row is the shop reading what was imported.

    Import

    1. CSV Importerplatform
    2. AkamaiDNS
    3. Amazon S3stores the CSV
    4. AWS Lambdavalidates every field
    5. Valid?
    6. Secrets ManagerAPI keys
    7. ServerHTTP requests
    8. commercetoolsproducts, filters, dealers
    9. Database

    X-Ray and CloudWatch log every step of the import, validation and mapping

    Shop

    1. Next.js SSRshop
    2. AWS Lambdacatalog
    3. Server
    4. commercetools
    5. Database
    6. Next.js CSRwhat the customer sees

    Pick a file and import it.

    Logs

      The problem

      BMW and MINI customers needed one place to buy digital services and car parts and to book maintenance and repairs, with a cart that works the same way in every market.

      Then a third brand was coming: BMW Motorrad needed its own shop, on the same platform, without forking the code.

      All of it runs in more than 30 countries, so every price, tax line and date has to follow the market, at high traffic.

      What I built

      • The cart: adding services, parts and gear, changing quantities, and the totals, taxes and currency for each market, from the React and Next.js front end down to the Node.js and AWS Lambda back end.
      • The foundation of BMW Motorrad on the platform, next to BMW and MINI: its shop for gear and garments, with sizes and sale prices, and the AWS infrastructure behind it.
      • The vehicle selector: customers enter their VIN, the vehicle is identified, and the shop only offers the parts that fit it.
      • The digital shop for services and parts, the booking flow for maintenance and repairs, and tests with Jest on a platform with about 40k visits a day.
      • A CSV importer on AWS for products, filters and dealers: files land in S3 behind Akamai, a Lambda validates every field, credentials come from Secrets Manager, data goes to commercetools, and X-Ray and CloudWatch trace each step.

      Decisions

      One platform, three brands
      BMW, MINI and BMW Motorrad share the shop and the cart; each brand brings its own catalog and look instead of its own codebase.
      Start from the vehicle
      A VIN identifies the exact car or bike, so customers aren't left guessing whether a part fits.
      The market decides the numbers
      Currency, tax, sale-price rules and date formats come from the market, so the same cart reads right in Germany, the UK or Japan.

      Stack

      • React
      • Next.js
      • Node.js
      • AWS Lambda
      • Amazon S3
      • Secrets Manager
      • CloudWatch
      • commercetools
      • Akamai
      • Jest