# Customizing

URL: /code/customizing · Id: `page:code/customizing`

> Every part of a Startup starts derived from its definition, and four levels change it, each writing more and inheriting less.

Every part of a [Startup](/business/nouns/startup) starts derived from its definition. Four levels change it, and each one writes more and inherits less.

## Four levels
| Level | You write | Leaseline's example | What still updates by itself |
| --- | --- | --- | --- |
| Derive | Nothing | The `/app/leases` screen, from `nouns/Lease.mdx` | Everything |
| Configure | A [Setting](/business/nouns/setting), in `startup.ts` or `settings.mdx` | `trial: { days: 14, card: true }` on the `pro` plan | Everything but the value |
| Override | A file at the derived thing's own path | `apps/portal/leases/[lease]/view.mdx` | The rest of the [App](/business/nouns/app), [Site](/business/nouns/site) or [System](/business/nouns/system) |
| Replace | A program in `code/`, and a route to it with its reason | A route that serves a legacy webhook | Nothing on that route |

Start at the top and stop at the first level that does the job. A part left derived picks up every fix its template and [Builders](/business/nouns/builder) ship.

## By part
| Part | Configure | Override | Replace |
| --- | --- | --- | --- |
| [Verb](/business/nouns/verb) | Its Setting, such as a stakes threshold | [A Verb function](/code/file-conventions/verb-functions) | A [Function](/business/nouns/function) of another kind, see [Function kinds](/code/function-kinds) |
| App screen | The App's personas and mount | [A view](/code/file-conventions/views) | A [custom component](/code/build-a-custom-component) inside the view |
| Site [Page](/business/nouns/page) | The Site's navigation and domains | [A page file](/code/file-conventions/pages) or [layout](/code/file-conventions/layouts) | A route to a program in [`code/`](/code/file-conventions/code) |
| [System](/business/nouns/system) | Its Settings | [A system file](/code/file-conventions/systems) | A [Mapping](/business/nouns/mapping) to an outside [Source](/business/nouns/source) |
| [Dashboard](/business/nouns/dashboard) | Its window and [Role](/business/nouns/role) | [A dashboard file](/code/file-conventions/dashboards) | A custom component |
| [Role](/business/nouns/role) | Its [Limits](/business/nouns/limit) and approvals | [The Role file](/code/file-conventions/roles) | [A custom agent](/code/build-a-custom-agent) in the seat |
| [Brand](/business/nouns/brand) | [Theme](/business/nouns/theme) tokens | [A Brand template](/code/file-conventions/brand) | A custom component |

## How an override stays safe
An override is a file, so it goes through a [Change](/business/nouns/change) like any other edit. `.sb/resolved/` shows the merged result of the template and every override, so a value always traces to the file that set it. A route to `code/` names the reason a Verb could not serve, and the parse check refuses one without it.

## Leaving the platform
A Startup's records live in [db.sb](/code/platform/db-sb). Moving them to a store of your own is an ejection, which takes a recorded Change. The ejection Verb and its export have status `planned`; [import and export](/code/platform/import-export) covers the records that export.