diff --git a/mission-control/docs/guide/notifications/channels/bark.mdx b/mission-control/docs/guide/notifications/channels/bark.mdx
new file mode 100644
index 00000000..36c6f6ea
--- /dev/null
+++ b/mission-control/docs/guide/notifications/channels/bark.mdx
@@ -0,0 +1,60 @@
+---
+sidebar_custom_props:
+ icon: bark
+---
+
+# Bark
+
+Bark is a push notification service for iOS devices.
+
+:::info URL Format
+bark://**`devicekey`**@**`host`**
+:::
+
+import Fields from '@site/src/components/Fields';
+
+
+
+## Example
+
+```uri
+bark://DEVICEKEY@api.day.app/?title=Alert&body=Check+failed&group=monitoring
+```
diff --git a/mission-control/docs/guide/notifications/channels/googlechat.mdx b/mission-control/docs/guide/notifications/channels/googlechat.mdx
new file mode 100644
index 00000000..74c5f891
--- /dev/null
+++ b/mission-control/docs/guide/notifications/channels/googlechat.mdx
@@ -0,0 +1,67 @@
+---
+sidebar_custom_props:
+ icon: google-chat
+---
+
+# Google Chat
+
+:::info URL Format
+googlechat://chat.googleapis.com/v1/spaces/**`FOO`**/messages?key=**`bar`**&token=**`baz`**
+:::
+
+import Fields from '@site/src/components/Fields';
+
+
+
+## Setting up a webhook
+
+To use Google Chat notifications, you need to create an Incoming Webhook:
+
+1. Open your Google Chat room
+2. Go to the room's menu and select **Configure webhooks**
+3. Name the webhook and save it
+4. Copy the generated incoming webhook URL
+
+## Extracting the service URL
+
+The webhook URL from Google Chat looks like:
+
+```
+https://chat.googleapis.com/v1/spaces//messages?key=&token=
+```
+
+For Mission Control, convert it to the Shoutrrr format by replacing `https` with `googlechat`:
+
+```
+googlechat://chat.googleapis.com/v1/spaces//messages?key=&token=
+```
+
+## Example
+
+```uri
+googlechat://chat.googleapis.com/v1/spaces/AAAADdBz1Mk/messages?key=AIzaSyDd-example&token=aX6LdZNnexample
+```
+
+
+
+
+
diff --git a/mission-control/docs/guide/notifications/channels/gotify.mdx b/mission-control/docs/guide/notifications/channels/gotify.mdx
new file mode 100644
index 00000000..0727676a
--- /dev/null
+++ b/mission-control/docs/guide/notifications/channels/gotify.mdx
@@ -0,0 +1,80 @@
+---
+sidebar_custom_props:
+ icon: gotify
+---
+
+# Gotify
+
+Gotify is a self-hosted push notification service.
+
+:::info URL Format
+gotify://**`host`**/**`token`**
+:::
+
+import Fields from '@site/src/components/Fields';
+
+
+
+## Examples
+
+Standard usage:
+
+```uri
+gotify://gotify.example.com:443/AzyoeNS.D4iJLVa/?title=Alert&priority=1
+```
+
+With a base path (behind reverse proxy):
+
+```uri
+gotify://example.com:443/path/to/gotify/AzyoeNS.D4iJLVa/?title=Update&priority=2
+```
+
+## Creating an application token
+
+1. Log in to your Gotify server
+2. Navigate to **Apps**
+3. Click **Create Application**
+4. Give it a name and save
+5. Copy the generated application token
diff --git a/mission-control/docs/guide/notifications/channels/index.md b/mission-control/docs/guide/notifications/channels/index.md
index 6345d410..d029b0bc 100644
--- a/mission-control/docs/guide/notifications/channels/index.md
+++ b/mission-control/docs/guide/notifications/channels/index.md
@@ -7,7 +7,7 @@ sidebar_custom_props:
icon: octicon:broadcast-24
---
-:::tip Shoutrr
+:::tip Shoutrrr
Notifications in Mission Control are powered by [github.com/containrrr/shoutrrr](https://github.com/containrrr/shoutrrr)
:::
@@ -17,9 +17,13 @@ When creating a notification you can either specify a connection or a custom URL
| Service | URL format |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| [Bark](./bark) | _bark://**`devicekey`**@**`host`**_ |
| [Discord](./discord) | _discord://**`token`**@**`id`**_ |
| [Email](./email) | _smtp://**`username`**:**`password`**@**`host`**:**`port`**/?from=**`fromAddress`**&to=**`recipient1`**[,__`recipient2`__,...]_ |
+| [Google Chat](./googlechat) | _googlechat://chat.googleapis.com/v1/spaces/**`FOO`**/messages?key=**`bar`**&token=**`baz`**_ |
+| [Gotify](./gotify) | _gotify://**`host`**/**`token`**_ |
| [IFTTT](./ifttt) | _ifttt://**`key`**/?events=**`event1`**[,__`event2`__,...]&value1=**`value1`**&value2=**`value2`**&value3=**`value3`**_ |
+| [Join](./join) | _join://shoutrrr:**`api-key`**@join/?devices=**`device1`**[,__`device2`__,...]_ |
| [Mattermost](./mattermost) | _mattermost://[__`username`__@]**`mattermost-host`**/**`token`**[/__`channel`__]_ |
| [Matrix](./matrix) | _matrix://**`username`**:**`password`**@**`host`**:**`port`**/[?rooms=**`!roomID1`**[,__`roomAlias2`__]]_ |
| [Ntfy](./ntfy) | _ntfy://**`username`**:**`password`**@ntfy.sh/**`topic`**_ |
diff --git a/mission-control/docs/guide/notifications/channels/join.mdx b/mission-control/docs/guide/notifications/channels/join.mdx
new file mode 100644
index 00000000..f3b2d3db
--- /dev/null
+++ b/mission-control/docs/guide/notifications/channels/join.mdx
@@ -0,0 +1,52 @@
+---
+sidebar_custom_props:
+ icon: join
+---
+
+# Join
+
+Join is a notification service that syncs notifications across your devices.
+
+:::info URL Format
+join://shoutrrr:**`api-key`**@join/?devices=**`device1`**[,**`device2`**,...]
+:::
+
+import Fields from '@site/src/components/Fields';
+
+
+
+## Example
+
+```uri
+join://shoutrrr:YOUR_API_KEY@join/?devices=deviceA,deviceB&icon=https://link.to/icon.png&title=Alert
+```
+
+## Getting your API key and device IDs
+
+1. Visit [Join by joaoapps](https://joaoapps.com/join/)
+2. Sign in with your Google account
+3. Your API key is displayed in your account settings
+4. Device IDs are shown for each registered device
diff --git a/mission-control/docs/guide/notifications/events/configs.mdx b/mission-control/docs/guide/notifications/events/configs.mdx
index c3cbd0af..461ce87d 100644
--- a/mission-control/docs/guide/notifications/events/configs.mdx
+++ b/mission-control/docs/guide/notifications/events/configs.mdx
@@ -15,6 +15,7 @@ Configs emit events when their health changes or when they are created, modified
- `config.healthy`
- `config.unhealthy`
+- `config.degraded`
- `config.warning`
- `config.unknown`
@@ -56,6 +57,7 @@ The default notification template for health events is:
- `config.created`
- `config.updated`
+- `config.changed`
- `config.deleted`
```yaml title="ec2-instance-updates.yaml"
@@ -68,6 +70,7 @@ spec:
events:
- config.created
- config.updated
+ - config.changed
- config.deleted
filter: config.type == 'AWS::EC2::Instance'
to:
diff --git a/mission-control/docs/reference/notifications/index.mdx b/mission-control/docs/reference/notifications/index.mdx
index 69c87a65..0a1f4ae7 100644
--- a/mission-control/docs/reference/notifications/index.mdx
+++ b/mission-control/docs/reference/notifications/index.mdx
@@ -12,25 +12,26 @@ sidebar_custom_props:
Mission control uses [Shoutrrr](https://github.com/containrrr/shoutrrr/) under the hood to deliver notifications. Most of the services in the Shoutrrr are supported. Here's the complete list:
-| Services | URL Format |
-| ----------- | ---------------------------------------------------------------------------------------- |
-| Bark | `bark://devicekey@host` |
-| Discord | `discord://token@id ` |
-| Email | `smtp://username:password@host:port/?from=fromAddress&to=recipient1[,recipient2,...]` |
-| Gotify | `gotify://gotify-host/token` |
-| Google Chat | `googlechat://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz ` |
-| IFTTT | `ifttt://key/?events=event1[,event2,...]&value1=value1&value2=value2&value3=value3 ` |
-| Join | `join://shoutrrr:api-key@join/?devices=device1[,device2, ...][&icon=icon][&title=title]` |
-| Mattermost | `mattermost://[username@]mattermost-host/token[/channel]` |
-| Matrix | `matrix://username:password@host:port/[?rooms=!roomID1[,roomAlias2]] ` |
-| Ntfy | `ntfy://username:password@ntfy.sh/topic` |
-| OpsGenie | `opsgenie://host/token?responders=responder1[,responder2] ` |
-| Pushbullet | `pushbullet://api-token[/device/#channel/email]` |
-| Pushover | `pushover://shoutrrr:apiToken@userKey/?devices=device1[,device2, ...]` |
-| Rocketchat | `rocketchat://[username@]rocketchat-host/token[/channel\| @recipient]` |
-| Slack | `slack://[botname@]token-a/token-b/token-c` |
-| Teams | `teams://group@tenant/altId/groupOwner?host=organization.webhook.office.com` |
-| Telegram | `telegram://token@telegram?chats=@channel-1[,chat-id-1,...]` |
-| Zulip Chat | `zulip://bot-mail:bot-key@zulip-domain/?stream=name-or-id&topic=name` |
+| Services | URL Format |
+| -------------- | ---------------------------------------------------------------------------------------- |
+| Bark | `bark://devicekey@host` |
+| Discord | `discord://token@id ` |
+| Email | `smtp://username:password@host:port/?from=fromAddress&to=recipient1[,recipient2,...]` |
+| Generic | Sends notifications directly to a webhook |
+| Gotify | `gotify://gotify-host/token` |
+| Google Chat | `googlechat://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz ` |
+| IFTTT | `ifttt://key/?events=event1[,event2,...]&value1=value1&value2=value2&value3=value3 ` |
+| Join | `join://shoutrrr:api-key@join/?devices=device1[,device2, ...][&icon=icon][&title=title]` |
+| Mattermost | `mattermost://[username@]mattermost-host/token[/channel]` |
+| Matrix | `matrix://username:password@host:port/[?rooms=!roomID1[,roomAlias2]] ` |
+| Ntfy | `ntfy://username:password@ntfy.sh/topic` |
+| OpsGenie | `opsgenie://host/token?responders=responder1[,responder2] ` |
+| Pushbullet | `pushbullet://api-token[/device/#channel/email]` |
+| Pushover | `pushover://shoutrrr:apiToken@userKey/?devices=device1[,device2, ...]` |
+| Rocketchat | `rocketchat://[username@]rocketchat-host/token[/channel\| @recipient]` |
+| Slack | `slack://[botname@]token-a/token-b/token-c` |
+| Teams | `teams://group@tenant/altId/groupOwner?host=organization.webhook.office.com` |
+| Telegram | `telegram://token@telegram?chats=@channel-1[,chat-id-1,...]` |
+| Zulip Chat | `zulip://bot-mail:bot-key@zulip-domain/?stream=name-or-id&topic=name` |
-For more details please visit: [https://containrrr.dev/shoutrrr/0.8/services/overview/](https://containrrr.dev/shoutrrr/0.7/services/overview/)
+For more details please visit: [https://containrrr.dev/shoutrrr/v0.8/services/overview/](https://containrrr.dev/shoutrrr/v0.8/services/overview/)
diff --git a/styles/ignore/words-with-suggestions.txt b/styles/ignore/words-with-suggestions.txt
index e7ab9d95..5da5e95c 100644
--- a/styles/ignore/words-with-suggestions.txt
+++ b/styles/ignore/words-with-suggestions.txt
@@ -1,79 +1,104 @@
-actionPrefix
-agent_id
-aggregatorName
-AIOps
-eks
-gke
-aks
-datasource
-fblog
-Temurin
-dev
-
-
-created_at
-deleted_at
-updated_at
-minikube
-config_changes
-config_summary
-Temurin
-fblog
-valueFrom
-podAnnotations
-pingMode
-grafanaDashboards
-dockerSocket
-postgrest
-pprof
-canaryNamespace
-jmespath
-shellQuote
-canarySelector
-containerdSocket
-clusterName
-change_type
+AIOps
+API's
+APIs
+Alertmanager
+Ansible
+Bitnami
+Blackbox
+Booleans
+CEL's
+CRD's
+CRDs
+Chartmuseum
+Cloudprober
+Cloudwatch
+Cloudways
+Configmaps
+Cron
+Crossplane
+Datadog
+Dependabot
+Devops
+Digitalocean
+Dynatrace
Entra
-Signup
-JSONNET
+Filepath
+Filestores
+Flanksource
+GCPDatabase
+Gitea
+Github
+Gitlab
+Gitops
+Gotify
Goto
+Grafana
+HTTPConnection
JMESPath
-routable
-matchQuery
-last_runtime
-repeatInterval
-repeatGroup
-groupBy
-const
-icon_url
-argo
-clusterName
+JSONNET
+JSONPath
+JUnit
+Javascript
+Jira
+Jmx
+Junit
+Kratos
+Kuberhealthy
+Kustomization
+Mattermost
+Minio
+Mul
+Namespaces
+Ntfy
+OAuth
+Opensearch
+Param
+Playright
+Powershell
+Pushbullet
+Redistributable
+Restic
+Rocketchat
+SFTPConnection
+Scriptable
+Semver
+Shoutrrr
+Signup
+Statefulset
+Svix
+TLSConfig
+Temurin
+Trunc
+XPath
+YAMLArray
+Youtube
+Zulip
+actionPrefix
+agent_id
+aggregatorName
+aks
alarmPrefix
alertmanager
-Alertmanager
-Ansible
anyOf
api
-API's
-APIs
apiVersion
+apikey
+argo
argocd
arkade
arn
asciicast
+auditability
+avatarurl
aws
awsConnection
basepath
bash_exporter
-Bitnami
blackbox
-Blackbox
bool
boolean
-auditability
booleans
-Booleans
bools
botfather
botkey
@@ -81,6 +106,8 @@ botmail
buildMetadata
caCert
camelCase
+canaryNamespace
+canarySelector
canary_check
canary_check_duration
canary_check_failed_count
@@ -88,173 +115,148 @@ canary_check_info
canary_check_success_count
capitalizations
cel
-CEL's
-Chartmuseum
-check_id
+change_type
checkIntegrity
checkRetries
+check_id
clearResources
cli
clientHost
clientSecret
-Cloudprober
-Cloudwatch
-Cloudways
+clusterName
+colorDebug
colorError
colorInfo
colorWarn
complianceTypes
component_id
config
+config_changes
config_id
+config_summary
configmap
configmaps
-Configmaps
configs
+const
consumesApis
containerd
+containerdSocket
contentType
correctly?
cpu
crashlooping
-CRD's
-CRDs
-CRDs
+created_at
created_by
cron
-Cron
-Crossplane
crypto
csv
-csv
cyberattack
cyberattacker
cyberattacks
darwin
data
-Datadog
datapoint
datapoints
+datasource
datatype
datatypes
deadline
declaratively
-deletedAt
-deleteTimeout
-deleteTimeout
deleteTimeout
+deletedAt
+deleted_at
dependabot
-Dependabot
dependsOn
-Devops
-Digitalocean
+dev
+devicekey
disablePostgrest
displayType
dns
+dockerSocket
dsq
dst
-Dynatrace
+eks
enum
env
envvar
-envvar
etcd
exactreply
exists_one
expectedContent
-expectedContent
expectedDigest
expectedHttpStatuses
expectedSize
expr
extraArgs
+fblog
fieldSelector
filepath
-Filepath
filestat_exporter
-Filestores
flanksource
-Flanksource
fluxcd
forEach
fromAddress
fromName
gcpConnection
-GCPDatabase
getAction
-Gitea
github
-Github
-github_actions_exporter
githubToken
-Gitlab
+github_actions_exporter
gitops
-Gitops
+gke
gojq
golang
gomplate
gotemplate
-Gotify
grafana
-Grafana
-handshakeTimeout
+grafanaDashboards
+groupBy
handshakeTimeout
hardcoded
hostname
http
-HTTPConnection
httpRetryInterval
-https
-https
-httpTimeout
httpTimeout
+https
hyperthread
hyperthreaded
hyperthreading
hyperthreads
+icon_url
ignoredRules
imcp
incidentcommander
ingressHost
-ingressHost
ingressName
ingressTimeout
-ingressTimeout
inlining
insecure_tls
ip
javascript
-Javascript
-Jira
+jmespath
jmeter
-Jmx
-jq
+joaoapps
jq
jqplay
json
-json_exporter
jsonArray
jsonLogs
+json_exporter
jsonpath
-JSONPath
junit
-Junit
-JUnit
keypair
keypairs
knowledgebase
knowledgebases
-Kratos
kubeconfig
kubectl
-Kuberhealthy
kubernetes
kubernetesResource
kustomization
-Kustomization
kustomizations
kustomize
labelSelector
+last_runtime
ldap
le
lifeycle
@@ -264,23 +266,21 @@ lt
macos
mailserver
mailservers
-Mattermost
+matchQuery
maxAge
maxCount
maxLength
-maxSize
-maxSSLExpiry
maxSSLExpiry
+maxSize
maxWidth
messageKey
metacharacters
millicores
minAge
minCount
-Minio
-minrecords
minSize
-Mul
+minikube
+minrecords
multi-cloud
multicore
multiline
@@ -289,46 +289,41 @@ nameOverride
nameserver
nameservers
namespace
+namespaceSelector
namespaced
namespaces
-Namespaces
-namespaceSelector
newman
nginx
nginx's
nodeSelector
-Ntfy
oauth
-OAuth
objectPath
oneOf
-Opensearch
opensearch_exporter
-originAnnotations
orValue
+originAnnotations
packetCount
pageview
pageviews
-Param
params
parent_id
parseMode
+pingMode
ping_exporter
playbook_id
-Playright
+podAnnotations
postgres
postgresql
+postgrest
powershell
-Powershell
+pprof
prepends
priorityClass
-priorityClass
prometheus
promethus
protobuf
providesApis
pulldown
-Pushbullet
querytype
ratelimit
ratelimited
@@ -337,32 +332,23 @@ ratelimits
reachability
readonly
readyTimeout
-readyTimeout
redis
-Redistributable
+repeatGroup
+repeatInterval
repo
resourceselectors
responseCodes
-responseCodes
-responseContent
responseContent
restic
-Restic
-Rocketchat
+routable
ruleset
scheduleTimeout
-scheduleTimeout
-scheduleTimeout
script_exporter
-Scriptable
searchPath
securityContext
-Semver
serviceMonitor
-SFTPConnection
+shellQuote
shoutrrr
-Shoutrrr
-Shoutrrr
smbConnection
snake_case
splitLines
@@ -373,7 +359,6 @@ src
ssl_exporter
starttls
statefulset
-Statefulset
statefulsets
staticResources
stderr
@@ -382,23 +367,20 @@ stdout
storageclass
subchart
subcomponentOf
-substring
+subpath
substring
substrings
-Svix
targetpath
targpath
tcp
templatable
templateBody
-templateBody
+templateEnv
templated
templatedBody
-templateEnv
testResults
textarea
thresholdMillis
-thresholdMillis
timeframe
timeframes
timeseries
@@ -407,27 +389,25 @@ timeslots
titleKey
tls
tlsConfig
-tlsConfig
-TLSConfig
toJSONPretty
tolerations
toml
tooltip
topology_id
-Trunc
unencrypted
unescaped
uniq
unmarshalls
+updated_at
url
-url
-urldecode
-urlencode
urlParse
urlPart
+urldecode
+urlencode
userSearch
uuid
vCluster
+valueFrom
volumeMounts
waitFor
walkthrough
@@ -438,10 +418,6 @@ webserver
webservers
withTemplates
workflow_dispatch
-XPath
yaml
yamlArray
-YAMLArray
-Youtube
yq
-Zulip