# Contributing Thanks for taking a look! ## Setup The bundle develops inside a NodeCG install: ```sh mkdir venue-dev && cd venue-dev npm pack nodecg@^2 && tar xzf nodecg-*.tgz --strip-components=1 && rm nodecg-*.tgz npm install --omit=dev mkdir -p bundles cfg && cd bundles git clone https://git.dvdrw.dev/kckljajicevo/nodecg-venue-gfx.git && cd nodecg-venue-gfx npm ci npm run dev # watch + auto-restarting NodeCG on :9090 ``` (`scripts/install.sh --local .` automates the same thing.) ## Ground rules - `dashboard/`, `graphics/`, `extension/` are build outputs — never edit or commit them; sources live in `src/`. - Geometry shared with OBS lives only in `src/shared/obs-geometry.mjs` (plain JS + `.d.mts` declarations — keep both in sync). - UI strings live in `src/i18n/` — no literals in panel components. New locales: copy `en.ts`, register in `index.ts`, extend the enum in `configschema.json`. - `npm run build` and the TypeScript checks must stay green: `npx tsc --noEmit -p src/{dashboard,graphics,extension}/tsconfig.json`. - Changes to the generated OBS collection shape should be validated by a real import into OBS ≥ 31. ## License AGPL-3.0 — contributions are accepted under the same license.