Leitagu describes every product in two ways. The look (wood, tone, finish, style, upholstery, handles) says what a piece looks like and drives most of the matching. The details on this page say what a piece is and what it does: how many legs a table has, whether a sofa opens into a bed, which side a corner sofa's corner is on. Each category has its own list of details, so a sofa is never asked for drawers and a dresser is never asked for a corner side.
#How the details work
- One list per category. The list is in
packages/core/src/shared/taxonomy.ts. Each detail has a name in Estonian and English, a kind of value and the categories it belongs to.
- Kinds of value. A detail is a yes or no, a count, a size in centimetres or inches, or one word from a fixed list. A value outside the list or range is dropped, never stored.
- Details that depend on others. A corner side is kept only when the sofa is a corner, chaise or U-shaped sofa, and a bed mechanism only when the sofa opens into a bed. If the other detail is not known, the value is kept.
- Where they are stored. Details live in one JSON column,
products.specs, so a new detail needs no database change. Five older details keep their own columns (shape, sofa bed, storage box, seat height, seat depth); the product reads all of them as one set.
- Store corrections. A store's corrections to details are kept in
products.overrides.specs and win over synced data, like the other corrections.
- Not a ranking signal. Details are shown on the product and, where marked below, become filters. Nothing paid changes how they are used.
- Yes or no. A "no" and an empty value look the same on a product page. Matching never treats a missing detail as a "no".
#What is built and what is planned
| Part |
State |
| The list of details per category, with Estonian and English labels, validation and tests |
Built |
| Storage on products, including store corrections in the product's overrides |
Built |
| Reading details from store data (feeds, Shopify, WooCommerce, CSV) |
Partly built: shape, sofa bed, storage box and seat size, and from the product's text a table's top shape and base, rounded ends on TV units and sideboards, and an armchair's recliner, swivel base and open frame (detectSpecs() in normalize.ts). Reading details from photos is planned as stage 3 of the product pipeline |
| Editing details in the admin and partner apps |
Partly built: the details that change the drawing can be edited in the admin product form and corrected in the partner app; the rest are planned |
| Showing details on product cards and pages |
Planned |
| Filters in the catalogue and in the chat ("a round table for six", "a corner sofa with the corner on the left") |
Planned; the details marked "planned" in the Filter column are the first candidates |
| Details on room pieces, so a kept corner sofa keeps its side in the 3D room |
Built for the details that change the drawing (room_items.specs); the room editor offers them under "Material and style" |
#Details that change the drawing
The 3D room and product cards draw a piece from its avatar (shared/avatar.ts), which reads these details. They are the only ones kept on room pieces (DRAWN_SPECS in taxonomy.ts):
| Category |
Details |
| Tables |
Top shape, base, lower shelf |
| Sideboard, chest of drawers, cabinet, TV unit |
Drawers among the doors, rounded ends |
| Armchair |
Frame, back shape, recliner, swivel |
| Sofa |
Corner side, corner reach |
One home for each idea. A table's round or oval top, its pedestal, cross or tripod base, rounded storage ends, an armchair's open frame, recliner or swivel base, and doors with drawers used to be look values (shape, legs and door). They are details now, and the look values are gone. Migration 020_retire_shape_values moved existing products, their corrections and room pieces. shape is a sofa's only.
#The details
Every category can also have the look attributes from How Leitagu works. The tables below are the extra details. "Filter: planned" marks the details meant to become filters first; the rest are shown only.
#Sideboard
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Number of doors |
Uste arv |
0–8 |
|
| Drawers |
Sahtleid |
0–16 |
planned |
| Shelves |
Riiuleid |
0–16 |
|
| Drawers among the doors |
Sahtlid uste kõrval |
above the doors, between the doors, below the doors |
|
| Rounded ends |
Ümarate otstega |
yes / no |
|
| Open compartments |
Avatud sektsioone |
0–12 |
|
| Adjustable shelves |
Reguleeritavad riiulid |
yes / no |
|
| Soft-close |
Sujuvsulgurid |
yes / no |
|
| Anti-tip fitting included |
Ümberkukkumiskaitse kaasas |
yes / no |
planned |
#Chest of drawers
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Drawers |
Sahtleid |
0–16 |
planned |
| Shelves |
Riiuleid |
0–16 |
|
| Drawers among the doors |
Sahtlid uste kõrval |
above the doors, between the doors, below the doors |
|
| Rounded ends |
Ümarate otstega |
yes / no |
|
| Soft-close |
Sujuvsulgurid |
yes / no |
|
| Lockable |
Lukustatav |
yes / no |
|
| With mirror |
Peegliga |
yes / no |
|
| Anti-tip fitting included |
Ümberkukkumiskaitse kaasas |
yes / no |
planned |
#Cabinet
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Number of doors |
Uste arv |
0–8 |
|
| Drawers |
Sahtleid |
0–16 |
planned |
| Shelves |
Riiuleid |
0–16 |
|
| Drawers among the doors |
Sahtlid uste kõrval |
above the doors, between the doors, below the doors |
|
| Rounded ends |
Ümarate otstega |
yes / no |
|
| Adjustable shelves |
Reguleeritavad riiulid |
yes / no |
|
| Soft-close |
Sujuvsulgurid |
yes / no |
|
| Lockable |
Lukustatav |
yes / no |
|
| With mirror |
Peegliga |
yes / no |
|
| Anti-tip fitting included |
Ümberkukkumiskaitse kaasas |
yes / no |
planned |
| Cabinet type |
Kapi tüüp |
display cabinet, shoe cabinet, bar cabinet, corner cabinet, utility cabinet, other |
planned |
#TV unit
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Number of doors |
Uste arv |
0–8 |
|
| Drawers |
Sahtleid |
0–16 |
planned |
| Shelves |
Riiuleid |
0–16 |
|
| Drawers among the doors |
Sahtlid uste kõrval |
above the doors, between the doors, below the doors |
|
| Rounded ends |
Ümarate otstega |
yes / no |
|
| Open compartments |
Avatud sektsioone |
0–12 |
|
| Soft-close |
Sujuvsulgurid |
yes / no |
|
| Cable opening |
Kaablite läbiviik |
yes / no |
|
| Largest TV |
Suurim teler |
20–120 inch |
planned |
#Shelf / bookcase
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Drawers |
Sahtleid |
0–16 |
planned |
| Shelves |
Riiuleid |
0–16 |
|
| Adjustable shelves |
Reguleeritavad riiulid |
yes / no |
|
| Anti-tip fitting included |
Ümberkukkumiskaitse kaasas |
yes / no |
planned |
| With back panel |
Tagaseinaga |
yes / no |
|
| Shelf type |
Riiuli tüüp |
bookcase, ladder shelf, wall shelf, room divider, cube shelf |
planned |
#Dining table
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Top shape |
Laua kuju |
rectangular, rounded rectangle, square, round, oval, organic shape |
planned |
| Base |
Aluse tüüp |
four legs, pedestal, trestle, panel legs, tripod, cross base |
planned |
| Top material |
Plaadi materjal |
wood, glass, ceramic, marble, stone, metal, laminate |
|
| Extendable |
Pikendatav |
yes / no |
planned |
| Width when extended (only when extendable is true) |
Laius pikendatult |
60–500 cm |
|
| Seats |
Istekohti |
1–14 |
planned |
| Seats when extended (only when extendable is true) |
Istekohti pikendatult |
1–20 |
|
| Lower shelf |
Alumine riiul |
yes / no |
|
#Coffee table
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Top shape |
Laua kuju |
rectangular, rounded rectangle, square, round, oval, organic shape |
planned |
| Base |
Aluse tüüp |
four legs, pedestal, trestle, panel legs, tripod, cross base |
planned |
| Top material |
Plaadi materjal |
wood, glass, ceramic, marble, stone, metal, laminate |
|
| Lower shelf |
Alumine riiul |
yes / no |
|
| Storage space |
Hoiuruum |
yes / no |
planned |
| Lift-up top |
Tõstetav plaat |
yes / no |
|
| Adjustable height |
Reguleeritav kõrgus |
yes / no |
|
| Nesting set |
Laudade komplekt (sissetõstetavad) |
yes / no |
|
| Tables in the set (only when nesting is true) |
Laudu komplektis |
2–5 |
|
#Side table
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Top shape |
Laua kuju |
rectangular, rounded rectangle, square, round, oval, organic shape |
planned |
| Base |
Aluse tüüp |
four legs, pedestal, trestle, panel legs, tripod, cross base |
planned |
| Top material |
Plaadi materjal |
wood, glass, ceramic, marble, stone, metal, laminate |
|
| Lower shelf |
Alumine riiul |
yes / no |
|
| Storage space |
Hoiuruum |
yes / no |
planned |
| Adjustable height |
Reguleeritav kõrgus |
yes / no |
|
| Nesting set |
Laudade komplekt (sissetõstetavad) |
yes / no |
|
| Tables in the set (only when nesting is true) |
Laudu komplektis |
2–5 |
|
| Tray top |
Alusega plaat |
yes / no |
|
| C-shaped (slides under a sofa) |
C-kujuline (diivani alla) |
yes / no |
|
#Sofa
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Shape |
Kuju |
straight, corner sofa, U-shaped, with chaise, modular |
planned |
| Corner side (seen from the front) (only when shape is corner / chaise / u_shape) |
Nurga pool (eestvaates) |
left, right, reversible |
planned |
| Corner reach (only when shape is corner / chaise / u_shape) |
Nurgaosa sügavus |
100–400 cm |
|
| Seats |
Istekohti |
1–8 |
planned |
| Opens into a bed |
Muutub voodiks |
yes / no |
planned |
| Bed mechanism (only when sleeps is true) |
Voodi mehhanism |
fold-out, click-clack, pull-out, sliding seat |
|
| Sleeping area width (only when sleeps is true) |
Magamispinna laius |
50–250 cm |
|
| Sleeping area length (only when sleeps is true) |
Magamispinna pikkus |
100–250 cm |
|
| Bedding storage |
Voodipesukast |
yes / no |
planned |
| Armrests |
Käetoed |
both sides, one side, none |
|
| Back |
Seljatugi |
fixed, loose cushions |
|
| Removable covers |
Eemaldatavad katted |
yes / no |
|
| Recliner |
Lamamisfunktsioon |
yes / no |
|
| Ottoman included |
Pufiga |
yes / no |
|
| Seat height |
Istme kõrgus |
10–100 cm |
|
| Seat depth |
Istme sügavus |
10–200 cm |
|
#Armchair
| Detail |
Estonian |
Values |
Filter |
| Number of legs |
Jalgade arv |
1–12 |
|
| Opens into a bed |
Muutub voodiks |
yes / no |
planned |
| Bed mechanism (only when sleeps is true) |
Voodi mehhanism |
fold-out, click-clack, pull-out, sliding seat |
|
| Sleeping area width (only when sleeps is true) |
Magamispinna laius |
50–250 cm |
|
| Sleeping area length (only when sleeps is true) |
Magamispinna pikkus |
100–250 cm |
|
| Bedding storage |
Voodipesukast |
yes / no |
planned |
| Armrests |
Käetoed |
both sides, one side, none |
|
| Back |
Seljatugi |
fixed, loose cushions |
|
| Removable covers |
Eemaldatavad katted |
yes / no |
|
| Recliner |
Lamamisfunktsioon |
yes / no |
|
| Frame |
Raam |
upholstered, open wooden frame, open metal frame |
|
| Back shape |
Seljatoe kuju |
straight, curved, wrap-around, tilted, high, with headrest |
|
| Swivel |
Pöörlev |
yes / no |
|
| Rocker |
Kiiktool |
yes / no |
|
| Wing back |
Tiibseljatugi |
yes / no |
|
| Footstool included |
Jalapingiga |
yes / no |
|
| Seat height |
Istme kõrgus |
10–100 cm |
|
| Seat depth |
Istme sügavus |
10–200 cm |
|