diff --git a/.gitignore b/.gitignore
index aa4b9c076..e69485b2f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,4 @@
.DS_Store
.docusaurus
node_modules/
-docs/_examples/
-docs/_schema/
-docs/schema/
-docs/schema
-static/_schema/
build/
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 000000000..00830b6f0
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,9 @@
+{
+ "default": true,
+ "MD013": false,
+ "MD033": false,
+ "MD041": false,
+ "MD024": {
+ "siblings_only": true
+ }
+}
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 000000000..690ec1681
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,6 @@
+build/
+.docusaurus/
+node_modules/
+package-lock.json
+*.md
+*.mdx
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 000000000..e4f10ea19
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,10 @@
+{
+ "semi": true,
+ "singleQuote": true,
+ "tabWidth": 2,
+ "trailingComma": "es5",
+ "printWidth": 100,
+ "bracketSpacing": true,
+ "arrowParens": "always",
+ "proseWrap": "preserve"
+}
diff --git a/docs/schema/index.md b/docs/schema/index.md
new file mode 100644
index 000000000..8af8f0990
--- /dev/null
+++ b/docs/schema/index.md
@@ -0,0 +1,69 @@
+---
+title: Overview
+slug: /schema
+
+# This page is available at docs.overturemaps.org/schema
+---
+import CodeBlock from '@theme/CodeBlock';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+### Top-level properties
+
+In the Overture schema, all features have a unique `id` called a [GERS ID](https://docs.overturemaps.org/gers/), a `geometry` object that follows the OGC geometry specification, and other top-level properties.
+
+
+**GeoParquet columns for top-level Overture properties**
+| column_name | column_type | description |
+| --- | --- | --- |
+| **id** | *string* | an Overture feature's unique id, part of the Global Entity Reference System (GERS) |
+| **geometry** | *binary* | well-known binary (WKB) representation of the feature geometry |
+| **bbox** | *struct\* | area defined by two longitudes and two latitudes: latitude is a decimal number between -90.0 and 90.0; longitude is a decimal number between -180.0 and 180.0. |
+| **theme** | *string* | one of six Overture data themes |
+| **type** | *string* | one of 14 Overture feature types |
+| **version** | *int32* | version number of the feature, incremented in each Overture release where the geometry or attributes of this feature changed |
+| **sources** | *list\\>\>* | array of source information for the properties of a given feature |
+
+
+### Other key schema properties
+
+Most but not all of the feature types in the Overture schema require data for the `names`, `subtype`, and `class` properties. The `names` property is complex enough to have its own schema.
+
+### Properties may be specific to a feature type
+
+Some properties in the Overture schema are only populated with data for specific feature types. For example, the `place` feature type must include data for the `categories` property, as required by the schema. The `division_area` and `address` feature types require the `country` property to be populated with ISO 3166-1 alpha-2 country codes. The `segment` feature type in the transportation theme is the only feature type that includes data for a complex set of properties that describe roads. The reference section of this documentation digs into the details of these complexities.
+
+## Schema conventions
+
+### Notations
+
+#### Snake case
+
+We use snake case instead of camel case for all property names, string enumeration members, and string-valued enumeration equivalents. We do this because of case sensitivity and transformation issues in different databases and query engines. For example, Athena/Trino downcases everything, so text string splits in camel case property names get lost; in contrast, snake case passes through without issues.
+
+#### Booleans
+
+Boolean properties have a prefix verb "is" or "has" in a way that grammatically makes sense, e.g. `has_street_lights=true` and `is_accessible=false`.
+
+### Measurements
+
+
+
+Measurements of real-world objects and features follow [The International System of Units (SI)](https://www.bipm.org/en/publications/si-brochure): heights, widths, lengths, etc. In the Overture schema, these values are provided as scalar numeric value without units such as feet or meters. Overture does this to maximize consistency and predictability.
+
+Quantities specified in regulatory rules, norms and customs follow local specifications wherever possible. In the schema, these values are provided as two-element arrays where the first element is the scalar numeric value and the second value is the units. Overture uses local units of measurement: feet in the United States and meters in the EU, for example. The exact unit is confirmed in the specification of the property but is not repeated in the data.
+
+### Regulations and restrictions
+
+All quantities that relate to posted or ordinance regulations and restrictions are expressed in the same units as used in the regulation. The unit is explicitly included with the property in the data.
+
+### Opening hours and validity periods
+
+Opening hours and the time frame during which time dependent properties are applicable are indicated following the [OSM Opening Hours specification](https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification).
+
+
diff --git a/docs/schema/reference/Names/name_rule.md b/docs/schema/reference/Names/name_rule.md
new file mode 100644
index 000000000..3aa698c03
--- /dev/null
+++ b/docs/schema/reference/Names/name_rule.md
@@ -0,0 +1,16 @@
+# NameRule
+
+Name rule with variant and language specification.
+
+## Fields
+
+| Name | Type | Description |
+|-----:|:----:|-------------|
+| `side` | `string` ([Side](/schema/codegen/Names/name_rule/side/)) (optional) | Examples: `left`, `right` |
+| `between` | `list` (optional) | |
+| `value` | `string` | |
+| `variant` | `string` ([NameVariant](/schema/codegen/Names/name_rule/name_variant/)) | Examples: `common`, `official`, `alternate`, ... |
+| `language` | `string` (optional) | |
+| `perspectives` | `object` (`[Perspectives](perspectives)`) (optional) | |
+| `perspectives.mode` | `string` ([PerspectiveMode](perspective_mode)) | Whether the perspective holder accepts or disputes this name. Examples: `accepted_by`, `disputed_by` |
+| `perspectives.countries` | `list` | Countries holding the given mode of perspective. |
diff --git a/docs/schema/reference/Names/name_variant.md b/docs/schema/reference/Names/name_variant.md
new file mode 100644
index 000000000..22bc60ed5
--- /dev/null
+++ b/docs/schema/reference/Names/name_variant.md
@@ -0,0 +1,10 @@
+# NameVariant
+
+An enumeration.
+
+## Values
+
+- `common`
+- `official`
+- `alternate`
+- `short`
diff --git a/docs/schema/reference/Names/names.md b/docs/schema/reference/Names/names.md
new file mode 100644
index 000000000..aa7976deb
--- /dev/null
+++ b/docs/schema/reference/Names/names.md
@@ -0,0 +1,19 @@
+# Names
+
+Multilingual names container.
+
+## Fields
+
+| Name | Type | Description |
+|-----:|:----:|-------------|
+| `primary` | `string` | The most commonly used name. |
+| `common` | `object` (optional) | |
+| `rules` | `list