The RMH Studios community feed.
Translation pending
SocialTypeScript · ReScriptGitHub @stickmsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A single social + gaming + apps platform
rmhstudios.com is one large, high-performance web platform: a social feed
(RMHarks), ~20 browser games (several multiplayer/3D), a suite of full apps, a
blog/news/library system, a coin economy with Stripe memberships, and a scoped
developer API — served by a React SSR tier with Node realtime hubs and a Go
worker fleet behind it. It features a dynamic, animated UI (7 themes + accent
presets, 32 locales) alongside real-time multiplayer.Read the full README ↗A single social + gaming + apps platform
rmhstudios.com is one large, high-performance web platform: a social feed (RMHarks), ~20 browser games (several multiplayer/3D), a suite of full apps, a blog/news/library system, a coin economy with Stripe memberships, and a scoped developer API — served by a React SSR tier with Node realtime hubs and a Go worker fleet behind it. It features a dynamic, animated UI (7 themes + accent presets, 32 locales) alongside real-time multiplayer.
/secret/ games), plus Temple of Joy, Neon Driftway, House Always Wins, Laundry Sort, Cookgame, Versecraft, and more/api/v1), documented at docs.rmhstudios.com with an OpenAPI 3.1 spec at /api/v1/openapi.json.liquid-glass is the default theme).howler/tone for audio and @react-three/fiber / @react-three/rapier for 3D physics.go-services/) — built with Bazel (+ gazelle)Production is a hybrid runtime (Docker Compose on a VPS behind
Apache/Cloudflare). Node runs the web SSR tier, every user-facing realtime
hub, and three background workers; Go runs the background-worker supervisor,
the status dashboard, and the asset streamer. All container ports bind to
127.0.0.1; Apache is the only front door. See
docs/architecture.md for the full picture.
Node services (server/)
| Service | Port | Role |
|---|---|---|
web (Nitro SSR) | 7005 (blue/green spare 7015) | React SSR app + API routes |
socket | 7001 | Games realtime hub (Socket.IO); also hosts RMHMusic |
rmhbox | 7676 | Party-game lobby hub (Socket.IO) |
rmhtube | 7003 | Watch-together hub (Socket.IO) |
ladder-worker | — | RMHLadder job-discovery cron (node-cron) |
homes-worker | — | RMHHomes listings-scraper cron (node-cron) |
jobs | — | Durable async backbone (pg-boss): progression, event reminders, weekly digest |
Go services (go-services/)
| Service | Port | Role |
|---|---|---|
supervisor | 9090 (metrics) | Runs six background workers as goroutines: discord-bot, recap, doctrine-worker, vibe-worker, bot-worker, streak-saver |
status | 7008 | Standalone health dashboard (/, /api/status); survives outages |
assets | 7007 | Range-aware S3/R2 streaming for /library /music /models /sprites |
The earlier full-Go realtime topology (a
gatewayfronting Gogamehub/rmhbox/rmhtube/rmhmusichubs with a Redis backplane, plus its Helm/k3s charts) was removed in the rewrite — it never served production traffic and duplicated the Node hubs. Recover it from git history (tagpre-rewrite-go-realtime) if it is ever revived.
Build & test the Go fleet (from the repo root):
make gazelle # regenerate Bazel BUILD files after adding Go files
make test # bazel test //go-services/... (+ vitest)
make build # bazel build //go-services/cmd/...
In production the Go binaries are compiled by the root Dockerfile's
go-builder stage (plain go build ./cmd/...) into the rmhstudios-app-full
image — Bazel is the CI unit-test gate, not the production build. docker-compose.yml
runs everything from two images built off that one Dockerfile (rmhstudios-app
slim for the Node services, rmhstudios-app-full for the Go services +
Chromium/git). MinIO provides the S3-compatible bucket the assets service
streams from locally.
├── app/ # TanStack Start routes (file-based routing)
│ ├── routes/ # All page and API routes
│ │ ├── _site/ # Public site routes (home, news, blog, profiles, etc.)
│ │ ├── api/ # Server API routes
│ │ ├── rmhbox/ # RMHBox minigame routes
│ │ ├── altair/ # Altair game routes
│ │ └── ... # Other game/app routes
│ └── globals.css # Global styles and theme definitions
├── components/ # React components organized by feature (~860 files)
├── lib/ # Utility functions, schemas, and shared logic (~950 files; *.server.ts = server-only)
├── server/ # Node service tier (Nitro plugins, WebSocket hubs, cron/async workers)
├── go-services/ # Go worker fleet: supervisor + status + assets (Bazel + gazelle)
├── stores/ # Zustand state management
├── hooks/ # Custom React hooks
├── prisma/ # Database schema (234 models) and migrations
├── data/ # Static JSON (RMHBox content packs, library metadata)
├── scripts/ # Utility scripts (seeding, i18n pipeline, OG/icon gen, ladder/news pipelines)
├── public/ # Static assets (images, sprites, music)
├── deploy/ # Apache vhosts, blue/green hotswap, Postgres/backups, Terraform DNS, runbooks
├── testing/ # Vitest test files
├── docker-compose.yml # Container topology (Node + Go services + Redis + MinIO)
└── deploy.sh # Deployment script (blue/green web hotswap)
pnpm (required).Create a .env file in the root of the project. See .env.example for all available variables. Minimum required:
# Database Configuration
DATABASE_URL=postgresql://postgres:password@localhost:5432/rmhstudios
# Better Auth Configuration
BETTER_AUTH_SECRET=generate_a_secure_random_string
BETTER_AUTH_URL=http://localhost:7005/
# Socket Server
VITE_SOCKET_URL=http://localhost:7001
SOCKET_CORS_ORIGIN=http://localhost:7005
Clone the repository and install dependencies:
git clone https://github.com/stickms/rmhstudios.com.git
cd rmhstudios.com
pnpm install
Setup the database:
pnpm run db:push
Run the development server (runs Vite plus the socket/rmhbox/rmhtube hubs and the ladder/homes/jobs workers concurrently):
pnpm dev
Open http://localhost:7005 in your browser.
The application is deployed to a VPS with Docker Compose behind
Apache/Cloudflare. The web container deploys blue/green with a health-gated
port flip (deploy/hotswap-web.sh). Full pipeline details:
docs/architecture.md.
To create a production build:
pnpm build
This compiles the Vite/Nitro app, builds the globe's WebAssembly assets through the Vite plugin, and bundles the WebSocket servers via esbuild. The pinned npm compiler also works on the ARM64 deployment runner; no native SDK is needed.
Deployment:
Pushing to main triggers .github/workflows/deploy.yml, which builds
the two images on a native ARM64 runner, pushes them to GHCR, then POSTs
an HMAC-signed request to the VPS webhook receiver (webhook-server.cjs).
That runs ./deploy.sh production <sha>, which pulls those images →
prisma migrate → compose up → blue/green web hotswap. deploy.sh can
also be run manually on the VPS. See
deploy/README.md for setup.
WebAssembly activation requires the updated Apache CSP to be installed and
reloaded once on the host. deploy.sh warns if the permission is missing;
the globe uses JavaScript until it is applied. Follow the
WebAssembly deployment instructions.
CLAUDE.md (or AGENTS.md) — repo-wide conventions, plus per-directory guides in app/, components/, lib/, server/, and go-services/.docs/README.md — reference docs, runbooks, design docs, and known-stale docs.design.md — what the design is and why (start here) · docs/design-language.md — the build contract: tokens, primitives, definition of done · Page consistency: docs/page-consistency.md · Runtime & deploy: docs/architecture.md