Skip to content

Commit fae7901

Browse files
garrappachcclaude
andauthored
docs: update for v4 (#101)
* docs: update documentation for v4 monolith architecture Reflects the migration from separate client/server repos to the unified tf2pickup monolith. Updates deployment configs, env vars, nginx setup, docker-compose examples, and adds a v4 migration guide. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update screenshots and documentation for v4 Capture all screenshots from the v4 monolith UI using a new Playwright automation script. Update documentation for v4 changes: skill editing is now inline on player profiles, "force create account" replaced by "bypass registration restrictions". Queue screenshot includes fake players with map votes for a realistic preview. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: rename "advanced site settings" to "View for nerds" Reflect the v4 UI rename from "Edit configuration" to "View for nerds". Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: remove diagnostics & mumble dialog, add accept-rules screenshot Remove game server diagnostics section and "I have mumble" dialog from final-touches.md as both features are gone in v4. Add registration flow screenshot capturing the accept-rules dialog using a dummy player. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: capture v4 ban flow screenshots Add screenshots for all three ban modes (duration, end date, forever) and the ban banner shown to banned players on the queue page. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update ban flow for v4 UI Update "Handing out bans" section to reflect v4 flow (Edit player -> Bans tab -> Add ban). Capture ban list from NewPlayer showing the revoke button, and hide browser notifications banner in the banned player perspective screenshot. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: capture active game, substitute flow, and reassign dialog screenshots Insert a fake in-progress game into MongoDB to capture all game state screenshots: admin view with control buttons, player/spectator views, reassign server dialog (with static + serveme.tf servers), substitute request notification, free sub slot, after-sub-joined, and force-ended game. Remove after-server-reassignment screenshot from docs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update game management docs and recapture screenshots for v4 Update reassign/reinitialize/force-end sections with correct v4 button names, show naturally-ended game with logs/demo links, and recapture remaining screenshots across admin panel, game states, and settings pages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add game skill values GIF, update serveme.tf integration docs Capture animated GIF showing skill toggle on game page, recapture serveme.tf integration screenshot as element crop, update docs to describe both available settings (preferred region + banned patterns), and remove obsolete change-serveme-preference screenshot. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update force-create terminology, recapture skill table, remove orphaned screenshots Replace "force create player account" with "bypass registration restrictions" to match v4 terminology. Recapture skill-table.png showing the v4 skill import/export page. Remove 10 orphaned screenshots no longer referenced in docs (old skill settings, force-created profile, game server diagnostics, mumble dialog). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: fix typos, grammar, outdated references, and remove orphaned images - Fix "pickup server" → "application" in reinitializing games section - Fix grammar: "Lets" → "Allows" in website settings - Fix typos: "miliseconds" → "milliseconds", "reduntant" → "redundant", "TAGE" → "TAG", double backtick - Add tip linking serveme.tf exclusion to Game Servers admin panel - Add info box clarifying v10 migration section is for older versions - Delete 4 orphaned screenshots not referenced in any docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update player restrictions docs for manual verification feature Replaces "deny players with no skill assigned" with the new manual player verification system introduced in tf2pickup-org/tf2pickup#484. - Update website-settings.md: rename toggle, describe verification flow and Discord notifications - Update admin-responsibilities-and-powers.md: add player verification to the list of admin powers - Update the-most-common-tasks.md: note the Player verified checkbox in the admin toolbox - Recapture player-restrictions.png and set-skills-for-a-player.png - Remove orphaned your-account-needs-review.png Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: address review comments on v4 migration PR - Update serveme.tf info note: servers always show when API key is set - Clarify Reset button resets to the default skill table values - Add Mumble internal address field mention in troubleshooting - Update logs.tf section: v4 handles missing/invalid API key gracefully - Replace View for nerds description with reviewer-provided text - Drop unsupported/restart warning from ready state timeout section - Drop description paragraph from ready up timeout section - Drop redundant tip from serveme.tf exclusion section - Highlight SteamID64 requirement in bypass registration restrictions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7031e42 commit fae7901

76 files changed

Lines changed: 2822 additions & 2846 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/admin-responsibilities-and-powers.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ Pickup admins are responsible for the game balance, healthy organization and - a
77
They can:
88

99
- assign skills to players, see skills of all players,
10+
- verify players (when player verification is required),
1011
- request player substitutes during the games,
1112
- ban players and revoke those bans,
1213
- manage the map pool,
1314
- manage the whitelist,
14-
- force create player accounts,
15+
- bypass registration restrictions for players,
1516
- scramble maps available in the votes,
1617
- edit static pages (like the rules page).
1718

docs/building-a-custom-client.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

docs/components-introduction.md

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,15 @@
22
title: Components introduction
33
---
44

5-
In order to run a fully fledged tf2pickup.org instance, you are going to set up and configure a couple of components. These compoents can be served by a docker-compose container stack in Docker. That lets server administrators set up the project quickly, without any need of deep understanding of how certain elements of the site work, such us MongoDB configuration. Site deployment through Docker not only saves a lot of time for having a good understanding of how setup works, but also lets administrators run it in a separated environment, meaning there is no need for having anything very specific installed in your host system (besides Docker and docker-compose and the reverse proxy server).
5+
In order to run a fully fledged tf2pickup.org instance, you are going to set up and configure a couple of components. These components can be served by a docker-compose container stack in Docker. That lets server administrators set up the project quickly, without any need of deep understanding of how certain elements of the site work, such as MongoDB configuration. Site deployment through Docker not only saves a lot of time for having a good understanding of how setup works, but also lets administrators run it in a separated environment, meaning there is no need for having anything very specific installed in your host system (besides Docker, docker-compose and the reverse proxy server).
66

77
## The reverse proxy server
88

9-
This part of the setup is not currently delivered together with the tf2pickup.org container stack (however we plan to change it in the future). It lets users access the client lets them communicate with the backend, for instance when they log in to the site. This should be delivered together with SSL certificates, regardless if they are paid or free. We described all setup steps for both [here](/docs/setup-prerequisites).
9+
This part of the setup is not currently delivered together with the tf2pickup.org container stack. It routes traffic to the application and terminates SSL. This should be delivered together with SSL certificates, regardless if they are paid or free. We described all setup steps [here](/docs/setup-prerequisites).
1010

11-
## The server
11+
## The application
1212

13-
This is the backend of the whole system. It is responsible for accessing the database, configuring game servers and much, much more.
14-
Read how to deploy and configure one [here](/docs/site-components-deployment).
15-
16-
## The client
17-
18-
This is the frontend, the webpage itself. You can configure your own look'n'feel so that the service looks unique.
19-
It communicates with the server and presents the data to the user in a accessible, eye-catching and friendly way.
20-
[Here](/docs/building-a-custom-client) you will find the documentation on how to prepare your own branding, how to build the client and how to deploy it.
13+
The tf2pickup.org application is a single service that handles both the web interface and all backend logic — accessing the database, configuring game servers and much more. Read how to deploy and configure it [here](/docs/site-components-deployment).
2114

2215
## The voice server
2316

@@ -61,5 +54,5 @@ We provide a [Docker image](https://github.com/tf2pickup-org/tf2-gameserver) tha
6154

6255
The site deployment can be done in one of two ways:
6356

64-
- Bundled - Server, client, game and voice server(s) on one host.
65-
- Divided - Server and client are both on one host, while game server(s) are on another. This does not exclude hosting game servers on multiple different hosts.
57+
- Bundled - The application, game and voice server(s) on one host.
58+
- Divided - The application is on one host, while game server(s) are on another. This does not exclude hosting game servers on multiple different hosts.

docs/custom-branding.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
title: Custom branding
3+
---
4+
5+
tf2pickup.org supports custom branding so that each instance can have its own logo and favicon. Customization is done through a combination of image files and environment variables — no code changes are needed.
6+
7+
## How it works
8+
9+
The application serves static assets from the `public/` directory. When the `WEBSITE_BRANDING` environment variable is set, the application looks for assets in `public/branding/<name>/` first, falling back to the defaults in `public/` if a file is not found there.
10+
11+
## Adding your branding
12+
13+
1. Create a new directory under `public/branding/` named after your instance (e.g. `tf2pickup.fr`).
14+
15+
2. Add the following files to it:
16+
17+
| File | Description |
18+
|------|-------------|
19+
| `logo.png` | Site logo displayed in the navigation bar |
20+
| `favicon.png` | Favicon in PNG format |
21+
| `favicon.ico` | Favicon in ICO format |
22+
23+
3. Submit a pull request to the [tf2pickup repository](https://github.com/tf2pickup-org/tf2pickup) with your new branding directory.
24+
25+
For an example, see [this commit](https://github.com/tf2pickup-org/tf2pickup/commit/c29ac2e) that adds branding for a new instance.
26+
27+
## Enabling your branding
28+
29+
Set the following environment variables in your `.env` file:
30+
31+
```env
32+
# The display name of your instance
33+
WEBSITE_NAME=tf2pickup.fr
34+
35+
# The name of the branding directory under public/branding/
36+
WEBSITE_BRANDING=tf2pickup.fr
37+
```
38+
39+
`WEBSITE_NAME` controls the site name shown in page titles, logs.tf uploads, Discord notifications, and other text references. `WEBSITE_BRANDING` controls which logo and favicon files are served.
40+
41+
If `WEBSITE_BRANDING` is not set, the default tf2pickup.org branding is used.

docs/final-touches.md

Lines changed: 29 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@ We discourage you from using inline HTML formatting, since it's buggy.
1212

1313
![edit-rules](/img/content/final-touches/edit-rules.png)
1414

15-
After setting up the rules, they will show up in a popup for every user joining the site for the very first time (right with Mumble requirement notification):
15+
After setting up the rules, they will show up in a popup for every user joining the site for the very first time:
1616

17-
![edit-rules](/img/content/final-touches/i-have-mumble.png)
18-
19-
![edit-rules](/img/content/final-touches/accept-site-rules.png)
17+
![accept-site-rules](/img/content/final-touches/accept-site-rules.png)
2018

2119
## Reviewing the privacy policy
2220

@@ -30,7 +28,7 @@ Please take a look at the privacy policy document; it is accessible for the user
3028
This feature is accessible only for accounts with Superuser role set.
3129
:::
3230

33-
Version 10.x comes up with player action log feature. It lets you see who accessed the website, when and what the user agent of user's browser was. It is possible to filter results by entering:
31+
The player action log lets you see who accessed the website, when and what the user agent of user's browser was. It is possible to filter results by entering:
3432

3533
- name,
3634
- Steam ID (SteamID64 format),
@@ -46,17 +44,11 @@ All connections to the website and gameservers are logged.
4644

4745
Pickup games require game servers on which it can be set up. In order to do that, you have to define the same game server secret for the server (variable `GAME_SERVER_SECRET` in `.env`) and for game servers (variable `TF2PICKUPORG_SECRET` in `gameserver_x.env` or by defining `sm_tf2pickuporg_secret` value in game server's `server.cfg` configuration file). Server being behind a proxy [may need an internal address value defined](/docs/site-components-deployment#gameserver_1env).
4846

49-
This mechanism is used since server version 8.x and the game server setup is being done automatically. After discovering newly setup game servers, they will show up on the server list, which can be accessed through Admin Panel -> Game servers:
47+
The game server setup is being done automatically. After discovering newly setup game servers, they will show up on the server list, which can be accessed through Admin Panel -> Game servers:
5048

5149
![game-servers-configuration](/img/content/final-touches/game-servers-configuration.png)
5250

53-
If you have any static servers, they will show up on the list. You can click on any of them in order to see their address and to perform diagnostics. In order to do that, click the **Run diagnostics** button. The site will perform tests to ensure the game server works correctly.
54-
55-
![game-server-details](/img/content/final-touches/game-server-details.png)
56-
57-
There you can see the diagnostics status. In this case everything went smooth and things seem to be fine.
58-
59-
![game-server-diagnostics](/img/content/final-touches/game-server-diagnostics.png)
51+
If you have any static servers, they will show up on the list.
6052

6153
### serveme.tf integration settings
6254

@@ -68,11 +60,10 @@ Provided you have a valid serveme.tf API key set in your `.env` file, _serveme.t
6860

6961
![configure-serveme-integration](/img/content/final-touches/configure-serveme-integration.png)
7062

71-
Currently the only setting you can define at this point is the preferred region of the reserved servers.
72-
73-
![change-serveme-preference](/img/content/final-touches/change-serveme-preference.png)
63+
Here you can configure:
7464

75-
You can also exclude servers from being reserved by providing keywords you want to avoid. For that, check [here](/docs/website-settings#excluding-specific-servemetf-gameservers).
65+
- **Preferred region** — pick the region closest to your players. If a server from the preferred region is not available, another one will be used instead.
66+
- **Banned game server name patterns** — exclude servers whose names contain any of the listed patterns from being reserved.
7667

7768
## Add admins to the site, set up whitelist, maps and skills
7869

@@ -173,28 +164,14 @@ docker compose up -d --pull always
173164

174165
If your containers are not set up with docker-compose, you will have to pull all container images you use manually and recreate containers with the same [port usage](https://docs.docker.com/config/containers/container-networking/), [network settings](https://docs.docker.com/engine/reference/run/#network-settings), [and volume setup](https://docs.docker.com/engine/reference/commandline/run/#mount-volumes-from-container---volumes-from).
175166

176-
For example, here is our list of containers:
167+
For instance, let's say you want to upgrade the `tf2pickup-eu-tf2pickup-1` container. That means, in order to upgrade that single container, you will have to execute:
177168

178169
```bash
179-
tf2pickup@tf2pickup:~$ docker ps -a
180-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
181-
314aa034dbaa portainer/portainer-ce:latest "/portainer" 33 hours ago Up 15 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
182-
d8885d9c1660 mongo:4.0 "docker-entrypoint.s…" 33 hours ago Up 15 hours 0.0.0.0:8001->27017/tcp, :::8001->27017/tcp tf2pickup-eu_mongodb_1
183-
213e9ca18159 ghcr.io/tf2pickup-org/tf2-gameserver:latest "./entrypoint.sh +sv…" 2 days ago Up 15 hours tf2pickup-eu_gameserver2_1
184-
27b4baca2ed1 ghcr.io/tf2pickup-org/tf2-gameserver:latest "./entrypoint.sh +sv…" 2 days ago Up 15 hours tf2pickup-eu_gameserver1_1
185-
e5ffd4447a8d containrrr/watchtower "/watchtower --clean…" 2 weeks ago Up 15 hours 8080/tcp watchtower
186-
02c53d082927 ghcr.io/tf2pickup-org/server "docker-entrypoint.s…" 2 weeks ago Up 15 hours tf2pickup
187-
906a368fe18d ghcr.io/tf2pickup-org/tf2pickup.eu "/docker-entrypoint.…" 2 weeks ago Up 15 hours 0.0.0.0:4000->80/tcp, :::4000->80/tcp tf2pickup-eu_client_1
188-
```
189-
190-
For instance, let's say you want to upgrade a `tf2pickup-eu_client_1` container. This one is exposing its port TCP 80 to a host port TCP 4000 (both on IPv4 and IPv6 stacks). That means, in order to upgrade that single container, you will have to execute:
191-
192-
```bash
193-
docker pull ghcr.io/tf2pickup-org/tf2pickup.eu
194-
docker rename tf2pickup-eu_client_1 tf2pickup-eu_client_1_old
195-
docker stop tf2pickup-eu_client_1_old
196-
docker run -d -p 4000:80 --name tf2pickup-eu_client_1 --restart always --volumes-from tf2pickup-eu_client_1_old ghcr.io/tf2pickup-org/tf2pickup.eu
197-
docker rm tf2pickup-eu_client_1_old
170+
docker pull ghcr.io/tf2pickup-org/tf2pickup:latest
171+
docker rename tf2pickup-eu-tf2pickup-1 tf2pickup-eu-tf2pickup-1_old
172+
docker stop tf2pickup-eu-tf2pickup-1_old
173+
docker run -d -p 3000:3000 -p 9871:9871/udp --name tf2pickup-eu-tf2pickup-1 --restart always --env-file ./.env ghcr.io/tf2pickup-org/tf2pickup:latest
174+
docker rm tf2pickup-eu-tf2pickup-1_old
198175
```
199176

200177
#### By one-time watchtower upgrade
@@ -221,11 +198,10 @@ docker run --rm \
221198
-v /var/run/docker.sock:/var/run/docker.sock \
222199
containrrr/watchtower \
223200
--run-once \
224-
tf2pickup-eu_gameserver1_1 \
225-
tf2pickup-eu_gameserver2_1 \
226-
tf2pickup-eu_mongodb_1 \
227-
tf2pickup-eu-server_1 \
228-
tf2pickup-eu_client_1
201+
tf2pickup-eu-tf2pickup-1 \
202+
tf2pickup-eu-gameserver1-1 \
203+
tf2pickup-eu-gameserver2-1 \
204+
tf2pickup-eu-mongodb-1
229205
```
230206

231207
:::
@@ -303,7 +279,7 @@ TZ="Europe/Warsaw"
303279
# optional arguments when you want to set notifications to a Discord webhook
304280
WATCHTOWER_NOTIFICATIONS_LEVEL="info"
305281
WATCHTOWER_NOTIFICATIONS_HOSTNAME="tf2pickup.eu"
306-
WATCHTOWER_NOTIFICATION_TITLE_TAGE="[tf2pickup.eu] "
282+
WATCHTOWER_NOTIFICATION_TITLE_TAG="[tf2pickup.eu] "
307283
# format: discord://token@channel
308284
# https://discord.com/api/webhooks/1234567890123456789/XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXD
309285
# where the channel is 1234567890123456789 and the token is XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXD
@@ -314,52 +290,36 @@ Watchtower will pull images and replace container images automatically. It also
314290

315291
## Blocking automatic updates when using watchtower
316292

317-
:::caution
318-
Only use version of server and client that are compatible with each other. Mixing server and client version can and will break if not done properly. If you're unsure which version to use, you may always reach out for clarification.
319-
:::
320-
321-
In some unusual cases you may want to prevent your website from updating. In order to do so, you must change the client and server tag in `docker-compose.yml` to a specific version (by default the tag used is `latest` **even if it's undefined**). For example:
293+
In some unusual cases you may want to prevent your website from updating. In order to do so, you must change the image tag in `docker-compose.yml` to a specific version (by default the tag used is `latest` **even if it's undefined**). For example:
322294

323295
```docker
324296
services:
325-
backend:
297+
tf2pickup:
326298
depends_on:
327299
- mongodb
328-
image: ghcr.io/tf2pickup-org/server:stable
300+
image: ghcr.io/tf2pickup-org/tf2pickup:latest
329301
restart: always
330302
ports:
331303
- '3000:3000'
332304
- '9871:9871/udp'
333-
volumes:
334-
- './.env:/tf2pickup.pl/.env'
335-
336-
frontend:
337-
image: ghcr.io/tf2pickup-org/tf2pickup.eu:stable
338-
restart: always
339-
ports:
340-
- '4000:80'
305+
env_file:
306+
- ./.env
341307
```
342308

343309
Can be switched to:
344310

345311
```docker
346312
services:
347-
backend:
313+
tf2pickup:
348314
depends_on:
349315
- mongodb
350-
image: ghcr.io/tf2pickup-org/server:7.0.6
316+
image: ghcr.io/tf2pickup-org/tf2pickup:4.0.0
351317
restart: always
352318
ports:
353319
- '3000:3000'
354320
- '9871:9871/udp'
355-
volumes:
356-
- './.env:/tf2pickup.pl/.env'
357-
358-
frontend:
359-
image: ghcr.io/tf2pickup-org/tf2pickup.eu:3.19.4
360-
restart: always
361-
ports:
362-
- '4000:80'
321+
env_file:
322+
- ./.env
363323
```
364324

365325
After that, you must restart all containers. You can do this by executing the following commands while being in a `tf2pickup-eu` folder containing both the `.env` and `docker-compose.yml` file:
@@ -465,9 +425,7 @@ docker exec tf2pickup-eu_mongodb_1 '/bin/bash' -c \
465425

466426
In general you should let connection pass through for:
467427

468-
- client:
469-
- from/to the container to the host, so reverse proxy can let access it,
470-
- server:
428+
- tf2pickup application:
471429
- from/to the container to the host, so reverse proxy can let access it,
472430
- from/to the container to the outside, in this case it's port UDP 9871 and it's used for retrieving logs from the game servers,
473431
- mumble:

0 commit comments

Comments
 (0)