# Naming

URL: /code/file-conventions/naming · Id: `page:code/file-conventions/naming`

> How one Noun is spelled in a file name, in code, in a route, in an id and in an Event, and which names a project cannot use.

One [Noun](/business/nouns/noun) has one name, spelled six ways by where it appears. The compiler derives every spelling from the file name.

## One Noun, six spellings
Leaseline declares a `Lease` Noun, and the platform ships `CreditGrant`:

| Where | Rule | `Lease` | `CreditGrant` |
| --- | --- | --- | --- |
| [File](/business/nouns/file) name and code | PascalCase, singular | `nouns/Lease.mdx`, `$.Lease` | `nouns/CreditGrant.mdx`, `$.CreditGrant` |
| Route | kebab-case, plural | `/leases` | `/credit-grants` |
| Record id | snake_case prefix and a number | `lease_1` | `credit_grant_1` |
| A property that references it | camelCase | `lease` | `creditGrant` |
| [Verb](/business/nouns/verb) | `Noun.verb`, the Verb in camelCase | `Lease.renew` | `CreditGrant.apply` |
| [Event](/business/nouns/event) | `Noun.pastTense` | `Lease.renewed` | `CreditGrant.applied` |

A Verb's [Function](/business/nouns/function) takes both names in its file name: `nouns/Lease.renew.ts`. In a route the Verb is a path segment, `/leases/lease_1/renew`, never `:renew` or `.renew` ([routing](/code/routing)).

## Everything else
| Name | Rule | Example |
| --- | --- | --- |
| Properties, inputs, keys and [Settings](/business/nouns/setting) | camelCase | `endsOn`, `refundWindow`, `approvalHours` |
| Folders for a [Team](/business/nouns/team), [Role](/business/nouns/role), [Process](/business/nouns/process), [Site](/business/nouns/site) or [App](/business/nouns/app) | kebab-case | `agents/customer/success-manager.mdx`, `workflows/renewals/` |
| [Components](/business/nouns/component) | PascalCase | `components/RenewalCountdown.tsx` |
| [Offers](/business/nouns/offer), [Products](/business/nouns/product), [Plays](/business/nouns/play) and [Evaluators](/business/nouns/evaluator) | kebab-case | `offers/pro-annual.mdx`, `evaluators/notice-tone.ts` |
| [Domains](/business/nouns/domain) | the hostname | `domains/leaseline.app.mdx` |
| Enum values | camelCase | `atBound: upgrade`, `signup: magicLink` |
| Stripe's own fields | snake_case, only in the mapping tables | `tax_ids` beside `taxIds` ([Stripe](/code/platform/stripe)) |

## Names a project cannot use
| Name | Why |
| --- | --- |
| A record or [Collection](/business/nouns/collection) named like a declared Verb | A Verb is a path segment, so `/leases/renew` would mean two things; the write is refused |
| One Verb declared in a Noun file and in `verbs/` | It would have two definitions; the parse check fails |
| A Noun file named for an inherited Noun | Allowed: it refines the inherited Noun, adding properties and Verbs |
| `generated/` and `.sb/` | The platform writes them; a push to either is refused |
| A folder starting with `_` | Unmanaged: the compiler skips it and it never reaches [db.sb](/code/platform/db-sb) |
| Two root files in one folder | `startup.ts`, `startup.mdx` and `startup.json` are one [Startup](/business/nouns/startup); pick one |