Core Resources
View as Markdown

Brand

The canonical Hi Marley brand — design tokens, expression assets, skills, voice & guidelines, and a downloadable kit. Built for humans and machines.

The Brand is the single source of truth for what "on-brand" means at Hi Marley — for people building decks and droplets, and for agents generating content. It exposes machine-readable design tokens (/api/brand/tokens.json), the curated expression assets (photography, iconography, patterns, network expression), the brand skills, and the voice & guidelines.

Access is gated to Brand Stewards (@drop-brand-stewards) while the new brand is in progress. Customer logos, employee headshots, and other "handy" assets live in the Library, separately — the Brand and Library sit side by side.

There is no versioning: one canonical brand, no draft/archived states.

Icon tiers

Iconography carries a curation tier, separate from tags. Tags describe what an asset is about (lifestyle, business, ai); tier describes how prominent it is:

  • marquee — the named, hand-curated set. The website nav icons and the ecosystem chips, in a deliberate order (tierRank).
  • common — frequently used, one step below the marquee set.
  • library — everything else. The default, and the bulk of the ~5,000 icons.

If you are an agent picking an icon, start with --tier marquee. It is the small set Hi Marley actually uses, so it is the on-brand answer far more often than a name search across the full library. Widen to common, then drop the tier filter entirely, only if nothing fits. Search without a tier reaches every tier.

The Brand object

Every Brand carries these attributes.

Attributes

name
string
Display name of the brand.
tagline
string
One-line description shown in the Brand OS header.
assetCount
integer
Total brand expression assets across all categories.
skillCount
integer
Number of brand skills linked to the brand.
assetTier
'marquee' | 'common' | 'library'
Curation tier on an iconography asset — how prominent it is, separate from tags (which describe subject matter). Defaults to library. Filter with --tier on brand assets list / search; set with brand assets update --tier or brand assets bulk-tier. tierRank orders the marquee set.
colorTokenCount
integer
Number of color tokens in the palette (Core + Supporting tiers). Each token carries its full build — hex, and optionally PMS/CMYK/RGB and a --marley-* cssVar cross-ref. Read via /api/brand/tokens.json; stewards edit them in the Basics tab.
THE BRAND OBJECT
{
  "name": "Hi Marley Brand",
  "tagline": "Everything you need to be on-brand — for humans and machines.",
  "assetCount": 175,
  "skillCount": 3,
  "colorTokenCount": 9
}

Methods

Endpoints to operate on a Brand. The example switches between curl, drop CLI, and MCP via the dropdown — your choice persists across the page.

GET

Get brand tokens

/api/brand/tokens.json

Return the machine-readable design tokens — color palette and typeface. This is the endpoint agents and build tools pull so they never guess brand values. Brand Steward access required.

GET/api/brand/tokens.json
drop brand tokens
Response200
{
  "colors": [
    {
      "tier": "core",
      "name": "Marley Red",
      "hex": "#F9685D",
      "pms": "7416 C",
      "cmyk": "0 74 60 0",
      "rgb": "249 104 93",
      "cssVar": "--marley-coral",
      "usage": "Primary actions, CTAs"
    }
  ],
  "typeface": {
    "name": "Greycliff CF",
    "role": "Display & headings"
  }
}
GET

List brand assets

/api/brand/assets

List the brand expression assets — photography, iconography, patterns, network expression. Optionally filter by category or curation tier (marquee = the named, hand-curated set; common = frequently used; library = everything else). Brand Steward access required.

GET/api/brand/assets
drop brand assets list --category icon
Response200
{
  "assets": [
    {
      "id": "i1",
      "filename": "icon_handshake_outline_red.svg",
      "category": "icon",
      "url": "https://drop-apps.himarley.xyz/_library/brand/assets/.../icon_handshake_outline_red.svg"
    }
  ]
}
PATCH

Update a brand asset

/api/brand/assets/{id}

Edit a brand asset’s metadata (tags, usage guidance, alt text) or retire/restore it (archived). Metadata edits never change the asset’s URL. To change the artwork itself, upload a new asset instead — URLs are immutable so existing references never silently move. Brand Steward access required.

Parameters

id
string· path· required
The brand asset id.
tags
string[]· body
Replace the tag set.
usageGuidance
string | null· body
AI usage guidance; null to clear.
altText
string | null· body
Alt text; null to clear.
archived
boolean· body
true to retire, false to restore.
tier
'marquee' | 'common' | 'library'· body
Curation tier.
tierRank
number | null· body
Order within the marquee set; null to unrank.
PATCH/api/brand/assets/{id}
drop brand assets update ckbrandasset0001 --usage-guidance "Use on dark backgrounds only."
Response200
{
  "asset": {
    "id": "ckbrandasset0001",
    "filename": "logo_hi_marley_white.svg",
    "category": "logo",
    "url": "https://drop-apps.himarley.xyz/_brand/assets/.../logo_hi_marley_white.svg",
    "tags": [],
    "usageGuidance": "Use on dark backgrounds only.",
    "altText": null,
    "archivedAt": null
  }
}
DELETE

Delete a brand asset

/api/brand/assets/{id}

Permanently delete a brand asset — removes the database row and the underlying S3 object. This breaks any URL that still points at it, so reserve it for mistakes; to retire a published asset safely, use brand assets update --archived instead. Brand Steward access required.

Parameters

id
string· path· required
The brand asset id.
DELETE/api/brand/assets/{id}
drop brand assets delete ckbrandasset0001
Response200
{
  "deleted": true,
  "id": "ckbrandasset0001"
}
GET

List brand asset tags

/api/brand/assets/tags

List the brand-asset tag vocabulary — the distinct tags stewards have applied to assets, with usage counts, ranked by frequency. These are a separate namespace from droplet tags. Optional q filters by substring. Brand Steward access required.

Parameters

q
string· query
Filter tags by substring.
GET/api/brand/assets/tags
drop brand assets tags
Response200
{
  "tags": [
    {
      "tag": "partnership",
      "count": 4,
      "lastUsed": "2026-07-01T12:00:00.000Z"
    }
  ]
}
POST

Bulk add/remove asset tags

/api/brand/assets/bulk/tags

Add and/or remove tags across many brand assets at once (union-add then set-remove, normalized + deduped per asset). Powers multi-select tagging. Ids not on the canonical brand are returned in notFound. Brand Steward access required.

Parameters

ids
string[]· body· required
Asset ids to tag (1-200).
add
string[]· body
Tags to add (union).
remove
string[]· body
Tags to remove.
POST/api/brand/assets/bulk/tags
drop brand assets bulk-tags --ids ck1,ck2 --add partnership --remove draft
Response200
{
  "updated": [
    {
      "id": "ck1",
      "tags": [
        "partnership"
      ]
    },
    {
      "id": "ck2",
      "tags": [
        "partnership"
      ]
    }
  ],
  "notFound": []
}
POST

Bulk set asset curation tier

/api/brand/assets/bulk/tier

Set the curation tier across many brand assets at once. Every found id reports the tier it now holds, whether or not it changed; ids not on the canonical brand come back in notFound. To order icons within the marquee set, use brand assets update --tier-rank. Brand Steward access required.

Parameters

ids
string[]· body· required
Asset ids to retier (1-200).
tier
'marquee' | 'common' | 'library'· body· required
The tier to set.
POST/api/brand/assets/bulk/tier
drop brand assets bulk-tier --ids ck1,ck2 --tier common
Response200
{
  "updated": [
    {
      "id": "ck1",
      "tier": "common"
    },
    {
      "id": "ck2",
      "tier": "common"
    }
  ],
  "notFound": []
}