Push balls to opponent's side online. That's it. That's the game. google-balls-the-thrusting-production.up.railway.app
googleballs
TypeScript 87.2%
HTML 12.0%
CSS 0.8%
1 1 0

Clone this repository

https://tangled.org/moshyfawn.dev/google-balls-the-thrusting https://tangled.org/did:plc:sshwio5obbx4zjfrn3fhsen6/google-balls-the-thrusting
git@tangled.org:moshyfawn.dev/google-balls-the-thrusting git@tangled.org:did:plc:sshwio5obbx4zjfrn3fhsen6/google-balls-the-thrusting

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Google Balls: The Thrusting#

Push balls to opponent's side online. That's it. That's the game.

Run#

bun i
bun run dev

Theme System#

Colors are defined once in theme.ts and shared across:

  1. Server - Direct import for puck colors
  2. Client - CSS custom properties via getComputedStyle
  3. CSS - Tailwind utilities via virtual import

How It Works#

styles.css: @import "virtual:theme.css"
     |
     v
theme-plugin.ts intercepts via globalThis.__tw_resolve / __tw_readFile
     |
     v
Generates @theme { --color-*: ... } block from theme.ts
     |
     v
Tailwind processes @theme directive -> CSS variables + utility classes

This produces Tailwind utilities like text-google-blue and CSS variables like --color-team-left.

Game Mechanics#

  • Teams auto-balanced on join
  • Field scales with player count (1000x600 to 1600x900)
  • Puck count scales with players (4 base + 1 per 2 players)
  • 60 second rounds
  • Inactive players kicked at round end
  • Max 3 connections per IP
  • Max 50 players, overflow queued