Product registry.product@1

Generated at from openvibe-contracts v0.84.0 and openvibe-sdk v0.26.0.

Version
1.0.0
Owner
network
Visibility
public
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/registry/product.v1.json

A product domain of the network's catalog (manifests/products/<domain>.json) that has no service manifest presenting it as a site: a planned product, a sub-domain of a service, a brand domain of a multi-domain service, a closed or moved address. Carries what the network's showcase pages need, copied from the OpenVibe.Sites catalog (plan T11 lane D) so Sites can be deleted. A product whose service manifest has a site block carries the same fields there (registry.service-manifest 1.1.0 site); every catalog domain has exactly one of the two homes. The $defs are shared with that site block.

Fields

FieldTypeRequiredDescriptionConstraints
domainstringyesThe product's host, unique across the catalog.
  • pattern ^[a-z0-9-]+(\.[a-z0-9-]+)+$
tldhttps://openvibe.network/contracts/registry/product.v1.json#/$defs/tldyes
namestringyesFull name, e.g. OpenVibe.Food.
  • maxLength 60
iconstringyesIcon name of the showcase pages (a Font Awesome name such as fa-utensils).
  • pattern ^[a-z0-9-]+$
accenthttps://openvibe.network/contracts/registry/product.v1.json#/$defs/accentyes
taglinestringyes
  • maxLength 120
descriptionhttps://openvibe.network/contracts/registry/product.v1.json#/$defs/descriptionyes
legalProfileenumWhich legal wording its /terms, /privacy and /dmca use (openvibe-shared/legal), as in a service manifest's site.
  • one of "streaming", "tools", "ugc", "games", "hosting", "account", "info"
kindenumAbsent for a product page. closed: the address was decided against and points elsewhere; moved: the product lives at another address; status: the address shows the network's status. relationships.links say where.
  • one of "closed", "moved", "status"
pillarshttps://openvibe.network/contracts/registry/product.v1.json#/$defs/pillars
faqhttps://openvibe.network/contracts/registry/product.v1.json#/$defs/faq
keywordshttps://openvibe.network/contracts/registry/product.v1.json#/$defs/keywordsyes
visionhttps://openvibe.network/contracts/registry/product.v1.json#/$defs/vision
highlighthttps://openvibe.network/contracts/registry/product.v1.json#/$defs/highlight
launchhttps://openvibe.network/contracts/registry/product.v1.json#/$defs/launch
relationshipshttps://openvibe.network/contracts/registry/product.v1.json#/$defs/relationships

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: moved
{
  "domain": "ai.openvibe.network",
  "tld": "ai",
  "name": "ai.openvibe.network",
  "icon": "fa-robot",
  "accent": "#c084fc",
  "tagline": "Moved: OpenVibe.AI's public home is ai.openvibe.services.",
  "legalProfile": "info",
  "kind": "moved",
  "description": "OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.",
  "keywords": "openvibe ai, openvibe network ai, openvibe platform",
  "relationships": {
    "service": "ai",
    "plannedRepo": "OpenVibe.AI",
    "linksLead": "OpenVibe.AI lives on OpenVibe.Services now.",
    "links": [
      {
        "label": "ai.openvibe.services",
        "url": "https://ai.openvibe.services/",
        "note": "OpenVibe.AI: the gateway, templates, workflows and runs."
      },
      {
        "label": "OpenVibe.Services",
        "url": "https://openvibe.services/",
        "note": "Every programmable OpenVibe service in one place."
      }
    ]
  }
}
Valid: planned
{
  "domain": "openvibe.food",
  "tld": "food",
  "name": "OpenVibe.Food",
  "icon": "fa-utensils",
  "accent": "#fb923c",
  "tagline": "What should we eat?",
  "description": "OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.",
  "pillars": [
    {
      "title": "Compare delivery",
      "text": "One search across delivery apps, with prices side by side."
    },
    {
      "title": "Kits & boxes",
      "text": "Meal kits and snack boxes, budget-friendly picks first."
    },
    {
      "title": "Plan together",
      "text": "Shared plans and chats for couples, households and groups."
    },
    {
      "title": "Cupboard recipes",
      "text": "Tell it what you have; get ideas that use it."
    }
  ],
  "keywords": "openvibe food, compare food delivery prices, meal kits, meal planning, recipe ideas, grocery tools",
  "launch": "the food tools moving over from OpenVibe.Tools",
  "relationships": {
    "noRepo": true,
    "meanwhile": [
      {
        "label": "Food tools",
        "url": "https://food.openvibe.tools",
        "note": "The food and grocery tools work today."
      },
      {
        "label": "OpenVibe.Coupons",
        "url": "https://openvibe.coupons",
        "note": "Coupons are the sibling room."
      }
    ]
  }
}
Rejected: accent-not-hex
{
  "domain": "openvibe.food",
  "tld": "food",
  "name": "OpenVibe.Food",
  "icon": "fa-utensils",
  "accent": "orange",
  "tagline": "What should we eat?",
  "description": "OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.",
  "pillars": [
    {
      "title": "Compare delivery",
      "text": "One search across delivery apps, with prices side by side."
    },
    {
      "title": "Kits & boxes",
      "text": "Meal kits and snack boxes, budget-friendly picks first."
    },
    {
      "title": "Plan together",
      "text": "Shared plans and chats for couples, households and groups."
    },
    {
      "title": "Cupboard recipes",
      "text": "Tell it what you have; get ideas that use it."
    }
  ],
  "keywords": "openvibe food, compare food delivery prices, meal kits, meal planning, recipe ideas, grocery tools",
  "launch": "the food tools moving over from OpenVibe.Tools",
  "relationships": {
    "noRepo": true,
    "meanwhile": [
      {
        "label": "Food tools",
        "url": "https://food.openvibe.tools",
        "note": "The food and grocery tools work today."
      },
      {
        "label": "OpenVibe.Coupons",
        "url": "https://openvibe.coupons",
        "note": "Coupons are the sibling room."
      }
    ]
  }
}
Rejected: link-not-https
{
  "domain": "openvibe.food",
  "tld": "food",
  "name": "OpenVibe.Food",
  "icon": "fa-utensils",
  "accent": "#fb923c",
  "tagline": "What should we eat?",
  "description": "OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.",
  "pillars": [
    {
      "title": "Compare delivery",
      "text": "One search across delivery apps, with prices side by side."
    },
    {
      "title": "Kits & boxes",
      "text": "Meal kits and snack boxes, budget-friendly picks first."
    },
    {
      "title": "Plan together",
      "text": "Shared plans and chats for couples, households and groups."
    },
    {
      "title": "Cupboard recipes",
      "text": "Tell it what you have; get ideas that use it."
    }
  ],
  "keywords": "openvibe food, compare food delivery prices, meal kits, meal planning, recipe ideas, grocery tools",
  "launch": "the food tools moving over from OpenVibe.Tools",
  "relationships": {
    "meanwhile": [
      {
        "label": "Tools",
        "url": "http://openvibe.tools"
      }
    ]
  }
}
Rejected: missing-tld
{
  "domain": "openvibe.food",
  "name": "OpenVibe.Food",
  "icon": "fa-utensils",
  "accent": "#fb923c",
  "tagline": "What should we eat?",
  "description": "OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.",
  "pillars": [
    {
      "title": "Compare delivery",
      "text": "One search across delivery apps, with prices side by side."
    },
    {
      "title": "Kits & boxes",
      "text": "Meal kits and snack boxes, budget-friendly picks first."
    },
    {
      "title": "Plan together",
      "text": "Shared plans and chats for couples, households and groups."
    },
    {
      "title": "Cupboard recipes",
      "text": "Tell it what you have; get ideas that use it."
    }
  ],
  "keywords": "openvibe food, compare food delivery prices, meal kits, meal planning, recipe ideas, grocery tools",
  "launch": "the food tools moving over from OpenVibe.Tools",
  "relationships": {
    "noRepo": true,
    "meanwhile": [
      {
        "label": "Food tools",
        "url": "https://food.openvibe.tools",
        "note": "The food and grocery tools work today."
      },
      {
        "label": "OpenVibe.Coupons",
        "url": "https://openvibe.coupons",
        "note": "Coupons are the sibling room."
      }
    ]
  }
}
Rejected: pillars-as-tuples
{
  "domain": "openvibe.food",
  "tld": "food",
  "name": "OpenVibe.Food",
  "icon": "fa-utensils",
  "accent": "#fb923c",
  "tagline": "What should we eat?",
  "description": "OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.",
  "pillars": [
    [
      "Compare delivery",
      "One search across delivery apps."
    ]
  ],
  "keywords": "openvibe food, compare food delivery prices, meal kits, meal planning, recipe ideas, grocery tools",
  "launch": "the food tools moving over from OpenVibe.Tools",
  "relationships": {
    "noRepo": true,
    "meanwhile": [
      {
        "label": "Food tools",
        "url": "https://food.openvibe.tools",
        "note": "The food and grocery tools work today."
      },
      {
        "label": "OpenVibe.Coupons",
        "url": "https://openvibe.coupons",
        "note": "Coupons are the sibling room."
      }
    ]
  }
}
Rejected: unknown-kind
{
  "domain": "openvibe.food",
  "tld": "food",
  "name": "OpenVibe.Food",
  "icon": "fa-utensils",
  "accent": "#fb923c",
  "tagline": "What should we eat?",
  "description": "OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.",
  "pillars": [
    {
      "title": "Compare delivery",
      "text": "One search across delivery apps, with prices side by side."
    },
    {
      "title": "Kits & boxes",
      "text": "Meal kits and snack boxes, budget-friendly picks first."
    },
    {
      "title": "Plan together",
      "text": "Shared plans and chats for couples, households and groups."
    },
    {
      "title": "Cupboard recipes",
      "text": "Tell it what you have; get ideas that use it."
    }
  ],
  "keywords": "openvibe food, compare food delivery prices, meal kits, meal planning, recipe ideas, grocery tools",
  "launch": "the food tools moving over from OpenVibe.Tools",
  "relationships": {
    "noRepo": true,
    "meanwhile": [
      {
        "label": "Food tools",
        "url": "https://food.openvibe.tools",
        "note": "The food and grocery tools work today."
      },
      {
        "label": "OpenVibe.Coupons",
        "url": "https://openvibe.coupons",
        "note": "Coupons are the sibling room."
      }
    ]
  },
  "kind": "archived"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('registry.product@1', value);   // { valid, errors: [{ path, message }] }