Concepts

Identification

Platforme uses brand and model together to identify different products. In that way, brand (usually the vendor's name) and model (provided by vendors to distinguish particular types of products) make an unique identification pair. Despite of that, each brand may have many models associated.

For instance, the vendor swear may have two distinct products:

Customization

Triplets: (parts, materials, colors)

{
  "brand" : "swear",
  "model" : "vyner",
  "parts" : {
    "laces" : {
        "material" : "nylon",
        "color" : "white"
    },
    "side" : {
        "color" : "white",
        "material" : "nappa"
    },
    "sole" : {
        "material" : "rubber",
        "color" : "white"
    }
  }
}

Every model is essentialy defined by a set of three dimensions: parts, materials and colors. By combining these, it is possible to create the desirable configuration of a model. In short, *one model is made of parts; these parts are made of materials; materials are colored. Take this example of a Vyner sneaker configuration: white(color) rubber(material) sole(part)

vyner

Example of a vyner sneaker.

To better address these relations, Platforme makes use of triplets.

A triplet is the configuration of a model in the form of part:material:color. Taking the previous example, that could be represented with these possible triplets:

Parts

As it might be noticeable, each model can be composed by multiple parts. However, there are two particularities that must be taken into consideration:

Hidden Parts

{
  "brand" : "swear",
  "model" : "vyner",
  "description": "classic lace-up sneaker",
  "parts" : {
    "laces" : {
        "material" : "nylon",
        "color" : "white"
    },
    "side" : {
        "color" : "white",
        "material" : "nappa"
    },
    "sole" : {
        "hidden" : true,
        "material" : "rubber",
        "color" : "white"
    }
  }
}

By default, Platforme assumes that every defined part of a model is customisable. However, parts defined as hidden are non-customisable, i.e., parts whose material and color can't be changed.

This might be specially useful in cases where, for example, one vendor indicates that there will only be one material and color combination available for some part.

Optional Parts

{
  "brand" : "swear",
  "model" : "maltby",
  "description": "mid-top chukka-style sneaker",
  "parts" : {
    "laces" : {
        "material" : "leather",
        "color" : "white"
    },
    "side" : {
        "color" : "navy",
        "material" : "nappa"
    },
    "sole" : {
        "material" : "rubber",
        "color" : "white"
    },
    "fringe" : {
        "optional" : true,
        "material" : "nappa",
        "color" : "white"
    }
  }
}

Once again, by default, Platforme assumes that every part is included in the model's composition. Yet, sometimes there are parts whose presence in the model's composition is not mandatory. Those are known as optional parts.

Backing to our maltby sneaker example, its sole would not be a good candidate to be an optional part because every shoe needs, obviously, to have a sole! But, imagine the vendor expressed the desire to have this model with optional fringes.

maltby_fringe

Example of a maltby model with fringes (optional part).

That would mean that it would be possible to compose a maltby sneakers with or without fringes.

maltby_normal

Example of a maltby model without fringes (optional part).

Personalization

vyner_initials

Example of a personalized model.

Besides customizing, a product can be made even more unique by allowing personalization. For example, it may be possible to input the customer's initials like shown above.

A personalization consists of one or more groups of initials with an engraving. For the initials both TrueType and rasterized fonts can be used, with support for Unicode characters (including emojis 🙂).

The engraving is a set of properties that define characteristics of the initials (like style, position, size, among others) with support for pricing per property. It is defined as a text with the following format: property_name:property_type. If the engraving has more than one property value, they are concatenated with a dot: property_name1:property_type1.property_name2:property_type2 (ie: gold:style.bold:font). There is also legacy support for unnamed properties, so the type can be omitted (not recommended): property_name1.property_name2.

For most cases, a simpler can be used, with the initials which contains the characters as a string and the engraving as described previously. When the product supports different personalization options then a more complex format must be used, a map named initials_extra which contains all the personalization groups and their respective initials and engravings:

{
  "initials_extra" : {
    "left": {
      "initials": "p",
      "engraving": "white:style"
    },
    "right": {
      "initials": "t",
      "engraving": "white:style"
    }
  }
}

air_rev_nitro_left      air_rev_nitro_right

Example of a pair of sneakers personalized with a letter on each one.

Representation

Concrete configurations can be represented by different text based formats: DKU, JSON, Query string. These formats are meant to be used interchangeably.

DKU

It's a lookalike SKU representation format. A DKU is a compound block, ie: swear.vyner.159.3:10.0:2.0:18.0:3.4:10.0:5.4:0:2.5:0:0.AB:gold.

It begins to define the brand and model, followed by the customization information (tuples of digits representing the configuration of the parts) and then by the personalization information (a tuple of initials and engraving).

JSON (Specification)

The configuration used until now would be represented as:


{
  "brand": "swear",
  "model": "vyner",
  "parts": {
    "front": {
      "material": "nappa",
      "color": "white"
    },
    "hardware": {
      "material": "metal",
      "color": "silver"
    },
    "laces": {
      "material": "nylon",
      "color": "white"
    },
    "lining": {
      "material": "calf_lining",
      "color": "white"
    },
    "side": {
      "material": "nappa",
      "color": "white"
    },
    "sole": {
      "material": "rubber",
      "color": "white"
    },
    "logo": {
      "material": "metal",
      "color": "silver"
    },
    "shadow": {
      "material": "default",
      "color": "default"
    }
  },
  "initials": "AB",
  "engraving": "gold"
}

This is the most verbose format, all data is organized by properties: brand, model, parts, etc.

Query string

A URI's query inspired format, a configuration is represented as brand=swear&model=vyner&p=front:nappa:white&p=hardware:metal:silver&p=laces:nylon:white&p=lining:calf_lining:white&p=logo:metal:silver&p=shadow:default:default&p=side:nappa:white&p=sole:rubber:white&initials=JM&engraving=gold.

Tags

The tags define certain characteristics for the model. A model can have various tags, refer to the spec.json section to get all the tags documentation.

Production Orders

On Platforme's documentation, the word _order(s)_ is used to refer to production orders, which is not the same as sales orders.

A production order is issued by Platforme to factories so they can start the manufacturing process of the product, within a certain period of time. Factories will then receive a production report identified by an order number and completed with all required complementary information. For that, report generation it is needed to provide, via Platforme, important data such as: