OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A tool for tracking Old School RuneScape Grand Exchange prices and computing values with formulas. Users sign in with Google; their scopes, globals, tags and settings are stored on the server, so they follow them across devices. A scope can be shared read-only by link.
The screenshots below are all of one scope: an Oathplate armour profit calculator.
The Scopes tab is a work area: a Data panel for finding items, the code editor, and a sidebar with the scope's UI and values. Panels resize by dragging the splitters between them and collapse to a rail (Ctrl+B / Ctrl+Alt+B), and the UI section is dragged by its header to dock it full width above the editor or in the sidebar. Ctrl+K opens a command palette.
A scope's code can build its own UI: forms, stat tiles and tables that update as prices and inputs change.
Each scope is JavaScript with built-in functions for looking up items and their live prices. The editor highlights variables, and item lookups take their item tag's colour. With the caret on a variable, its occurrences are marked and a bar at the bottom steps through them (F7 / Shift+F7) or jumps to its declaration (F12).
The AI chat drawer can answer questions about items and prices, or change a scope. It reads the scope, test-runs its edit, and changes nothing until you click Apply.
More in docs/.
cp .env.example .env # local-development defaults; DEV_LOGIN=true lets you sign in without Google
docker compose up --build
Open http://localhost:3000. Data lives in the ge-tracker-data volume.
That runs the code baked into the image, so a change needs a rebuild. For development, add
docker-compose.dev.yml, which mounts server/ and public/ from the working folder:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build
A server change then restarts the server within a second (tools/dev-server.mjs), and a browser
refresh picks up a public/ change. Rebuild only after changing package.json or the Dockerfile.
Needs Node 20 or later.
cp .env.example .env
npm install
npm run dev # restarts on changes; reads .env
Data goes in storage/ (git-ignored).
Point your domain's DNS at the server and open ports 80 and 443.
In .env, set:
DOMAIN and ACME_EMAIL (for the Let's Encrypt certificate)SESSION_SECRET to a long random string: node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))"GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET (below)AI_KEY_SECRET to another long random string, so users can connect their own Anthropic API
key to use Claude (it encrypts the stored keys). Leave it empty to turn Claude off.Start the app and Traefik:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
The production override sets NODE_ENV=production (which turns the dev sign-in off) and
BASE_URL=https://$DOMAIN.
In Google Cloud Console, create an OAuth client ID of type Web application and add these Authorized redirect URIs:
http://localhost:3000/auth/google/callback (development)https://<your DOMAIN>/auth/google/callback (production)Copy the client ID and secret into .env. The OAuth consent screen needs the email and
profile scopes.
server/
index.js start: run migrations, then listen
app.js Express: security headers, sessions, routes, static files
config.js settings from the environment (.env.example documents them)
db/ Knex + SQLite (better-sqlite3); migrations/ holds the schema
auth/ Google sign-in (Passport) and the SQLite session store
routes/ URL -> middleware -> controller
controllers/ HTTP in and out
managers/ the work: reading and writing the database, icons, sharing
middleware/ sign-in check, API header check, validation, errors
validation/ zod schemas for request bodies
public/ the browser app (Vue 3 from a CDN, no build step)
test/ vitest + supertest; test/browser runs the browser store against a real server
tools/ scripts that rebuild public/data/ from the OSRS wiki
/icons/<name> downloads each item icon from the OSRS wiki once and serves it from
the data volume afterwards.AI_KEY_SECRET, and picks a
model in the chat drawer. The drawer sends the conversation to /api/ai/chat, which adds the
system prompt and streams the reply back in one shape for both providers
(server/ai/anthropicChat.js, server/ai/geminiChat.js). Conversations can switch provider
midway: server/ai/transcript.js converts them. Rate limits (common on Gemini's free tier) are
waited out and retried automatically. The system prompt
is built at start-up from the formula files' header comments and functions.js's docs
(server/ai/systemPrompt.js), so document new scope functions there. The model's tools (item
search, reading and test-running code, proposing edits) run in the browser
(public/js/ai/agentTools.js; the server declares them in server/ai/tools.js). An edit only
happens when the user clicks Apply. Chats are saved per user.The server applies pending migrations on start. To add one:
npm run migrate:make -- add_something # creates server/db/migrations/<timestamp>_add_something.js
npm run migrate # apply now (the server also does this on start)
npm run migrate:rollback
Migrations are ES modules exporting up(knex) and down(knex).
npm test