Old SchoolOps

Your Own Website

Every Gate to Heavens Classic release ships a website that serves your players, patches their client and holds your admin area, and everything in it that names anybody is a setting you control.

For Gate to Heavens Classic Updated 2026-08-22

What Your Players Get

Every Gate to Heavens Classic release ships a webserver next to the login and game servers, and start-server.bat starts all three together. With nothing configured it already serves:

  • Accounts. Register, sign in, change the display name, change the password. The same accounts the launcher and the game use, because all of it reads one accounts database.
  • Characters. A signed-in account sees its own. New ones are made in the launcher or the game client rather than here.
  • Live server status. Whether the game is up and how many people are on it, read from the game server itself rather than guessed from the database.
  • News, written as markdown files you drop in a folder.
  • A changelog, if you decide you want one.
  • A leaderboard, filtered by class, with a page for every character on it.
  • The client files your players patch from. Their launcher compares its own copies against the index this site serves and fetches what differs, so pushing a client change means putting files in client/ rather than telling anybody to download anything.

Treat it as part of the server rather than as an extra. The launcher signs in against this site, reads the server list from it, lists and creates characters through it, and gets the token that hands a player into the game from it. Registration happens here too, and there is nowhere else to make an account. Self-hosting covers running the three together.

Whose Site It Looks Like

It is the same binary we run at classic.playgth.com, and it arrives blank. There is no link back to us in the header, no download host of ours on the download page, and no footer credit at all: the credit line is empty in the build and stays empty until somebody fills it in. Our own site shows Powered by Old School Ops down there because our own database sets it, not because the binary carries it.

The build does carry one outbound link, our chat invite in the footer, and it is a default rather than a fixture. Replace it with your own or remove it entirely, from the admin area, in about ten seconds.

One piece of content to look at before you open the site to anyone: the archive ships our own news post in server/articles/. It is a file like any other. Delete it, or write over it.

The Admin Area

The admin area is at /admin/ on your own site. It opens for a signed-in account holding an Administrator grant on this game, and answers everybody else as though the page is not there. Nothing in the browser decides that: every page re-checks the level against the accounts database on the request itself, so taking a grant away takes effect at once rather than at that person’s next sign-in.

What is inside:

  • an overview of the server, with the account and character totals and whether each database is reachable
  • the staff list: who holds a grant, at what level, when it was made and the note attached to it
  • account search, and the level changes themselves
  • the site settings below

Reading the overview, the staff list and the settings is Administrator. Searching accounts, changing somebody’s level and saving a setting need Super Administrator. Two refusals are built in and have no override: you cannot change your own level, and you cannot take the last Super Administrator down. Either one would leave a server nobody can administer.

A fresh install has no staff at all, and there is no bootstrap password to go looking for, so the first grant is made with the gmadmin tool in the archive’s tools folder. It writes the grant directly and does not need the website running. GM accounts covers the five levels, that tool, and how to promote everybody else once you are in.

Settings You Change Instead of Rebuilding

These live on the settings page in the admin area. A saved value is live on the next page load, and clearing one puts the built-in default back rather than leaving the setting blank.

  • Footer credit. A label, and optionally a link. The label is what makes it appear, so a link on its own does nothing. Put your own project name there and the footer credits you.
  • Community chat link. The invite in the footer. Set your own, or remove it and have none.
  • Changelog link. Where the build line under the server status points. It goes to this site’s own changelog page by default, and you can send it anywhere.
  • Download links. What your players are offered: the launcher package, and the full game client if you host a copy. More than one address is allowed. The first is the button and the rest become labelled mirrors.

Anything that does not parse is dropped and the default is served in its place, so a typo in one of these costs you the setting rather than the page.

News and the Changelog

Both are plain markdown, read from disk while the server is running. Add a file to a folder the server already found at startup, refresh the page, and it is there. No rebuild, no publish step, no database.

News posts go in server/articles/, one file per post, with images beside them in server/articles/assets/. Each file opens with a small block:

---
title: The server is up
date: 2026-08-22
author: You
category: News
slug: the-server-is-up
summary: One sentence, shown in the list.
---

Body text goes here.

category is News or Events. slug is the address the post gets. Three optional fields are worth knowing: draft: true keeps a post off the site while you write it, pinned: true holds it at the top of the list, and banner names an image in assets/.

The archive ships no changelog/ folder, because our release notes are ours and belong on our site rather than in your download. If you want one of your own, create server/changelog/ and put one file per version in it:

---
version: 1.0.0
date: 2026-08-22
title: Opening day
summary: One sentence, shown beside the version.
---

The server decides whether it has a changelog when it starts, so restart it once after creating the folder. From then on the files inside are read live, like the news posts.

Putting It on the Internet

The start scripts run the website in plain HTTP on port 80, which is the right mode for a local test and for a machine where something else already terminates TLS. Give it a real domain name in settings.cfg instead and it obtains and renews its own certificate with no tool to install. Port 80 usually needs administrator or root, and it will clash with anything already listening there.

Running the website has the rest: the flag, the hostname settings, what happens when the certificate cannot be issued, and running behind a reverse proxy.