Skip to content

Add rowPosition/columnPosition to IO entries #212

Description

@jeffreylouden

Context

The catalog schema already defines rowPosition and columnPosition fields on IO entries (schema/json/hardware.json), and the Studio app types include them (CatalogIO in apps/studio/src/lib/types/catalog.ts), but no entries use them yet.

These fields describe the spatial arrangement of ports on a given side of a device — e.g., on the "Top" position, column 1 is leftmost, row 1 is closest to front. This enables accurate visual rendering of hardware I/O layouts in the setup graph.

Problem

  • Port rendering in the setup graph currently has no spatial ordering information
  • All ports on a given side are treated as an unordered list
  • This matters most for devices with dense I/O (audio interfaces, mixers, synths)

Proposal

  1. Define conventions for how row/column values are assigned:

    • Column: left-to-right ordering (1-based)
    • Row: front-to-back or top-to-bottom ordering (1-based)
    • Document in schema/CONTEXT.md
  2. Create an enrichment workflow (not part of bulk import) that:

    • Takes a hardware entry slug
    • Displays the product images
    • Lets you assign row/column positions to each IO port interactively
    • Writes back to the YAML
  3. Backfill existing hardware entries with high IO counts first (audio interfaces, mixers)

Why not in catalog-import?

Product pages rarely describe port layout in text — it's visual/spatial info from photos. Automated extraction would be unreliable. Better as a manual enrichment pass.

Related

  • Schema: schema/json/hardware.json (columnPosition, rowPosition fields)
  • App types: apps/studio/src/lib/types/catalog.ts (CatalogIO interface)
  • No entries currently use these fields

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions