diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..952f437e
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,75 @@
+# Contributing to coder-k8s
+
+Thanks for contributing to `coder-k8s`.
+
+> [!NOTE]
+> The root [`README.md`](./README.md) is end-user focused. This guide contains local development and contribution workflows.
+
+## Development prerequisites
+
+- Go 1.25+ (`go.mod` currently declares Go 1.25.7)
+- A Kubernetes cluster (OrbStack, KIND, or any conformant cluster)
+- `kubectl` configured for your target cluster
+
+## Local development quick start (controller mode)
+
+```bash
+# Generate and apply CRDs
+make manifests
+kubectl apply -f config/crd/bases/
+
+# Run controller locally against your kubeconfig context
+GOFLAGS=-mod=vendor go run . --app=controller
+
+# In another terminal, create the sample namespace and apply a sample control plane
+kubectl create namespace coder
+kubectl apply -f config/samples/coder_v1alpha1_codercontrolplane.yaml
+
+# Verify resource creation
+kubectl get codercontrolplanes -A
+```
+
+## KIND development cluster (k9s demos)
+
+Bootstrap a KIND cluster and install CRDs/RBAC (**this switches current kubectl context**):
+
+```bash
+make kind-dev-up
+```
+
+Useful helpers:
+
+```bash
+make kind-dev-status
+make kind-dev-ctx
+make kind-dev-load-image
+make kind-dev-k9s
+make kind-dev-down
+```
+
+## Essential development commands
+
+| Command | Description |
+| --- | --- |
+| `make build` | Build all packages |
+| `make test` | Run unit + integration tests |
+| `make test-integration` | Run focused controller integration tests |
+| `make manifests` | Generate CRD and RBAC manifests |
+| `make codegen` | Run deepcopy generation |
+| `make docs-reference` | Regenerate API reference docs from Go types |
+| `make docs-check` | Build docs in strict mode (CI-equivalent) |
+| `make verify-vendor` | Verify vendored dependency consistency |
+| `make lint` | Run linter + formatting checks |
+| `make vuln` | Run vulnerability scan |
+
+## Before opening a PR
+
+Run at least:
+
+```bash
+make verify-vendor
+make test
+make build
+make lint
+make docs-check
+```
diff --git a/README.md b/README.md
index 20f1fe8a..0c3d5b58 100644
--- a/README.md
+++ b/README.md
@@ -11,13 +11,26 @@
`coder-k8s` is a Kubernetes control-plane project for managing Coder-related resources with native Kubernetes APIs.
+## Documentation
+
+Start with the published docs: **https://coder.github.io/coder-k8s/**
+
+Helpful entry points:
+
+- Getting started:
+- Deploy the controller:
+- Deploy the workspace/template API server:
+- API reference:
+
+Prefer reading docs in-repo? See [`docs/`](docs/) and run `make docs-serve`.
+
## What this project provides
- A controller-runtime operator for `coder.com/v1alpha1` resources:
- `CoderControlPlane`
- `CoderProvisioner`
- `CoderWorkspaceProxy`
-- An aggregated API server for `aggregation.coder.com/v1alpha1` resources:
+- A workspace/template API server for `aggregation.coder.com/v1alpha1` resources:
- `CoderWorkspace`
- `CoderTemplate`
- An MCP HTTP server for operational tooling.
@@ -27,113 +40,35 @@
| Mode | Description | Typical usage |
| --- | --- | --- |
-| `all` (default) | Runs controller + aggregated API + MCP HTTP together | Local dev, demos, simple cluster deployment |
-| `controller` | Runs only Kubernetes reconcilers | Controller-focused debugging and e2e smoke flows |
-| `aggregated-apiserver` | Runs only aggregated API server | Split deployments with explicit Coder backend flags |
+| `all` (default) | Runs controller + workspace/template API + MCP HTTP together | Single deployment for evaluation environments |
+| `controller` | Runs only Kubernetes reconcilers | Controller-only deployments |
+| `aggregated-apiserver` | Runs only the workspace/template API server | Split deployments with dedicated API serving |
| `mcp-http` | Runs only MCP HTTP server | MCP-focused integrations |
-## Prerequisites
+## Quick start (brief, in-cluster)
-- Go 1.25+ (`go.mod` currently declares Go 1.25.7)
-- A Kubernetes cluster (OrbStack, KIND, or any conformant cluster)
-- `kubectl` configured for your target cluster
-
-## Quick start (local controller run)
+For a full setup guide, use the docs links above. For a quick smoke deploy:
```bash
-# Generate and apply CRDs
-make manifests
+kubectl create namespace coder-system
kubectl apply -f config/crd/bases/
-
-# Run controller locally against your kubeconfig context
-GOFLAGS=-mod=vendor go run . --app=controller
-
-# In another terminal, apply a sample control plane
-kubectl apply -f config/samples/coder_v1alpha1_codercontrolplane.yaml
-
-# Verify resource creation
-kubectl get codercontrolplanes -A
-```
-
-## Documentation
-
-The project docs follow Diátaxis and live in `docs/`.
-
-- Home: [`docs/index.md`](docs/index.md)
-- Tutorial: [`docs/tutorials/getting-started.md`](docs/tutorials/getting-started.md)
-- How-to guides: [`docs/how-to/`](docs/how-to/)
-- Architecture: [`docs/explanation/architecture.md`](docs/explanation/architecture.md)
-- API reference: [`docs/reference/api/`](docs/reference/api/)
-
-Serve docs locally:
-
-```bash
-make docs-serve
+kubectl apply -f config/rbac/
+kubectl apply -f deploy/deployment.yaml
+kubectl apply -f deploy/apiserver-service.yaml
+kubectl apply -f deploy/apiserver-apiservice.yaml
+kubectl apply -f deploy/mcp-service.yaml
+kubectl rollout status deployment/coder-k8s -n coder-system
```
## Examples
- [`examples/cloudnativepg/`](examples/cloudnativepg/) — Deploy a `CoderControlPlane` with a CloudNativePG-managed PostgreSQL backend.
- [`examples/argocd/`](examples/argocd/) — Bootstrap CloudNativePG + `coder-k8s` + PostgreSQL + `CoderControlPlane` from one Argo CD `ApplicationSet`.
-
-- [`examples/aggregated/`](examples/aggregated/) - Reusable `CoderTemplate` manifests for aggregated API testing.
-
-## KIND development cluster (k9s demos)
-
-Bootstrap a KIND cluster and install CRDs/RBAC (**this switches current kubectl context**):
-
-```bash
-make kind-dev-up
-```
-
-Useful helpers:
-
-```bash
-make kind-dev-status
-make kind-dev-ctx
-make kind-dev-load-image
-make kind-dev-k9s
-make kind-dev-down
-```
-
-## Essential commands
-
-| Command | Description |
-| --- | --- |
-| `make build` | Build all packages |
-| `make test` | Run unit + integration tests |
-| `make test-integration` | Run focused controller integration tests |
-| `make manifests` | Generate CRD and RBAC manifests |
-| `make codegen` | Run deepcopy generation |
-| `make docs-reference` | Regenerate API reference docs from Go types |
-| `make docs-check` | Build docs in strict mode (CI-equivalent) |
-| `make verify-vendor` | Verify vendored dependency consistency |
-| `make lint` | Run linter + formatting checks |
-| `make vuln` | Run vulnerability scan |
-
-## Repository layout
-
-- `api/v1alpha1/` — CRD API types (`coder.com/v1alpha1`)
-- `api/aggregation/v1alpha1/` — aggregated API types (`aggregation.coder.com/v1alpha1`)
-- `internal/app/` — app mode entrypoints (`allapp`, `controllerapp`, `apiserverapp`, `mcpapp`)
-- `internal/controller/` — controller reconcilers
-- `internal/aggregated/` — aggregated storage + Coder client/provider logic
-- `config/` — generated CRDs, RBAC, samples
-- `deploy/` — deployable manifests for all-in-one, APIService, and MCP service
-- `docs/` — user-facing documentation site content
-- `hack/` — code generation and maintenance scripts
+- [`examples/coder-templates/`](examples/coder-templates/) — Reusable `CoderTemplate` manifests for workspace/template API testing.
## Contributing
-Before opening a PR, run at least:
-
-```bash
-make verify-vendor
-make test
-make build
-make lint
-make docs-check
-```
+For local development workflows, validation commands, and PR guidance, see [CONTRIBUTING.md](./CONTRIBUTING.md).
## License
diff --git a/config/samples/coder_v1alpha1_coderprovisioner.yaml b/config/samples/coder_v1alpha1_coderprovisioner.yaml
index 019d5a2c..c676ce45 100644
--- a/config/samples/coder_v1alpha1_coderprovisioner.yaml
+++ b/config/samples/coder_v1alpha1_coderprovisioner.yaml
@@ -4,6 +4,7 @@
# 1. A CoderControlPlane resource must exist in the same namespace.
# 2. The referenced CoderControlPlane status must report operator access ready:
# status.operatorAccessReady=true and status.operatorTokenSecretRef set.
+#
apiVersion: coder.com/v1alpha1
kind: CoderProvisioner
metadata:
diff --git a/config/samples/coder_v1alpha1_coderworkspaceproxy.yaml b/config/samples/coder_v1alpha1_coderworkspaceproxy.yaml
index ac33e030..010b9e9b 100644
--- a/config/samples/coder_v1alpha1_coderworkspaceproxy.yaml
+++ b/config/samples/coder_v1alpha1_coderworkspaceproxy.yaml
@@ -2,7 +2,7 @@ apiVersion: coder.com/v1alpha1
kind: CoderWorkspaceProxy
metadata:
name: coderworkspaceproxy-sample
- namespace: default
+ namespace: coder
spec:
image: "ghcr.io/coder/coder:latest"
primaryAccessURL: "https://coder.example.com"
diff --git a/docs/index.md b/docs/index.md
index 61a26128..8045499d 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -4,38 +4,33 @@
**Highly experimental / alpha software**
This project is an active prototype. Do not use it in production.
-`coder-k8s` is a Kubernetes control-plane project for running and managing Coder through Kubernetes APIs.
+`coder-k8s` is a Kubernetes control-plane stack for running and managing Coder through Kubernetes APIs.
-## What is in this repository?
+## What you can deploy
`coder-k8s` ships one binary with four app modes:
-- **`all` (default)**: controller + aggregated API server + MCP server in one process.
-- **`controller`**: reconciles `CoderControlPlane`, `CoderProvisioner`, `CoderWorkspaceProxy` (`coder.com/v1alpha1`).
+- **`all` (default)**: operator + workspace/template API server + MCP server in one process.
+- **`controller`**: reconciles `CoderControlPlane`, `CoderProvisioner`, and `CoderWorkspaceProxy` (`coder.com/v1alpha1`).
- **`aggregated-apiserver`**: serves `CoderWorkspace` + `CoderTemplate` (`aggregation.coder.com/v1alpha1`).
-- **`mcp-http`**: serves MCP tooling over HTTP.
-
-## Documentation map (Diátaxis)
-
-- **Tutorials**: guided learning path
- - [Getting started](tutorials/getting-started.md)
-- **How-to guides**: task-focused operations
- - [Deploy controller](how-to/deploy-controller.md)
- - [Deploy aggregated API server](how-to/deploy-aggregated-apiserver.md)
- - [Run MCP server](how-to/mcp-server.md)
- - [Troubleshooting](how-to/troubleshooting.md)
-- **Reference**: generated API reference
- - [API reference](reference/api/codercontrolplane.md)
-- **Explanation**: conceptual internals
- - [Architecture](explanation/architecture.md)
-
-## Quick commands
-
-```bash
-make manifests
-make test
-make build
-make docs-serve
-```
-
-New here? Start with the [Getting started tutorial](tutorials/getting-started.md).
+- **`mcp-http`**: serves operational MCP tooling over HTTP.
+
+## Quick start path
+
+If you want to deploy quickly and validate the end-to-end flow:
+
+1. Follow [Deploy a Coder Control Plane](tutorials/getting-started.md).
+2. Verify the managed Coder Deployment and Service.
+3. If you need external provisioners, continue with [Deploy an External Provisioner](tutorials/deploy-coderprovisioner.md).
+
+## Learn more
+
+- [Deploy an External Provisioner](tutorials/deploy-coderprovisioner.md)
+- [Deploy controller](how-to/deploy-controller.md)
+- [Deploy aggregated API server](how-to/deploy-aggregated-apiserver.md)
+- [Run MCP server](how-to/mcp-server.md)
+- [Troubleshooting](how-to/troubleshooting.md)
+- [API reference](reference/api/codercontrolplane.md)
+- [Architecture](explanation/architecture.md)
+
+Start with [Deploy a Coder Control Plane](tutorials/getting-started.md).
diff --git a/docs/tutorials/deploy-coderprovisioner.md b/docs/tutorials/deploy-coderprovisioner.md
new file mode 100644
index 00000000..4ef80bae
--- /dev/null
+++ b/docs/tutorials/deploy-coderprovisioner.md
@@ -0,0 +1,79 @@
+# Deploy an External Provisioner
+
+This tutorial deploys a `CoderProvisioner` for an existing `CoderControlPlane` managed by `coder-k8s`.
+
+Estimated time: **5 minutes**.
+
+## Prerequisite
+
+Complete [Deploy a Coder Control Plane](getting-started.md) first.
+
+This tutorial assumes the setup from that guide:
+
+- `CoderControlPlane` **`codercontrolplane-sample`** exists in namespace **`coder`** and is `Ready`.
+- Operator access is enabled and ready (default behavior):
+ `.status.operatorAccessReady=true`.
+
+Quick check:
+
+```bash
+kubectl get codercontrolplane codercontrolplane-sample -n coder \
+ -o jsonpath='{.status.phase}{"\n"}{.status.operatorAccessReady}{"\n"}'
+```
+
+Expected output:
+
+```text
+Ready
+true
+```
+
+## 1) Confirm external provisioner entitlement
+
+`CoderProvisioner` requires external provisioner entitlement in the referenced Coder deployment.
+
+```bash
+kubectl get codercontrolplane codercontrolplane-sample -n coder \
+ -o jsonpath='{.status.externalProvisionerDaemonsEntitlement}{"\n"}'
+```
+
+Expected values to proceed: `entitled` or `grace_period`.
+
+If the value is `not_entitled`, update the control-plane license before continuing.
+
+## 2) Deploy the `CoderProvisioner`
+
+Apply the sample manifest:
+
+```bash
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/samples/coder_v1alpha1_coderprovisioner.yaml"
+```
+
+## 3) Verify reconciliation
+
+```bash
+kubectl get coderprovisioner coderprovisioner-sample -n coder
+kubectl get coderprovisioner coderprovisioner-sample -n coder -o jsonpath='{.status.phase}{"\n"}'
+kubectl get coderprovisioner coderprovisioner-sample -n coder -o jsonpath='{range .status.conditions[*]}{.type}={.status} {.reason}{"\n"}{end}'
+```
+
+Verify generated resources:
+
+```bash
+kubectl get deployment provisioner-coderprovisioner-sample -n coder
+kubectl get sa coderprovisioner-sample-provisioner -n coder
+kubectl get role provisioner-coderprovisioner-sample -n coder
+kubectl get rb provisioner-coderprovisioner-sample -n coder
+kubectl get secret coderprovisioner-sample-provisioner-key -n coder
+```
+
+Expected: `status.phase=Ready`, `DeploymentReady=True`, and a ready provisioner pod.
+
+## 4) Clean up (optional)
+
+```bash
+kubectl delete coderprovisioner coderprovisioner-sample -n coder
+```
+
+To tear down the full stack, follow cleanup in
+[Deploy a Coder Control Plane](getting-started.md#5-clean-up-optional).
diff --git a/docs/tutorials/deploy-with-argocd.md b/docs/tutorials/deploy-with-argocd.md
index 2a4db076..1152ca51 100644
--- a/docs/tutorials/deploy-with-argocd.md
+++ b/docs/tutorials/deploy-with-argocd.md
@@ -1,4 +1,8 @@
-# Deploy coder-k8s and the CloudNativePG example with Argo CD
+# Deploy operator stack with Argo CD
+
+This tutorial deploys `coder-k8s` and the CloudNativePG-backed example stack through Argo CD.
+
+Estimated time: **20–30 minutes**.
By the end, your cluster will have:
diff --git a/docs/tutorials/getting-started.md b/docs/tutorials/getting-started.md
index 63a432dc..abc3e2f5 100644
--- a/docs/tutorials/getting-started.md
+++ b/docs/tutorials/getting-started.md
@@ -1,92 +1,108 @@
-# Getting started (local development)
+# Deploy a Coder Control Plane
-This tutorial walks through running the `coder-k8s` **controller** locally against a Kubernetes cluster, then creating your first `CoderControlPlane` resource.
+This tutorial deploys the `coder-k8s` operator and brings up one managed Coder instance from a `CoderControlPlane` resource.
+
+Estimated time: **10–15 minutes**.
## Prerequisites
-- Go 1.25+ (`go.mod` currently declares Go 1.25.7)
-- A Kubernetes cluster (OrbStack, KIND, or any conformant cluster)
+- A Kubernetes cluster
- `kubectl` configured to your target context
+- Permissions to create namespaces, CRDs, RBAC resources, and Deployments
-If you use the Nix devshell:
-
-```bash
-nix develop
-```
+## 1) Install the operator
-Optional: create a disposable KIND cluster with project defaults:
+Create the operator namespace and apply CRDs/RBAC/deployment from GitHub:
```bash
-make kind-dev-up
+kubectl create namespace coder-system
+kubectl create namespace coder
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/crd/bases/coder.com_codercontrolplanes.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/crd/bases/coder.com_coderprovisioners.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/crd/bases/coder.com_coderworkspaceproxies.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/serviceaccount.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/role.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/clusterrolebinding.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/authentication-reader-binding.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/auth-delegator-binding.yaml"
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/deploy/deployment.yaml"
```
-## 1) Generate and install CRDs
+!!! tip
+ For reproducible installs, replace `/main/` with a release tag (for example `/v0.1.0/`).
-Generate manifests:
+Wait for the operator pod:
```bash
-make manifests
+kubectl rollout status deployment/coder-k8s -n coder-system
+kubectl get pods -n coder-system
```
-Install CRDs into your cluster:
-
-```bash
-kubectl apply -f config/crd/bases/
-```
+## 2) Create a `CoderControlPlane` instance
-Create the sample namespace used by shipped manifests:
+Apply the sample control plane resource:
```bash
-kubectl create namespace coder
+kubectl apply -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/samples/coder_v1alpha1_codercontrolplane.yaml"
```
-## 2) Run the controller locally
+## 3) Verify reconciliation
-Start controller mode (terminal A):
+Check the CR status:
```bash
-GOFLAGS=-mod=vendor go run . --app=controller
+kubectl get codercontrolplane codercontrolplane-sample -n coder
+kubectl get codercontrolplane codercontrolplane-sample -n coder -o jsonpath='{.status.phase}{"\n"}{.status.url}{"\n"}'
```
-Leave this terminal running so you can watch reconciliation logs.
-
-## 3) Create a sample `CoderControlPlane`
-
-In a second terminal (terminal B):
+Verify the managed Coder Deployment and Service are present and ready:
```bash
-kubectl apply -f config/samples/coder_v1alpha1_codercontrolplane.yaml
+kubectl rollout status deployment/codercontrolplane-sample -n coder
+kubectl get deployment codercontrolplane-sample -n coder
+kubectl get service codercontrolplane-sample -n coder
```
-## 4) Verify reconciliation
+Expected result:
-Check resource status:
+- `status.phase` becomes `Ready`
+- `status.url` is populated (for example `http://codercontrolplane-sample.coder.svc.cluster.local:80`)
+- A Coder Deployment and Service named `codercontrolplane-sample` exist in `coder`
-```bash
-kubectl get codercontrolplanes -A
-kubectl describe codercontrolplane codercontrolplane-sample -n coder
-```
+## 4) Access the Coder instance (optional)
-The controller creates a Deployment + Service named after the control plane (`codercontrolplane-sample`) in the same namespace.
+Port-forward the Service locally:
```bash
-kubectl get deploy,svc -n coder
+kubectl port-forward svc/codercontrolplane-sample -n coder 3000:80
```
-## 5) Clean up (optional)
+Then open:
-```bash
-kubectl delete codercontrolplane codercontrolplane-sample -n coder
+```text
+http://127.0.0.1:3000
```
-If you used `kind-dev-up`, you can remove the cluster with:
+## 5) Clean up (optional)
```bash
-make kind-dev-down
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/samples/coder_v1alpha1_codercontrolplane.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/deploy/deployment.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/auth-delegator-binding.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/authentication-reader-binding.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/clusterrolebinding.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/role.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/rbac/serviceaccount.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/crd/bases/coder.com_coderworkspaceproxies.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/crd/bases/coder.com_coderprovisioners.yaml"
+kubectl delete -f "https://raw.githubusercontent.com/coder/coder-k8s/main/config/crd/bases/coder.com_codercontrolplanes.yaml"
+kubectl delete namespace coder --ignore-not-found
+kubectl delete namespace coder-system --ignore-not-found
```
## Next steps
-- Deploy in-cluster: [How-to → Deploy controller](../how-to/deploy-controller.md)
-- Understand internals: [Explanation → Architecture](../explanation/architecture.md)
-- Explore aggregated APIs: [How-to → Deploy aggregated API server](../how-to/deploy-aggregated-apiserver.md)
+- Run an external provisioner daemon: [Deploy an External Provisioner](deploy-coderprovisioner.md)
+- GitOps path: [Deploy operator stack with Argo CD](deploy-with-argocd.md)
+- Split deployment model: [Deploy aggregated API server](../how-to/deploy-aggregated-apiserver.md)
+- MCP operations: [Run MCP server](../how-to/mcp-server.md)
diff --git a/examples/aggregated/README.md b/examples/coder-templates/README.md
similarity index 76%
rename from examples/aggregated/README.md
rename to examples/coder-templates/README.md
index e10c0e85..c42f453c 100644
--- a/examples/aggregated/README.md
+++ b/examples/coder-templates/README.md
@@ -1,7 +1,7 @@
-# Aggregated API examples
+# CoderTemplate API examples
This directory contains example `CoderTemplate` resources for exercising the
-aggregated API server (`aggregation.coder.com/v1alpha1`).
+`CoderTemplate` API (`aggregation.coder.com/v1alpha1`).
## Smoke template export
@@ -12,7 +12,7 @@ aggregated API server (`aggregation.coder.com/v1alpha1`).
Apply it with:
```bash
-kubectl apply -f examples/aggregated/codertemplate-smoke-scratch.yaml
+kubectl apply -f examples/coder-templates/codertemplate-smoke-scratch.yaml
```
If you are updating an already-existing object with `kubectl replace`, include
diff --git a/examples/aggregated/codertemplate-smoke-scratch.yaml b/examples/coder-templates/codertemplate-smoke-scratch.yaml
similarity index 100%
rename from examples/aggregated/codertemplate-smoke-scratch.yaml
rename to examples/coder-templates/codertemplate-smoke-scratch.yaml
diff --git a/mkdocs.yml b/mkdocs.yml
index a2413011..44ffa03d 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -34,7 +34,8 @@ extra_javascript:
nav:
- Home: index.md
- Tutorials:
- - Getting started: tutorials/getting-started.md
+ - Deploy a Coder Control Plane: tutorials/getting-started.md
+ - Deploy an External Provisioner: tutorials/deploy-coderprovisioner.md
- Deploy operator stack with Argo CD: tutorials/deploy-with-argocd.md
- How-to guides:
- Deploy controller: how-to/deploy-controller.md