diff --git a/.spelling b/.spelling
index 9b807cc..4052e37 100644
--- a/.spelling
+++ b/.spelling
@@ -1278,3 +1278,9 @@ survdiff
svcnvfpkmurl
svcnv_URL
vcf_URL
+
+# Keys
+- content/4.pecan/4.accessibility/keyboard-shortcuts.md
+Cmd
+Ctrl
+Esc
diff --git a/content/4.pecan/4.accessibility/_dir.yml b/content/4.pecan/4.accessibility/_dir.yml
new file mode 100644
index 0000000..cc5c9b3
--- /dev/null
+++ b/content/4.pecan/4.accessibility/_dir.yml
@@ -0,0 +1 @@
+title: Accessibility
diff --git a/content/4.pecan/4.accessibility/keyboard-shortcuts.md b/content/4.pecan/4.accessibility/keyboard-shortcuts.md
new file mode 100644
index 0000000..451ff2f
--- /dev/null
+++ b/content/4.pecan/4.accessibility/keyboard-shortcuts.md
@@ -0,0 +1,17 @@
+---
+title: Keyboard Shortcuts
+navigation:
+ title: Keyboard Shortcuts
+---
+
+## About keyboard shortcuts
+
+You can use these keyboard shortcuts to navigate and perform actions across PeCan without using your mouse.
+
+## Site-wide shortcuts
+
+| Keyboard shortcut | Description |
+|--------------------------------------------------------------------------------------------|---------------------------------------|
+| Cmd + K (Mac) or
Ctrl + K (Windows/Linux) | Opens the search bar |
+| O | Opens the diagnosis search interface |
+| Esc | Closes the diagnosis search interface |
diff --git a/deployment/preview/pr133/app.yaml b/deployment/preview/pr133/app.yaml
new file mode 100644
index 0000000..bac89d1
--- /dev/null
+++ b/deployment/preview/pr133/app.yaml
@@ -0,0 +1,87 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+ name: docs
+ namespace: docs-pr133
+spec:
+ interval: 30m
+ chart:
+ spec:
+ chart: generic
+ version: 1.1.x
+ sourceRef:
+ kind: HelmRepository
+ name: stjudecloud
+ namespace: flux-system
+ interval: 1h
+ values:
+ nameOverride: docs
+ extraDeploy:
+ - |
+ apiVersion: v1
+ kind: Service
+ metadata:
+ name: {{ template "common.names.fullname" . }}-oauth-bridge
+ labels: {{- include "common.labels.standard" . | nindent 4 }}
+ {{- if .Values.commonLabels }}
+ {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+ {{- end }}
+ {{- if .Values.commonAnnotations }}
+ annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+ {{- end }}
+ spec:
+ type: ExternalName
+ externalName: oauth2-proxy.oauth2-proxy
+ - |
+ ---
+ apiVersion: networking.k8s.io/v1
+ kind: Ingress
+ metadata:
+ name: {{ .Release.Name }}-oauth
+ spec:
+ ingressClassName: nginx
+ rules:
+ - host: {{ .Values.ingress.hostname }}
+ http:
+ paths:
+ - backend:
+ service:
+ name: {{ template "common.names.fullname" . }}-oauth-bridge
+ port:
+ number: 80
+ path: /oauth2
+ pathType: ImplementationSpecific
+ tls:
+ - hosts:
+ - {{ .Values.ingress.hostname }}
+ secretName: {{ .Values.ingress.hostname }}-tls
+ image:
+ repository: stjudecloud/docs
+ tag: pr133-9cac7f6-242 # {"$imagepolicy": "flux-system:docs-pr133:tag"}
+ podAnnotations:
+ linkerd.io/inject: enabled
+ config.linkerd.io/proxy-cpu-request: 20m
+ containerPorts:
+ http: 3000
+ service:
+ ports:
+ - name: http
+ protocol: TCP
+ port: 3000
+ targetPort: http
+ ingress:
+ enabled: true
+ hostname: docs-pr133.staging.stjude.cloud
+ path: /
+ annotations:
+ cert-manager.io/cluster-issuer: letsencrypt-prod
+ linkerd.io/inject: ingress
+ nginx.ingress.kubernetes.io/auth-signin: https://$host/oauth2/start?rd=$escaped_request_uri
+ nginx.ingress.kubernetes.io/auth-url: https://$host/oauth2/auth
+ nginx.ingress.kubernetes.io/service-upstream: "true"
+ nginx.ingress.kubernetes.io/enable-modsecurity: "true"
+ nginx.ingress.kubernetes.io/enable-owasp-core-rules: "true"
+ tls:
+ enabled: true
+ datadog:
+ enabled: false