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:
- a classic lace-up sneaker named vyner (
model
); - a mid-top chukka-style sneaker named maltby (
model
)
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
)
- white (
color
) nylon (material
) laces (part
) - navy (
color
) nappa (material
) on the side (part
)
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:
sole:rubber:white
laces:nylon:white
side:nappa:navy
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:
- parts may be customisable or non-customisable (
hidden
) - parts may be present or not (
optional
)
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.
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.
Example of a maltby model without fringes (optional part).
Personalization¶
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" } } }
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:
- product's customisation details, i.e., the configuration of the product with materials and colors for all existent parts;
- product's personalization details in case of a personalisation occurs, i.e., the chosen initials and corresponding finishing;
- product's native size, which will be converted to the proper conversion scale.