Server Log
Live tail of every request the server handles. Use the filter to isolate one endpoint (e.g. /api/, a player id, or 404).
Loading log…
Live tail of every request the server handles. Use the filter to isolate one endpoint (e.g. /api/, a player id, or 404).
Loading log…
Loading...
Loading...
Loading...
Loading...
Drop one player into another's room. The joiner is moved into the target's current instance (the target must be in a room).
| Id | Profile Image | Username | Platform Id | Device Id | Level | Player Created At | Last Online | Room | Discord | Actions |
|---|
Restart the game server process. Players are briefly disconnected; it comes back in a few seconds.
Loading...
| RoomId | ImageName | RoomName | Actions |
|---|
Loading...
| Id | ImageName | ImageUrl | Actions |
|---|
Loading...
| Id | Title | BlobName | Description | ThumbnailBlobName | SourceUrl | Actions |
|---|
Loading...
Welcome to Campus
Leave a field blank to leave it unchanged.
One account can hold several Steam IDs, and the same Steam ID can be put on several accounts. Sharing is allowed — you'll just be told who else has it.
Locked players cannot change their @ name or display name in-game, on the website or during onboarding. Edits made here still apply, so set the name you want first, then lock it. Takes effect immediately.
Image names refer to files the server can serve from Data/Images
(or an already-uploaded image). The preview shows what the client will fetch.
Sets this player's login password immediately. They are not notified — tell them the new password yourself.
Load a player above first. The password is sent over the connection and stored only as a hash — it is never logged in plain text.
Events players have scheduled. Event names and descriptions are now run through the same word filter as room names, but anything created before that can be removed here.
Every .room file on the server. An orphan is a real saved build that
no room points at — attach it to a room and that room stops loading blank.
Getting it wrong costs nothing: attach a different blob and try again.
| Blob | Size | Used by | Attach to room id |
|---|---|---|---|
| Press Load blobs. | |||
Put a room JSON file in Data/Imports on the server, then enter its
filename here. See Data/Imports/README.md for the required shape.
Blobs are a separate step — the result lists any .room files still needed.
| Id | Name | Creator | Room | Starts | Going | |
|---|---|---|---|---|---|---|
| Press Refresh to load. | ||||||
Every photo taken in the game, newest first, attributed to the player who took it.
Notes players pin in a room's scene, newest first, attributed to the author.
Reports raised from the in-game report menu and the website's Report buttons, newest first. Acting on a player also closes their other open reports, so a pile-on does not leave duplicates of what you just handled.
What players send from the watch's Report a bug. Every field the client posted is kept (expand raw); attached screenshots / logs are linked.
Who holds which flag. Moderator is the vmod role the client checks for the badge and moderation powers; Developer also grants access to this admin panel, so hand it out carefully. Changes take effect when that player next signs in — roles are baked into their token when it is issued.
What the game and the website show as featured: the rooms (Play tab "Featured This Week", the banner, the community board's featured room) and the players (the community board's Featured Creator tile and the Play tab's Featured Creator). Changes are live on the next fetch - no restart.
The rooms shown as Featured in-game and on the website home page. Enter room IDs in the order you want them shown (comma, space or newline separated). Copy IDs from the table below.
Player ids or @usernames, in order - the first one is the Featured Creator. Leave empty to fall back to the player with the most public rooms.
Search every storefront and the whole avatar catalog (avatar_items.json) as you type, and give an item to a player as an unopened gift box they open in-game, or drop it straight into their wardrobe. Use player id -1 for all players (owners are skipped). Items tagged catalog are not sold anywhere, so they have no gift-drop art — prefer straight into their wardrobe for those.
A maker gets 30% of what a buyer spends on their invention / custom clothing / room key / room currency / room consumable. Each sale pends 14 days and is paid on the first Sunday after that (00:00 UTC). Coach and the Importer never earn.
While ON, launching the game from an admin-allowlisted IP shows an empty account picker, so the client creates a brand-new account in-game (Orientation: choose name, password). Turn it OFF to log into your own account again. Allowlisted IPs also skip the signup / login / device limits.
state: …A positive amount of currency is delivered as a gift box and credited when the player opens it. XP is added directly (a level crossed sends its level-up box). Negative takes currency away immediately. Level: the amount is the level to set the player to.
Sends the player the end-of-game reward picker (3 token cards, 10–1000) in the chosen box, exactly as finishing that activity would.
Automatic snapshots of every database run 3× a day and are kept for 3 days. Restore a snapshot if something goes wrong.
| Backup | Created (UTC) | Files | Size | Actions |
|---|---|---|---|---|
| Loading… | ||||
Loading…
An empty list means the check is off and every Steam
user can connect. Quest / Meta players are never affected. Stored in
Data/steam_allowlist.txt.
Expire every in-game sign-in at once. Use this if a token or password leaked: all players are signed out of the game and must log in again. Website and admin logins are not affected.
| Invention Id | Image | Name | Created At | Modified At | Permissions | Actions |
|---|
| Club Id | Image | Name | Created At | Members | None | Actions |
|---|
Drop a room-export .zip (RoomDetails.json + subrooms + blobs + image) and it's unpacked, imported as a room owned by @Importer (ids reassigned, kept published), with its blobs placed on the CDN so the build loads. You can also drop loose .room blobs — each is hosted and wrapped in a new joinable @Importer room named after the file (or a zip full of .room files to do a whole batch at once); saves too new for this client are hosted but skipped so they don't freeze the game. Loose .json exports work too. Multiple at once is fine.
| Room Id | Image | Room Name | Description | Creator Player Id | Max Players | Actions |
|---|
Social sign-ins (website Services tab)
Each service needs its own developer app. Paste the app's client id and secret here - saved to
Data/social_apps.jsonon the server, never shown again. Register this redirect URI on every app:https://gameauth.ddns.net/api/site/social/<provider>/callback. Steam needs no app (optional Web API key for persona names).