Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# gameplane-website — AI assistant guide

Public marketing + docs site for Gameplane; the `website/` submodule of `ValgulNecron/Gameplane`. Static Astro, strict TypeScript, Tailwind CSS 4, no client framework. Default branch: `main`.
Public marketing + docs site for Gameplane; the `website/` submodule of `GameplanePanel/Gameplane`. Static Astro, strict TypeScript, Tailwind CSS 4, no client framework. Default branch: `main`.

## House rules

Expand All @@ -13,7 +13,7 @@ Public marketing + docs site for Gameplane; the `website/` submodule of `ValgulN
## Architecture

- **Semantic tokens only:** Tailwind utilities backed by CSS custom properties in `src/styles/global.css` (`bg-background`, `text-foreground`, `text-primary`, …), never raw hex — this keeps the `.theme-light` band on the landing page working.
- **Internal links via `withBase()`** (`src/lib/url.ts`): the site deploys under `/gameplane-website` on GitHub Pages, so bare root-relative hrefs 404. Markdown cross-doc links are relative (`./architecture/`).
- **Internal links via `withBase()`** (`src/lib/url.ts`): the site deploys under `/website` on GitHub Pages, so bare root-relative hrefs 404. Markdown cross-doc links are relative (`./architecture/`).
- **Docs:** content collection `src/content/docs/*.mdx` (schema `src/content.config.ts`); sidebar order and prev/next derive from `src/lib/docs-nav.ts`, so adding a page is frontmatter-only.
- OG/canonical meta use absolute URLs from `Astro.site`. Deployment config (origin, base path, GitHub URL, displayed version) lives in `src/config.ts`.

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# gameplane-website

Public marketing + documentation website for [Gameplane](https://github.com/ValgulNecron/Gameplane) — a Kubernetes-native game server control panel.
Public marketing + documentation website for [Gameplane](https://github.com/GameplanePanel/Gameplane) — a Kubernetes-native game server control panel.

Live site: **https://gameplane.net/**

Built with [Astro](https://astro.build), Tailwind CSS 4, and self-hosted JetBrains Mono / Geist fonts. Fully static — no client framework.

This repo is mounted as the `website/` git submodule of the main [Gameplane](https://github.com/ValgulNecron/Gameplane) repo. The visual source of truth is the **Group/Public Website** screens in the main repo's `design.pen` (Pencil); design changes happen there first, then get translated to code here.
This repo is mounted as the `website/` git submodule of the main [Gameplane](https://github.com/GameplanePanel/Gameplane) repo. The visual source of truth is the **Group/Public Website** screens in the main repo's `design.pen` (Pencil); design changes happen there first, then get translated to code here.

## Commands

Expand All @@ -23,7 +23,7 @@ This repo is mounted as the `website/` git submodule of the main [Gameplane](htt

Pushes to `main` deploy to GitHub Pages via `.github/workflows/deploy.yaml`. Pull requests are gated by `.github/workflows/ci.yaml` (lint, type-check, build).

The site is served from the root of the custom domain `gameplane.net` (`CUSTOM_DOMAIN` in `src/config.ts`, `public/CNAME`). All internal links go through `withBase()` from `src/lib/url.ts` — never hardcode root-relative hrefs, so unsetting `CUSTOM_DOMAIN` (base path `/gameplane-website`) keeps working.
The site is served from the root of the custom domain `gameplane.net` (`CUSTOM_DOMAIN` in `src/config.ts`, `public/CNAME`). All internal links go through `withBase()` from `src/lib/url.ts` — never hardcode root-relative hrefs, so unsetting `CUSTOM_DOMAIN` (base path `/website`) keeps working.

### Switching to a custom domain

Expand Down
2 changes: 1 addition & 1 deletion src/components/docs/DocsEditPageCard.astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ interface Props {
githubUrl?: string;
}

const { slug, githubUrl = "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/ValgulNecron/gameplane-website" } = Astro.props;
const { slug, githubUrl = "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/GameplanePanel/website" } = Astro.props;
const editUrl = `${githubUrl}/edit/main/src/content/docs/${slug}.mdx`;
---

Expand Down
8 changes: 4 additions & 4 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
//
// The site deploys to GitHub Pages under the custom domain gameplane.net
// (public/CNAME, Pages settings), so it is served from the root. Unset
// CUSTOM_DOMAIN to go back to the project-page path /gameplane-website.
// CUSTOM_DOMAIN to go back to the project-page path /website.
const CUSTOM_DOMAIN: string | undefined = "https://gameplane.net";

export const SITE = CUSTOM_DOMAIN ?? "https://valgulnecron.github.io";
export const BASE = CUSTOM_DOMAIN ? "/" : "/gameplane-website";
export const SITE = CUSTOM_DOMAIN ?? "https://gameplanepanel.github.io";
export const BASE = CUSTOM_DOMAIN ? "/" : "/website";

export const GITHUB_URL = "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/ValgulNecron/Gameplane";
export const GITHUB_URL = "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/GameplanePanel/Gameplane";
export const VERSION = "v0.2.0-beta.8";
1 change: 1 addition & 0 deletions src/content/docs/air-gapped-installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
An offline install is accepted only when rendered manifests contain no public endpoint or mutable tag. Render once and validate before disconnecting from the public internet.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.

## Build the release bundle

Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ The `Cluster` health phase reports Kubernetes connectivity and does not probe th

Beyond the core operator, API, and agent, Gameplane ships optional services for specialized tasks. Optional components (mcp-server, telemetry-receiver, audit-syslog-bridge) are covered in [Extension services](../extension-services/). For a full catalog of all CRDs and their fields, see the [CRD catalog](../crd-catalog/).

The full component reference — data-flow walkthroughs, CRD relationships, and security boundaries — lives in the [architecture doc on GitHub](https://github.com/ValgulNecron/Gameplane/blob/master/docs/architecture.md).
The full component reference — data-flow walkthroughs, CRD relationships, and security boundaries — lives in the [architecture doc on GitHub](https://github.com/GameplanePanel/Gameplane/blob/master/docs/architecture.md).
2 changes: 1 addition & 1 deletion src/content/docs/ci-releases-signing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ A `v` tag builds and signs images, packages the OCI chart, creates release notes
items={[
"01 go build ./... && npx tsc --noEmit # Lightweight local compile checks",
"02 git tag vX.Y.Z && git push origin vX.Y.Z",
"03 cosign verify --key cosign.pub ghcr.io/valgulnecron/gameplane/<image>@<digest>",
"03 cosign verify --key cosign.pub ghcr.io/gameplanepanel/gameplane/<image>@<digest>",
]}
/>

Expand Down
2 changes: 2 additions & 0 deletions src/content/docs/cluster-nodes-kubeconfig.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
Treat kubeconfig files and bootstrap tokens as secrets: keep them out of tickets, chat, logs, and shell history. Downloaded kubeconfigs expire after 1 hour and are bound to a read-only role, but the underlying cluster API access must still be guarded.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.

## Read cluster and node health

Confirm distribution, version, ready count, roles, pressure, uptime, pod capacity, CPU, and memory before changing infrastructure.
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/comparison.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ Pterodactyl and CubeCoders AMP are control panels; Agones is a Kubernetes operat
| Licensing | GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). | MIT License (Panel and Wings). | Proprietary; per-instance tiers (Standard/Professional/Advanced/Enterprise). | Apache License 2.0. |
| Target operator scope (self-hosted vs. managed SaaS) | Self-hosted only; runs on Kubernetes (k3s, kubeadm, managed services); no managed SaaS offering. | Self-hosted only; requires Linux system capable of running Docker containers. | Self-installed on user hardware (Windows or Linux); no managed SaaS version. | Self-hosted operator software; runs anywhere Kubernetes can run. |

Sources for every cell: [docs/comparison-sources.md](https://github.com/ValgulNecron/Gameplane/blob/master/docs/comparison-sources.md) — Checked 2026-10-02.
Sources for every cell: [docs/comparison-sources.md](https://github.com/GameplanePanel/Gameplane/blob/master/docs/comparison-sources.md) — Checked 2026-10-02.
2 changes: 1 addition & 1 deletion src/content/docs/console-protocols.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ A `GameTemplate`'s `spec.rcon.protocol` selects the wire protocol the agent side

Games with no usable remote console set `rcon.protocol: none`. If they still need interactive commands, the template also sets `consoleMode: pty` — the dashboard then attaches to the pod's stdin/stdout over the Kubernetes pod-attach API instead of opening a network socket, so a `pty` game gets a real console without a console *protocol*.

Template authors: the full `rcon` spec — per-protocol YAML, the `passwordEnv` vs `passwordFile` precedence, and how `capabilities` (player actions, status metrics, custom buttons) build on top of it — is documented in [Module Authoring](../module-authoring/) and the [module authoring guide on GitHub](https://github.com/ValgulNecron/Gameplane/blob/master/docs/module-authoring.md#rcon).
Template authors: the full `rcon` spec — per-protocol YAML, the `passwordEnv` vs `passwordFile` precedence, and how `capabilities` (player actions, status metrics, custom buttons) build on top of it — is documented in [Module Authoring](../module-authoring/) and the [module authoring guide on GitHub](https://github.com/GameplanePanel/Gameplane/blob/master/docs/module-authoring.md#rcon).
6 changes: 3 additions & 3 deletions src/content/docs/contributing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ UI changes start in design.pen — the designed screens are the source of truth

## Game modules and submodules

Game-module changes belong in the separate `gameplane-module` repository, vendored here as the `modules/` submodule. Open the module PR there; once it merges, bump the submodule pointer in a follow-up PR.
Game-module changes belong in the separate `GameplanePanel/module` repository, vendored here as the `modules/` submodule. Open the module PR there; once it merges, bump the submodule pointer in a follow-up PR.

`.gitmodules` points both submodules (`modules/`, `website/`) at the upstream GitHub URLs, so a fork clones them without forking them too. To work on your own fork of a submodule, repoint it locally and don't commit the change:

```sh
git submodule set-url modules https://github.com/<you>/gameplane-module.git
git submodule set-url modules https://github.com/<you>/module.git
```

The full contribution guide, including per-component test commands and the release process, is in [contributing.md on GitHub](https://github.com/ValgulNecron/Gameplane/blob/master/docs/contributing.md). Release signing is covered in [CI, releases, and signing](../ci-releases-signing/).
The full contribution guide, including per-component test commands and the release process, is in [contributing.md on GitHub](https://github.com/GameplanePanel/Gameplane/blob/master/docs/contributing.md). Release signing is covered in [CI, releases, and signing](../ci-releases-signing/).
4 changes: 2 additions & 2 deletions src/content/docs/crd-catalog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,6 @@ Every Gameplane custom resource lives in the `gameplane.local/v1alpha1` API grou

Each CRD's full schema—all `spec` fields, `status` conditions, and behavioral annotations—is documented in the source repository:

- **Type definitions:** [`operator/api/v1alpha1` on GitHub](https://github.com/ValgulNecron/Gameplane/tree/master/operator/api/v1alpha1) — every `.go` file's doc comments are the source that `make manifests` generates CRD YAML from.
- **Generated YAML:** [`operator/config/crd/` on GitHub](https://github.com/ValgulNecron/Gameplane/tree/master/operator/config/crd/) or your installed cluster via `kubectl get crds` and `kubectl describe crd <name>.gameplane.local`.
- **Type definitions:** [`operator/api/v1alpha1` on GitHub](https://github.com/GameplanePanel/Gameplane/tree/master/operator/api/v1alpha1) — every `.go` file's doc comments are the source that `make manifests` generates CRD YAML from.
- **Generated YAML:** [`operator/config/crd/` on GitHub](https://github.com/GameplanePanel/Gameplane/tree/master/operator/config/crd/) or your installed cluster via `kubectl get crds` and `kubectl describe crd <name>.gameplane.local`.
- **Related guides:** See [GameServer & Template Schema](../gameserver-template-schema/) for workload structure, [Module & Cluster CRDs](../module-cluster-crds/) for registry and multi-cluster configuration, and [Backup & Restore CRDs](../backup-restore-crds/) for data lifecycle details.
2 changes: 2 additions & 0 deletions src/content/docs/executable-upgrades-rollback.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
Use only the release-specific rollback window.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.

## Preflight compatibility

Define the supported source/target path and capture the complete current environment before changing it.
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/get-involved.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import Icon from "../../components/Icon.astro";
</a>
<a
class="inline-flex h-10 items-center gap-1.5 rounded-pill border border-border px-4 font-primary text-sm font-medium text-foreground no-underline hover:border-muted-foreground"
href="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/ValgulNecron/Gameplane"
href="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/GameplanePanel/Gameplane"
>
<Icon name="github" class="h-4 w-4" />
Open GitHub
Expand Down
2 changes: 2 additions & 0 deletions src/content/docs/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ Kubernetes 1.28+, Helm 3.13+, and a default StorageClass. An ingress controller

Pull the chart straight from GHCR and install with one helm upgrade --install command — no manual repo add needed.

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.

<CodeLabel>ONE-SHOT INSTALL</CodeLabel>

```sh
Expand Down
4 changes: 3 additions & 1 deletion src/content/docs/helm-values-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import DocsCallout from "../../components/docs/DocsCallout.astro";
Use `helm template` or `helm diff` to preview your values before applying them to production. Secret values should always be referenced from Kubernetes Secrets, never committed to version control.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.

## Core and image settings

Configure container images, registry access, and fundamental cluster behavior.
Expand Down Expand Up @@ -215,4 +217,4 @@ networkPolicies:
- 0.0.0.0/0
```

See the full [Helm chart values.yaml](https://github.com/ValgulNecron/Gameplane/blob/master/charts/gameplane/values.yaml) for all options and detailed comments.
See the full [Helm chart values.yaml](https://github.com/GameplanePanel/Gameplane/blob/master/charts/gameplane/values.yaml) for all options and detailed comments.
4 changes: 3 additions & 1 deletion src/content/docs/installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";

Gameplane runs on Kubernetes and deploys via Helm. This guide walks through preparing a cluster, configuring the Helm chart, installing Gameplane, and verifying a working control plane.

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.

## Prerequisites and topology

Start with a supported Kubernetes and Helm version, ready nodes, DNS, and a default or explicitly selected StorageClass.
Expand Down Expand Up @@ -266,7 +268,7 @@ Create a simple test GameServer to verify the operator is reconciling correctly:

## Verifying image signatures

Every published image (tagged releases and `:edge`), the Helm chart, and official module bundles are signed with the project's cosign key, [`cosign.pub`](https://github.com/ValgulNecron/Gameplane/blob/master/cosign.pub), and recorded in the public Sigstore Rekor transparency log:
Every published image (tagged releases and `:edge`), the Helm chart, and official module bundles are signed with the project's cosign key, [`cosign.pub`](https://github.com/GameplanePanel/Gameplane/blob/master/cosign.pub), and recorded in the public Sigstore Rekor transparency log:

```bash
cosign verify --key cosign.pub \
Expand Down
8 changes: 4 additions & 4 deletions src/content/docs/module-authoring.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ A module lives on disk as a directory holding four files:
| `README.md` | no | Operator documentation, rendered in the catalog |
| `icon.png` | no | 256×256 PNG for the dashboard catalog tile |

The official modules live in the standalone `gameplane-module` repository, checked out as the `modules/` submodule of the main Gameplane repo.
The official modules live in the standalone `GameplanePanel/module` repository, checked out as the `modules/` submodule of the main Gameplane repo.

## Module metadata (`module.yaml`)

Expand Down Expand Up @@ -116,7 +116,7 @@ Then push a bundle from a module directory:
```sh
oras push \
--artifact-type application/vnd.gameplane.module.v1+json \
ghcr.io/valgulnecron/gameplane-modules/minecraft-java:1.0.0 \
ghcr.io/gameplanepanel/gameplane-modules/minecraft-java:1.0.0 \
module.yaml:application/vnd.gameplane.module.metadata.v1+yaml \
template.yaml:application/vnd.gameplane.module.template.v1+yaml \
README.md:application/vnd.gameplane.module.readme.v1+md \
Expand All @@ -126,7 +126,7 @@ oras push \
Or use the Makefile target:

```sh
make modules-push REGISTRY=ghcr.io/valgulnecron/gameplane-modules
make modules-push REGISTRY=ghcr.io/gameplanepanel/gameplane-modules
```

For private registries, log in once with `oras login <registry>`. The cluster uses a `kubernetes.io/dockerconfigjson` secret (`ModuleSource.spec.oci.pullSecretRef`) — the same credential format kubelet uses for private images.
Expand All @@ -146,7 +146,7 @@ metadata: { name: community }
spec:
type: oci # oci | git | http | local | upload
oci:
url: ghcr.io/valgulnecron/gameplane-modules
url: ghcr.io/gameplanepanel/gameplane-modules
modules: [{ name: minecraft-java }] # explicit list
verify: # optional, supply-chain security
key: { name: cosign-pub } # signed with cosign ECDSA key
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/module-cluster-crds.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ ModuleSource indexes a module catalog (OCI registry, git repo, HTTP archive, or
|---|---|---|---|
| `spec.type` | enum | no | oci / git / http / local / upload — selects which of spec.oci/git/http/local is active; defaults to `oci` |
| `spec.oci` | object | conditional | OCI registry config (required if `type=oci`) |
| `spec.oci.url` | string | yes | Registry/repository prefix (e.g., `ghcr.io/valgulnecron/gameplane-modules`) |
| `spec.oci.url` | string | yes | Registry/repository prefix (e.g., `ghcr.io/gameplanepanel/gameplane-modules`) |
| `spec.oci.modules` | array | yes | Explicit list of `{name: string}` entries; registries cannot be enumerated, so the catalog is declarative |
| `spec.oci.pullSecretRef` | LocalObjectReference | no | Secret in operator namespace holding `kubernetes.io/dockerconfigjson` credentials for private registries |
| `spec.oci.insecure` | bool | no | Allow plain HTTP (no TLS) — for local kind/k3d registries only; never use on production |
Expand Down
Loading
Loading