Gallery › design work › robotparts logo rounds

robotparts logo rounds

Every SVG from robotparts' eleven logo rounds of 2026-10-25 (203 files) as one media grid: grouped by round, each card the logo with its name, kind and the round's score out of 35; click a logo for the lightbox, then arrow through all of them. Other views rank the lockups by score and lay out the favicon marks.

design workcardstable4 views of one logos.json

The .base file and its data

Every tab above is one entry of this file; the views read these rows. ⋯ in the toolbar copies the current view as YAML.

# robotparts' eleven logo rounds as a media grid: every SVG a row, grouped by round, a lightbox over all of them.
# Obsidian Bases grammar plus data-ui's keys (docs/CONTRACT.md §5).
# Check it: node bin/data-ui.mjs check <this file> --data logos.json
data: logos.json
facets:
  - round
  - kind
  - { property: score, as: range }
views:
  - type: cards
    name: Every round
    order: [name, kind, score]
    image: file
    imageFit: contain
    imageAspectRatio: 0.55
    cardSize: 210
    lightbox: true
    caption: [round, kind, score]
    groupBy: { property: round, direction: ASC }
  - type: cards
    name: Lockups by score
    filters:
      and:
        - 'kind == "lockup"'
        - '!score.isEmpty()'
    order: [name, round, score]
    image: file
    imageFit: contain
    imageAspectRatio: 0.55
    cardSize: 240
    lightbox: true
    caption: [round, score, rationale]
    sort:
      - { property: score, direction: DESC }
  - type: cards
    name: Marks
    filters: 'kind == "mark" || kind == "reference mark"'
    order: [name, score]
    image: file
    imageFit: contain
    imageAspectRatio: 1
    cardSize: 120
    lightbox: true
    caption: [round, score]
    groupBy: { property: round, direction: ASC }
  - type: table
    name: Table
    order: [name, round, proposal, kind, score, rationale, source]
    groupBy: { property: round, direction: ASC }
    sort:
      - { property: score, direction: DESC }
// logos.json: 203 rows, 72 KB; the first 3
{
 "id": "logo-rounds",
 "title": "robotparts logo rounds",
 "titleProperty": "name",
 "imageProperty": "file",
 "properties": {
  "name": {
   "type": "text",
   "label": "Name"
  },
  "round": {
   "type": "number",
   "label": "Round",
   "facet": true,
   "labels": {
    "1": "Round 1",
    "2": "Round 2",
    "3": "Round 3",
    "4": "Round 4",
    "5": "Round 5",
    "6": "Round 6",
    "7": "Round 7",
    "8": "Round 8",
    "9": "Round 9",
    "10": "Round 10",
    "11": "Round 11"
   }
  },
  "proposal": {
   "type": "text",
   "label": "Proposal"
  },
  "kind": {
   "type": "text",
   "label": "Kind",
   "facet": true
  },
  "score": {
   "type": "number",
   "label": "Score",
   "unitText": "/ 35",
   "note": "the round's own: seven criteria, 1-5 each"
  },
  "rationale": {
   "type": "text",
   "label": "Rationale"
  },
  "file": {
   "type": "text",
   "label": "SVG",
   "media": "image"
  },
  "source": {
   "type": "text",
   "label": "Source file"
  }
 },
 "rows": [
  {
   "id": "r01-01-exploded-box-mark",
   "round": 1,
   "proposal": "1",
   "name": "Exploded black box",
   "kind": "mark",
   "score": {
    "value": null,
    "why": "round 1 was not scored"
   },
   "rationale": "A box with its lid lifted on dashed guide lines: the part is a black box you can still look into (specs, CAD, sim, prices).",
   "file": "svg/r01-01-exploded-box-mark.svg",
   "source": "logos-2026-10-25/01-exploded-box-mark.svg"
  },
  {
   "id": "r01-01-exploded-box",
   "round": 1,
   "proposal": "1",
   "name": "Exploded black box",
   "kind": "lockup",
   "score": {
    "value": null,
    "why": "round 1 was not scored"
   },
   "rationale": "A box with its lid lifted on dashed guide lines: the part is a black box you can still look into (specs, CAD, sim, prices).",
   "file": "svg/r01-01-exploded-box.svg",
   "source": "logos-2026-10-25/01-exploded-box.svg"
  },
  {
   "id": "r01-02-iso-cube-mark",
   "round": 1,
   "proposal": "2",
   "name": "Isometric cube with a port",
   "kind": "mark",
   "score": {
    "value": null,
    "why": "round 1 was not scored"
   },
   "rationale": "One solid isometric block with a single connector port cut into its face; the catalog's unit of thought is the part-as-box.",
   "file": "svg/r01-02-iso-cube-mark.svg",
   "source": "logos-2026-10-25/02-iso-cube-mark.svg"
  }
 ]
}
skin.css, README.md
/* The logo rounds' one rule beyond data-ui's defaults: every logo is one dark ink drawn for paper (each SVG sets
   color="#0E100E" and fills #000), so its image well stays paper-white in both themes, as the hand-built round
   galleries showed them (build_gallery.py's .big tile: background #fff, color #161615). In a dark theme a dark
   well would make the logos vanish. */
.data-ui-skin .dv-cards-img, .data-ui-skin .pswp__img { background: #ffffff; }
.data-ui-skin .dv-cards-img img { padding: 10px 12px; }
# robotparts logo rounds

Every SVG from robotparts' eleven logo rounds of 2026-10-25 (203 files) as one media grid: grouped by round, each
card the logo with its name, kind and the round's score out of 35; click a logo for the lightbox, then arrow through
all of them. Other views rank the lockups by score and lay out the favicon marks.

- **App:** design work
- **Replaces:** the hand-built logo gallery reports, one per round (`reports/media/robotparts-logos-r2…r11-2026-10-25.html`
  in robotparts, each written by its round's own `build_gallery.py`, which inlined every SVG into a page of its own).
- **Shows:** the media grid (`type: cards` with `lightbox: true` and `caption`), `imageFit: contain` with a wide
  `imageAspectRatio`, group headings by round, a score that is missing with its reason (`{value: null, why: "round 1
  was not scored"}`), the rail's range facet on score, and a skin that keeps the image wells paper-white in a dark
  theme because the logos are one dark ink.
- **Data:** `logos.json` and the `r01-…r11-*.svg` files in `svg/`, written by `source/make.py` from the logo lane's
  `design/logos-2026-10-25*/` folders (robotparts `lane-logos` @ 2d1aaf3): every SVG joined to its round's
  `logos.json` by file name; an SVG no entry names (an animation, the live logo) is still a row.

The original UI it replaces

the hand-built logo gallery reports, one per round (reports/media/robotparts-logos-r2…r11-2026-10-25.html in robotparts, each written by its round's own build_gallery.py, which inlined every SVG into a page of its own).

What it shows

the media grid (type: cards with lightbox: true and caption), imageFit: contain with a wide imageAspectRatio, group headings by round, a score that is missing with its reason ({value: null, why: "round 1 was not scored"}), the rail's range facet on score, and a skin that keeps the image wells paper-white in a dark theme because the logos are one dark ink.

Data

logos.json and the r01-…r11-*.svg files in svg/, written by source/make.py from the logo lane's design/logos-2026-10-25*/ folders (robotparts lane-logos @ 2d1aaf3): every SVG joined to its round's logos.json by file name; an SVG no entry names (an animation, the live logo) is still a row.