Interactive demo · synthetic dataEvery record on this page is fabricated.
Style Master Data Entry
One style in two shapes, a column-per-attribute workbook and a database, and what a new request costs each.
The system behind this demo was engineered by Prada Dipa — LinkedIn profile, opens in a new tab and Luthfi Aditya — LinkedIn profile, opens in a new tab. My part — manager and technical lead, technical & product direction, defined the target shape: a style with colourways, a bill of materials per colourway and measurements per size, required the migration be reversible, so a new season loads the same way, set the operational contract — the office installs, verifies, backs up and restores it without a developer.
The same style, in two shapes
A style has colourways; a colourway has a bill of materials; a size has a measurement per point of measure. Three one-to-manys, and a column cannot hold a one-to-many — so the workbook numbers them.
72
48
| STYLE_CODE | STYLE_NAME | SEASON | COLLECTION | SUB_GROUP | STATUS | GAUGE | MACHINE | FOB_USD | RETAIL_USD | PACKING | CARTON_QTY | SHIP_MODE | CW1_CODE | CW1_NAME | CW1_YARN1 | CW1_YARN1_G | CW1_YARN2 | CW1_YARN2_G | CW1_YARN3 | CW1_YARN3_G | CW2_CODE | CW2_NAME | CW2_YARN1 | CW2_YARN1_G | CW2_YARN2 | CW2_YARN2_G | CW2_YARN3 | CW2_YARN3_G | CW3_CODE | CW3_NAME | CW3_YARN1 | CW3_YARN1_G | CW3_YARN2 | CW3_YARN2_G | CW3_YARN3 | CW3_YARN3_G | WT_XS | WT_S | WT_M | WT_L | WT_XL | CHEST_XS | CHEST_S | CHEST_M | CHEST_L | CHEST_XL | BODY LENGTH_XS | BODY LENGTH_S | BODY LENGTH_M | BODY LENGTH_L | BODY LENGTH_XL | SLEEVE LENGTH_XS | SLEEVE LENGTH_S | SLEEVE LENGTH_M | SLEEVE LENGTH_L | SLEEVE LENGTH_XL | SHOULDER_XS | SHOULDER_S | SHOULDER_M | SHOULDER_L | SHOULDER_XL | ARMHOLE_XS | ARMHOLE_S | ARMHOLE_M | ARMHOLE_L | ARMHOLE_XL | NECK WIDTH_XS | NECK WIDTH_S | NECK WIDTH_M | NECK WIDTH_L | NECK WIDTH_XL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MER-2601 | MERIDIAN | AW26 | Knitwear | Crew Neck | Development | 7GG | Flat bed | 48.50 | 189.00 | Folded, polybag | 20 | Sea | CW-01 | OATMEAL | Lambswool 2/28 Ecru | 340 | Merino 2/30 Natural | 74 | Nylon Binder 1/70 | 22 | CW-02 | SLATE | Lambswool 2/28 Slate | 340 | Merino 2/30 Natural | 74 | Nylon Binder 1/70 | 22 | CW-03 | MOSS | Lambswool 2/28 Moss | 336 | Mohair Loop 1/14 | 78 | Nylon Binder 1/70 | 22 | 412 | 436 | 461 | 488 | 517 | 47.0 | 49.5 | 52.0 | 54.5 | 57.0 | 62.0 | 63.5 | 65.0 | 66.5 | 68.0 | 58.0 | 59.0 | 60.0 | 61.0 | 62.0 | 40.5 | 41.7 | 42.9 | 44.1 | 45.3 | 21.0 | 21.8 | 22.6 | 23.4 | 24.2 | 17.5 | 18.0 | 18.5 | 19.0 | 19.5 |
59 of these 72 columns exist only because the workbook has to fake a one-to-many with numbered slots — colourway slots and size slots. The blanks are slots with no data in them, and every style in the book carries them.
Ask for something ordinary
A fourth colourway and a sixth size are the two most ordinary requests a style master ever gets. Watch which shape treats them as data.
The dropdowns teach themselves
A yarn or a packing method typed once becomes an option the next person is offered. It is a distinct-values query and nothing more, and it is the difference between a column you can group by and a column you cannot.
6 yarns known. 6 offered.
THE SAME YARN, IN A FREE-TEXT COLUMN
- Lambswool 2/28 Ecru
- lambswool 2/28 ecru
- LAMBSWOOL 2/28 ECRU
- Lambswool 2/28 Ecru
- Lambwool 2/28 Ecru
- Distinct strings, as typed
- 5
- After folding case and whitespace
- 2
- With a dropdown
- 1
Folding closes four of the five and cannot close the last, because one is a missing letter rather than a format. A dropdown does not repair spelling — it removes the opportunity to spell. Which is why “which styles use this yarn” is a question one of these shapes can answer.
One edit, four statements
Somebody changes a price, adds a colourway with its bill of materials and corrects a weight. That is one action to them and four statements to the database. Fail one of them on purpose.
Price → 51.00, packing → “Folded, polybag, hangtag”
Colourway CW-04 STORM
Bill of materials — 4 yarn lines
Finished weight, size XL → 521 g
THE OPERATIONAL CONTRACT
Not a simulation — none of this runs on this page. It is what was delivered, written down, because an office that cannot restore a system does not have one.
- SET UP
- Two commands. A pre-built interface ships with it, so an office machine never runs a build.
- RUN
- One command. API and interface are one process on one port.
- BACK UP
- Copy one file. The whole database is that file.
- RESTORE
- Put the file back.
- VERIFY
- The README is written as an operator manual: how to check the install worked, the top three failure modes and their fixes, and what a forced reseed destroys.
What is real, and what is simulated
Runs in your browser
- The projection between the two shapes — the normalised tables rendered back into the wide workbook row, column for column, including the cells that are blank because a slot exists and the data does not
- Add a colourway and add a size, in both shapes at once, with the column and row arithmetic computed rather than quoted
- The cascading delete: the five style-owned tables and the five shared lookups, and which of them a delete may touch
- The self-teaching dropdowns — distinct values offered back, case and whitespace folded for matching, and the typo that proves folding is not the point
- The transactional save, with an injected mid-write failure and a structural check that finds the half-written style the untransacted version leaves behind
This is not a port of a production module — the app's logic is SQL and an Express route, and neither runs in a browser. What is ported is the SHAPE: the ten tables, which five cascade, the workbook's fixed yarn slots and per-size column suffixes. 39 tests assert the arithmetic the page shows a visitor — including the exact column names each operation adds, and every number the guided tour speaks aloud. The migrated volumes quoted below — 237 styles, 705 colourways, 214 yarns — are published figures about the delivered system, not measurements of anything on this page.
Simulated
- node:sqlite and the single database file. Nothing here is SQL; the statements shown beside each save step are labels for what runs in production, not statements this page executes
- Express, multer and the photo upload; the pre-built interface an office machine runs without a build step
- The one-off Python extractor that read the season workbook and produced the seed
- The operational contract — set up, run, back up, restore — which is a card on this page because that is what it is: an instruction, not a behaviour
- MERIDIAN, MER-2601, every yarn, price, weight and measurement. All fabricated for this page