init: initial commit

- ticker / QR ad overlay / break slide graphics (1920×1080) with all
  geometry derived from one shared module (src/shared/obs-geometry.mjs)
- OBS scene-collection generator (scripts/generate-obs-scenes.mjs) and a
  read-only in-dashboard setup verifier, both driven by the same module
- en/sr dashboard i18n selected via bundle config; configschema.json with
  neutral first-run defaults seeded from optional branding config
- install.sh / systemd user service / update.sh for venue deployment
- reference OBS scene collection + profile from a real venue as fixtures
This commit is contained in:
2026-07-15 17:43:05 +02:00
commit 4bb64a8ca3
71 changed files with 18186 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
# 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.