MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-3724

8.3.12 Decision — where Motir's BRAND chrome lives for cross-repo reuse, given `@motir/design-system` is installed by every scaffolded product

Done
Description

Type: decision · Executor: coding_agent · Filed by motir run MOTIR-1456 at guard #4 (a prerequisite the card assumes that does not exist).

Decide, and record as an ADR, how a second Motir-owned repository (motir-marketing, and any future one) obtains Motir's own brand chrome — the lockup component, the wave-band glyph geometry, and the .brand-* presentation CSS.

The question, and why it is not already answered

docs/decisions/design-system-package.md (Accepted 2026-07-02, written by MOTIR-1525) fixed the @motir/design-system boundary and says nothing about brand — grep -i 'brand\|marketing\|logo\|lockup\|wordmark' over it returns 0 hits. It could not have: the brand mark landed five weeks later (MOTIR-1150, done 2026-08-07). The two halves of that ADR now disagree about the brand lockup:

  • Its §1 boundary rule ADMITS it. A file moves in iff its only imports are other package files, framework peers, or cn. components/brand/BrandMark.tsx imports its sibling components/brand/waveBand.ts and React — no Motir domain module. It passes.
  • Its §Context consumer frame FORBIDS it. The declared consumers are motir-core, "nextjs-prisma-vercel-starter — a planner input, not a user product; the planner forks it and plans on top", and "the coding/scaffold agent". Shipping Motir's logomark inside a GPL-3.0 package on public npm distributes Motir's wave band to every product a Motir user scaffolds.

And the mark is not cleared: design/brand/design-notes.md states "Neither prior-art check nor trademark clearance covers this mark"MOTIR-2267 searches it in classes 9 + 42 and is still todo. GPL-3.0 grants copying and redistribution over the code, and the glyph IS the trademark, expressed as an SVG path constant.

What is in scope

The three artifacts that make up the brand chrome today, all in motir-core:

  • components/brand/BrandMark.tsx — the lockup (lockup / mark / stacked variants, default / quiet / inverted tones)
  • components/brand/waveBand.tsWAVE_BAND_PATH + WAVE_BAND_VIEW_BOX, the approved geometry (MOTIR-3181 / MOTIR-3182)
  • the .brand-* block in app/globals.css (lines 174–221) — the presentation, including the type-axis pin (.brand-word reads var(--font-sans-source), the raw FACE variable, never the var(--font-sans) ROLE token that three [data-type] blocks re-point). A distribution that loses that pin re-letters the wordmark whenever a reader changes their Appearance pairing — a defect that already shipped once in ExploreTopBar.

Options to weigh (at least these three; recommend the best, do not survey)

  1. A second published package, e.g. @motir/brand — motir-core and motir-marketing depend on it; scaffolded products never install it. Costs a second exports surface, a second release lane (copy release-design-system.yml, per its own "Extending to another package" note), and a second npm name.
  2. A subpath export off the existing package (@motir/design-system/brand) — one release lane, but the trademark still ships in every scaffolded product's node_modules, and the semver surface grows.
  3. motir-marketing carries its own copy — no new package, but this is the two-sources-of-truth drift the ADR §3.1 exists to kill (it retired nextjs-prisma-vercel-starter-with-design for exactly this).

Weigh at minimum: trademark exposure under GPL-3.0 redistribution; whether a scaffolded third-party product should be able to import { BrandMark } at all; the release-lane cost; how the .brand-* CSS travels (it is app-tail CSS today, not part of theme.css); and whether the decision should wait on MOTIR-2267's clearance or is independent of it.

Acceptance criteria

  • An ADR exists at motir-core/docs/decisions/ recording the chosen mechanism, the options weighed, and the rejection reason for each — in the shape of design-system-package.md, and cross-referenced from it so the two boundaries are read together.
  • The ADR states explicitly whether Motir's brand chrome MAY appear in a package that scaffolded third-party products install, and says why.
  • The ADR names the concrete home for each of the three artifacts above (component, geometry constant, .brand-* CSS), and how the type-axis pin (--font-sans-source) survives the move.
  • The ADR names its relationship to MOTIR-2267 (trademark clearance): either a stated dependency, or a recorded reason the decision does not wait on it.
  • The ADR ships as a docs-only diff on a docs/MOTIR-<id>-<slug> branch; no runtime moves in this card (the implementation is MOTIR-1456, which this blocks).

Context refs

  • motir-core/docs/decisions/design-system-package.md — the boundary this amends (§1 boundary rule, §Context consumer frame, §3 distribution, §3.1)
  • motir-core/components/brand/BrandMark.tsx, components/brand/waveBand.ts, app/globals.css lines 174–221
  • motir-core/design/brand/design-notes.md — §3 the reference CSS, §7 the variants, §8 accessible names, and the trademark-clearance note
  • motir-core/packages/design-system/package.json — the exports map and files allowlist a second package would mirror
  • .github/workflows/release-design-system.yml — the release lane, and its own note on extending to another package
  • MOTIR-2267 (trademark clearance, classes 9 + 42, todo) · MOTIR-1525 (the ADR this amends) · MOTIR-1150 (the brand mark's application)