BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
Unmatched 보드게임용 무료 브라우저 시뮬레이터, 계정·설치 없이 팬 덱 대전, unmatched.cards 등에서 가져옴
Free browser simulator for the Unmatched board game. Play homebrew fan decks head-to-head — no account, no install. Imports from unmatched.cards, the-unmatched.club, and Tabletop Simulator.
게임TypeScript · JavaScriptGitHub @JollyGrin온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Refactoring unbrewed with next 13 & typescript
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Play your favorite Unmatched fan decks online with friends — all you need is a browser.
John Wick vs King Kong, live over websocket. Hover a card to read it, drag tokens around any map.
Unmatched has a thriving homebrew community designing custom decks on unmatched.cards — but playtesting them used to mean printing cards or wrestling with Tabletop Simulator. Unbrewed is a free, open-source virtual tabletop built just for that:README 전문 보기 ↗Play your favorite Unmatched fan decks online with friends — all you need is a browser.
John Wick vs King Kong, live over websocket. Hover a card to read it, drag tokens around any map.
Unmatched has a thriving homebrew community designing custom decks on unmatched.cards — but playtesting them used to mean printing cards or wrestling with Tabletop Simulator. Unbrewed is a free, open-source virtual tabletop built just for that:
Unbrewed is a fan-made hobby project and is not owned by or associated with Restoration Games, LLC.
| Load up your bag | Connect in three steps |
|---|---|
| The Bag — collect decks & maps, star your favorites | Connect — pick a deck, name a lobby, share it with a friend |
A default gameserver is already live, so most players never need to run anything.
# 1. build the Go gameserver
cd gameserver && go build && cd ..
# 2. start the gameserver (ws relay on :1111)
yarn server
# 3. in another terminal, start the web app
yarn install
yarn dev
Open http://localhost:3000, then point the app at your local server on the settings page (http://localhost:1111).
You can run the server on your own machine — free, and independent of Unbrewed's servers ever going offline:
cd gameserver && go buildcd ../ && yarn server — relay now running on localhost:1111yarn grok and copy the public URL it printsWant to run a 24/7 public server for the community? Open an issue or PR so we can add it to the default server list. (Dockerfile.gameserver is included if you like containers — it's what the default relay on Railway builds from.)
The relay can report sandbox room/player lifecycle events (room_opened, player_joined, player_left, hero_seen, room_closed) to unbrewed-telemetry at POST /v1/sandbox-events. It is off unless all three are set; with any unset the relay behaves exactly as before and makes no outbound requests:
| env var | what |
|---|---|
SANDBOX_TELEMETRY_URL | telemetry base URL (events go to {URL}/v1/sandbox-events) |
SANDBOX_TELEMETRY_KEY | bearer credential with the sandbox:submit scope |
SANDBOX_NAME_SALT | secret HMAC salt for player names and lobby names. Required when the other two are set (without it telemetry stays off and the relay logs an error). Player names only leave the relay as a 16-hex playerHash, and lobby names only as lobbyHash on room_opened. Each room sitting is identified by a fresh uuid roomId, because lobby names get reused. |
Events are buffered and posted in batches (every 30s or 200 events), never on the game path: a slow or down telemetry server drops events, it never delays play. With telemetry on, on SIGTERM the relay reports open rooms as room_closed (reason: shutdown) and flushes for up to 3s.
Deploy order: telemetry live and a sandbox:submit credential issued → set SANDBOX_TELEMETRY_URL, SANDBOX_TELEMETRY_KEY, SANDBOX_NAME_SALT on Railway → deploy the relay.
Set ADMIN_KEY and the relay serves a live room monitor on its main port: GET /view (HTML, auto-refreshes every 10s) and GET /view.json. It lists every open room, newest activity first, by lobby name and by its telemetry roomId (to match a row on telemetry.unbrewed.xyz's Sandbox tab), with the room's peakConnections/stateUpdates (plus distinctPlayers and heroesSeen while telemetry is on), and each player who joined, their Discord username and account id while connected (unverified labels the client sends, from the newest connection), their deck/hero/author, zone counts (deck, hand, discard; never card names), and whether they're still connected (×2 = two tabs/devices) or have left. With ADMIN_KEY unset both routes return 404. State is in memory and resets on deploy.
Auth is HTTP Basic: any username, password = ADMIN_KEY. On Railway, add ADMIN_KEY under the relay service's Variables tab (it redeploys), then open https://unbrewed-relay-production.up.railway.app/view and enter the key as the password when the browser prompts. From a shell:
curl -u admin:$ADMIN_KEY https://unbrewed-relay-production.up.railway.app/view.json
flowchart LR
subgraph "Player A's browser"
A["Next.js static app<br/>decks & maps in localStorage"]
end
subgraph "Player B's browser"
B["Next.js static app<br/>decks & maps in localStorage"]
end
S["Go gameserver<br/>(tiny websocket relay,<br/>rooms in memory)"]
A <-- "playerstate / playerposition" --> S
S <-- "playerstate / playerposition" --> B
The server holds no game logic and no database — it just relays each player's state to everyone in the room. All deck data stays in the browser, and the client exports as a fully static site (it runs on GitHub Pages). If unmatched.cards or the default server ever disappear, any static host + one Go binary keeps the game alive.
Unbrewed uses Next.js static export, so your fork can run on GitHub Pages. Since Pages serves from https://username.github.io/repo/, update the repo name in the build steps:
lib/buildTools/prefixFonts.js — replace unbrewed-p2p with your fork's repo namenext.config.js — use NODE_ENV to set the production basePath to your repo namePRs, forks, and feature requests through the issue tracker are all welcome! Come say hi on Discord.
yarn testpublic/fontsstyles/fonts.cssstyles/styles.tslib/buildTools/prefixFonts.js to add another HTML match for fixing production links (GitHub Pages puts the repo name in the URL)