diff --git a/linkinator.config.json b/linkinator.config.json
new file mode 100644
index 00000000..27899d74
--- /dev/null
+++ b/linkinator.config.json
@@ -0,0 +1,5 @@
+{
+ "recurse": true,
+ "markdown": true,
+ "skip": "https://hub.rivet.gg,https://twitter.com,https://www.cloudflare.com,https://cloudflare.com,https://github.com,https://support.cloudflare.com"
+}
\ No newline at end of file
diff --git a/lychee.toml b/lychee.toml
index 3ed078f2..e3f9c72b 100644
--- a/lychee.toml
+++ b/lychee.toml
@@ -17,5 +17,5 @@ exclude = [
# Bug parsing `src={xxxx}`
'%7B.*%7D$'
]
-exclude_all_private = true
+# exclude_all_private = true
exclude_mail = true
diff --git a/scripts/checkBrokenLinks.sh b/scripts/checkBrokenLinks.sh
index 4098c649..7e1010f8 100755
--- a/scripts/checkBrokenLinks.sh
+++ b/scripts/checkBrokenLinks.sh
@@ -1,4 +1,7 @@
#!/bin/sh
set -euf -o pipefail
-docker run --init -it -v `pwd`:/input lycheeverse/lychee --config /input/lychee.toml --base /input/src/pages '/input/src/pages/**/*.mdx'
+# docker run --init -it -v `pwd`:/input lycheeverse/lychee --config /input/lychee.toml --base /input/src/pages '/input/src/pages/**/*.mdx'
+# muffet --verbose --max-connections=16 --exclude='(hub.rivet.gg|tanks.rivet.game|discord.gg|twitter.com|github.com|cdn-cgi)' https://staging.rivet.gg
+
+npx linkinator --config linkinator.config.json https://c4594a48.site-ckd.pages.dev/
diff --git a/src/pages/docs/general/concepts/dev-tokens.mdx b/src/pages/docs/general/concepts/dev-tokens.mdx
index acbec0ce..6f4c668b 100644
--- a/src/pages/docs/general/concepts/dev-tokens.mdx
+++ b/src/pages/docs/general/concepts/dev-tokens.mdx
@@ -10,7 +10,7 @@ Ideally, each developer generates a token for their local development. The token
In some cases, there's no way to return a valid response when developing on your local machine.
-For example, the [`matchmaker.lobbies.find`](/docs/matchmaker/api/post-lobbies-find) endpoint will mock a fake address pointing to your local development server. It will also return a [development player token](/docs/general/concepts/token-types#matchmaker-development-player) that act as a real [player token](/docs/general/concepts/token-types#matchmaker-player).
+For example, the [`matchmaker.lobbies.find`](/docs/matchmaker/api/lobbies/find) endpoint will mock a fake address pointing to your local development server. It will also return a [development player token](/docs/general/concepts/token-types#matchmaker-development-player) that act as a real [player token](/docs/general/concepts/token-types#matchmaker-player).
## Store your token in a `.env` file
diff --git a/src/pages/docs/matchmaker/concepts/finding-lobby.mdx b/src/pages/docs/matchmaker/concepts/finding-lobby.mdx
index 83af5d0e..19fe18f3 100644
--- a/src/pages/docs/matchmaker/concepts/finding-lobby.mdx
+++ b/src/pages/docs/matchmaker/concepts/finding-lobby.mdx
@@ -2,7 +2,7 @@ import { TutorialReplit } from '@/components/TutorialReplit';
# How the matchmaker chooses lobbies
-This document explains the logic going on behind the scenes when a game calls [`Lobbies.find`](/docs/matchmaker/api/post-lobbies-find).
+This document explains the logic going on behind the scenes when a game calls [`Lobbies.find`](/docs/matchmaker/api/lobbies/find).
## TL;DR
@@ -14,7 +14,7 @@ If you're looking to build competitive matchmaking on top of Rivet, please read
## Determining the region
-If no region is specificed in [`Lobbies.find`](/docs/matchmaker/api/post-lobbies-find), Rivet will use the GeoIP location provided by Cloudflare to find the nearest datacenter.
+If no region is specificed in [`Lobbies.find`](/docs/matchmaker/api/lobbies/find), Rivet will use the GeoIP location provided by Cloudflare to find the nearest datacenter.
GeoIP does not always provide the most optimal route to the datacenter, so we recommend providing the user with the ability to select their own region.
@@ -28,7 +28,7 @@ This simplified exampe demonstrates how the matchmaker finds the correct lobby t
## Providing multiple game modes
-[`Lobbies.find`](/docs/matchmaker/api/post-lobbies-find) allows the developer to provide multiple game modes to join. In this case, Rivet Matchmaker will select the optimal lobby from all of the provided game modes.
+[`Lobbies.find`](/docs/matchmaker/api/lobbies/find) allows the developer to provide multiple game modes to join. In this case, Rivet Matchmaker will select the optimal lobby from all of the provided game modes.
This can be helpful for games with low traffic but still want to provide multiple game modes to their users. In this situation, new players will be connected to any lobby for any game mode with players in it.
@@ -36,7 +36,7 @@ This can be helpful for games with low traffic but still want to provide multipl
When all of the lobbies are full or there are no lobbies running, Rivet Matchmaker will automatically create a new lobby for the game mode specified and connect the player to that lobby.
-If this is not the desired behavior, [`Lobbies.find`](/docs/matchmaker/api/post-lobbies-find) can be called with `prevent_auto_create_lobby` as `true`. This will return a [`MATCHMAKER_NO_AVAILABLE_LOBBIES`](/errors/mm/no-available-lobbies) error when no lobby can accept players.
+If this is not the desired behavior, [`Lobbies.find`](/docs/matchmaker/api/lobbies/find) can be called with `prevent_auto_create_lobby` as `true`. This will return a [`MATCHMAKER_NO_AVAILABLE_LOBBIES`](/errors/mm/no-available-lobbies) error when no lobby can accept players.
Also see [idle lobbies](/docs/matchmaker/concepts/idle-lobbies).
@@ -64,4 +64,4 @@ Take our example at 10 PM where there are **5 lobbies** with **2 players in each
In our example, we still have 4 lobbies with only 2 players online.
-We recommend prompting players to find a new lobby when the lobby is almost empty. By having the players in these empty lobbies call [`Lobbies.find`](/docs/matchmaker/api/post-lobbies-find) again, the players will be compacted in fewer, fuller lobbies.
+We recommend prompting players to find a new lobby when the lobby is almost empty. By having the players in these empty lobbies call [`Lobbies.find`](/docs/matchmaker/api/lobbies/find) again, the players will be compacted in fewer, fuller lobbies.
diff --git a/src/pages/docs/matchmaker/index.mdx b/src/pages/docs/matchmaker/index.mdx
index 9a5c85c7..2ffcc005 100644
--- a/src/pages/docs/matchmaker/index.mdx
+++ b/src/pages/docs/matchmaker/index.mdx
@@ -11,7 +11,7 @@ The Rivet Matchmaker is a casual matchmaker optimized to get your player connect
To integrate the Rivet matchmaker, your game needs to call these three endpoints:
-- **[matchmaker.lobbies.find](/docs/matchmaker/api/post-lobbies-find)**: Called on the game client to return the address to connect to & the player token
+- **[matchmaker.lobbies.find](/docs/matchmaker/api/lobbies/find)**: Called on the game client to return the address to connect to & the player token
- **[matchmaker.players.connected](/docs/matchmaker/api/post-players-connected)**: Called on the game server to notify the matchmaker the player connected & verify the player token
- **[matchmaker.players.disconnected](/docs/matchmaker/api/post-players-disconnected)**: Called on the game server to notify the matchmaker the player disconnected
@@ -24,7 +24,7 @@ The Rivet Matchmaker is tightly integrated with Serverless Lobbies to automatica
href='/docs/matchmaker/concepts/finding-lobby'
/>