BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Launcher for the nine JEV Arcade games, linking each to its own subdomain at jevplay.games.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Front door for the nine JEV games. It is a launcher: each card links to that game's own
subdomain (tic-tac-toe.jevplay.games, sudoku.jevplay.games, …). Every game stays a
separate app with its own Discord application, secrets and origin checks, so nothing in the
games changes.
Zero runtime dependencies, native Node http. Requires Node 18 or newer (engines in package.json).
To try it locally, run npm start and open http://localhost:3000. The live hub is at jevplay.games.README 전문 보기 ↗The front door at jevplay.games. It is a launcher: each card links to that game's own subdomain
(noul-who.jevplay.games, typedoku.jevplay.games, …). Every game stays a separate app with its own Discord
application, secrets and origin checks, so nothing in the games changes. The games: Tic-Tac-Typed, Choice Four,
Typecheckers, Box Score, Noul Who, Typecrack, SafeSweep, Typedoku and Slide Score.
[!NOTE] All nine games run as Discord Activities, but only Tic-Tac-Typed has been verified launching inside Discord (
DISCORD.md). The other eight use the same pattern and have not been launched there yet. During the rename, cards link to each game's pre-rename subdomain until that game cuts over (deploy/REDIRECTS.md).
Requires Node 18 or newer (engines in package.json). Zero runtime dependencies, native Node http.
npm test # node --test
npm run build # validates games.json and the shipped assets, prints each game's URL
npm start # listens on process.env.PORT (default 3000), 0.0.0.0
Open http://localhost:3000.
flowchart LR
B[Browser or Discord Activity] -->|GET /| H[Hub: server.js]
B -->|GET /api/games| H
B -->|GET /api/status| H
H -->|reads| J[games.json]
H -->|probe, cached 60 s| G[Game subdomains<br/>slug.jevplay.games]
B -->|card click| G
classDef ink fill:#1E1E1E,stroke:#1E1E1E,color:#FEFEFE
classDef pink fill:#F386A1,stroke:#1E1E1E,color:#1E1E1E
classDef grey fill:#DEDEDE,stroke:#1E1E1E,color:#1E1E1E
class B grey
class H ink
class J grey
class G pink
games.json is the one source of names, slugs, taglines and card art, for the launcher and the art scripts./api/games returns the catalog with each game's resolved URL. /api/status probes each game's origin
server-side (cached 60 s); any response under 500, including a 403 origin_rejected, counts as online.public/brand/brand.css is the shared pink/ink stylesheet, with Inter and VT323 self-hosted (SIL OFL 1.1,
public/brand/OFL.txt, public/brand/OFL-VT323.txt). This repo owns it: change it here, then copy it to the nine
games byte for byte and check the hash (deploy/BRAND-RESYNC.md).Add or rename games in games.json. URLs come from HUB_BASE_DOMAIN (default jevplay.games) or per-game
GAME_URL_<SLUG> overrides; see .env.example.
While a row carries legacySlug, its card points at https://<legacySlug>.<HUB_BASE_DOMAIN>: the game's new
subdomain is not live yet, so the card goes where the game answers today. Override per game with
GAME_URL_<NEW_SLUG>, for example GAME_URL_NOUL_WHO=https://noul-who.jevplay.games to flip one game early. An
override set under the pre-rename key is still honoured while the row has legacySlug. When a game's new subdomain
is live, delete legacySlug from its row. The full runbook, including the Cloudflare 301s, is
deploy/REDIRECTS.md.
Follows the upload guide:
root package.json with build and start, port from PORT, no node_modules in the zip
(package.json has no zip script, so build the zip by hand), well under 100 MB, one app per upload.
npm test && npm run buildnode_modules, no .env, no art/).HUB_BASE_DOMAIN (and any GAME_URL_*) in Settings, then Publish Now.The games are deployed separately and each is attached to its own subdomain. The hub never proxies them.
.github/workflows/deploy.yml runs npm test on every pull request and push. On a push to main (or Run workflow) it then zips the committed tree with git archive and scripts/godaddy-deploy.js uploads it through the GoDaddy Hosting API (https://api.godaddy.com/v1/hosting), waits for the import, and deploys it to the published app NODEJS-0n4hbgyu3g. A failed test, import or build stops the run and leaves the live app unchanged.
GODADDY_PAT: a GoDaddy Personal Access Token with hosting.application:read, hosting.source:write and hosting.deployment:execute. Without it the deploy step is skipped with a warning.GODADDY_APP_ID overrides the target app (API IDs carry the NODEJS- prefix).GODADDY_APP_ID and GODADDY_PAT in .env, then git archive --format=zip -o deploy.zip HEAD && npm run deploy:godaddy -- deploy.zip.| Path | What it is |
|---|---|
server.js | The hub: static files, /api/games, /api/status, /api/activity/config, /healthz |
lib/catalog.js | Loads and validates games.json, resolves each game's URL |
games.json | The nine games: slug, legacy slug, name, tagline, tags, Discord app ID, card art |
public/ | Landing page, terms, privacy, hub.css, hub.js |
public/brand/ | Shared brand.css, fonts and their licences, icons, card art, hosted social cards |
art/ | Art pipeline (emblems, Discord art, icons); not shipped |
deploy/ | Rename cutover runbook, brand.css re-sync procedure (BRAND-RESYNC.md), Train compose for SafeSweep and Typedoku |
tests/ | node --test suite |
Run npm test and npm run build before opening a pull request. Keep brand.css byte-identical across the ten
repos: change it here, copy it out, compare hashes. Write the opponent as Jev and the brand as jevplay.games.