# Product definition

URL: /code/project-structure/product-definition · Id: `convention:product-definition`

> A Product definition names what a Customer gets and references its Nouns by id, so one Noun serves many Products.

A Product definition names what a [Customer](/business/nouns/customer) gets and references its [Nouns](/business/nouns/noun) by id, so one Noun serves many [Products](/business/nouns/product).

| Property | Value |
| --- | --- |
| Path | `products/[product].mdx` |
| Holds | [Product](/business/nouns/product) |
| Kind | file |
| Leaders | db-first, git-first |
| Team | [Product Team](/agents/product) |
| Written by | [Change.merge](/business/nouns/change/merge) |
| Compiled by | [SoftwareBuilder](/code/builders/software) |

### Example
`products/monthly-close.mdx` in a Startup repository. Closewise, a sample business, declares a `Close` Noun.

```mdx title="products/monthly-close.mdx"
---
$type: [Service, API]
nouns: [Close]
verbs: [Close.reconcile, Close.close]
---
Books done within three business days of month end, tied out to the bank.
```

### Props
The frontmatter keys the file takes. The body is its prose.

| Prop | Type | Required | Description |
| --- | --- | --- | --- |
| `nouns` | list of [Noun](/business/nouns/noun) | No | The Nouns it exposes, by id. Nouns stay at the root, so two Products share one. |
| `verbs` | `string[]` | No | The Verbs it exposes, by id. |
| `interfaces` | list of [Interface](/business/nouns/interface) | No | The Interfaces it serves on. |
| `role` | [Role](/business/nouns/role) | No | For an Agent, the Role in `agents/` it fills. |

### Generates
[SoftwareBuilder](/code/builders/software) compiles it into these records, Verbs and routes.

| Kind | What |
| --- | --- |
| Records | [Product](/business/nouns/product), [Interface](/business/nouns/interface) |
| Verbs | None. |
| Routes | `/{ns}/{nouns}` |