Skip to content

GuildMastery-io/GuildMasterySync

Repository files navigation

GitHub release Windows Electron Discord Website

GuildMastery Sync

Windows companion app that automatically syncs your RCLootCouncil_GuildMastery addon data to the GuildMastery web app.

No more copy-pasting JSON exports. Install the app, point it at your WoW folder, paste your API key, and every /reload in-game pushes the latest loot vote sessions to your guild dashboard.

Features

  • Silent background sync — watches WTF/Account/*/SavedVariables/RCLootCouncil_GuildMastery.lua and uploads on change.
  • Per-account safety — each WoW account folder is tracked independently; switching characters won't skip a sync.
  • Manual refresh — one-click resync button if you want to force a push.
  • Connection probe — live indicator showing whether the server is reachable and the API key is valid (with the guild name displayed when verified).
  • Server-side dedup — the GuildMastery API rejects exports it already has, so duplicate uploads are harmless.
  • Auto-start with Windows — optional, toggled in the top bar.
  • Live log panel — see exactly what the watcher is doing, in real time.

Install

Grab the latest Windows installer from the Releases page and run it.

The installer puts GuildMastery Sync in your Start menu. First launch:

  1. Click Parcourir… and select your World of Warcraft folder (the one containing _retail_ or _classic_).
  2. Paste your API key — generate it from guildmastery.io under Dashboard → API.
  3. Wait for the green Actif badge. You're done.

From now on, every time you do /reload in-game with the addon loaded, the app catches the file write and pushes the new sessions.

How it works

WoW client (addon writes Lua)
      │
      ▼
SavedVariables/RCLootCouncil_GuildMastery.lua
      │ (chokidar file watcher)
      ▼
GuildMastery Sync (Electron app)
      │ POST /api/loot-sessions  (Bearer <apiKey>)
      ▼
guildmastery.io

The app extracts the syncPayload field from the addon's SavedVariables, parses it as JSON, hashes it (sha1) to avoid re-uploading identical content, and POSTs it to the GuildMastery API. The server detects duplicates by (timestamp, sessions) and replies with { duplicate: true } if it already knows the payload.

Build from source

git clone https://github.com/GuildMastery-io/GuildMasterySync.git
cd GuildMasterySync
npm install

Development (hot-reload Electron + Vite)

npm run dev

Production build (Windows installer)

npm run build

Output: release/GuildMastery Sync Setup <version>.exe.

Stack

Component Tech
Runtime Electron 41
UI React 19 + Mantine 8 + Tabler Icons
Bundler Vite 8 + vite-plugin-electron
Installer electron-builder (NSIS)
File watcher chokidar
HTTP client axios
Settings store electron-store

Project layout

GuildMasterySync/
├── electron/
│   ├── main.ts       # BrowserWindow, IPC handlers, auto-sync interval
│   ├── preload.ts    # Named API exposed to the renderer (no generic IPC passthrough)
│   ├── store.ts      # electron-store schema + accessors (apiKey, apiUrl, wowPath, …)
│   └── watcher.ts    # chokidar watch, Lua parser, POST to /api/loot-sessions
├── src/
│   ├── App.tsx       # Main UI (Mantine)
│   ├── main.tsx      # React entrypoint
│   ├── index.css     # Global styles
│   └── vite-env.d.ts # `window.api` type declarations
├── public/logo.png
├── index.html
├── package.json
├── vite.config.ts
├── tsconfig.json
└── tsconfig.node.json

Security notes

  • The renderer runs with nodeIntegration: false, contextIsolation: true, sandbox: true.
  • The preload exposes a typed, allowlisted API — no generic ipcRenderer.invoke is reachable from the renderer.
  • External navigation is denied; clicks on external URLs are routed through shell.openExternal.
  • A strict Content-Security-Policy is set in index.html.
  • The API key is stored locally in %APPDATA%\guildmasterysync\config.json via electron-store. It is never logged. Treat your %APPDATA% folder as you would a password file.
  • The configured apiUrl is validated as http:// or https:// before any request — invalid URLs cannot be used to exfiltrate the API key.

Bug reports & feedback

When reporting a bug, the Logs de synchronisation panel at the bottom of the app is your best friend — copy-paste its contents into the issue.

License

All rights reserved — see LICENSE. The source is published for transparency, reference, and bug reporting. Forks, modifications and redistributions require prior written permission.

Credits

Authored by Ged (Uldaman-EU). Built to feed the GuildMastery web app from the RCLootCouncil ecosystem.

About

Windows companion app that auto-syncs RCLootCouncil_GuildMastery addon data to the GuildMastery web app.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages