Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"version": "0.0.1",
"configurations": [
{
"name": "tarkov-checker-dev",
"name": "raidmate-dev",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev"],
"port": 5173,
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/build-overlay.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,16 @@ jobs:

- uses: actions/upload-artifact@v7
with:
name: tarkov-checker-desktop
path: apps/desktop/src-tauri/target/release/tarkov-checker-desktop.exe
name: raidmate
path: apps/desktop/src-tauri/target/release/raidmate.exe
retention-days: 30
if-no-files-found: error

- name: Publish release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v3
with:
files: apps/desktop/src-tauri/target/release/tarkov-checker-desktop.exe
files: apps/desktop/src-tauri/target/release/raidmate.exe
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
generate_release_notes: true
8 changes: 4 additions & 4 deletions .github/workflows/deploy-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ name: Deploy frontend to GitHub Pages
# the deploy step refuses to upload.
#
# The published URL is `https://<user>.github.io/<repo>/` for project
# pages — by default `https://mosmain.github.io/tarkov-checker/`.
# pages — by default `https://mosmain.github.io/raidmate/`.
# Update `GITHUB_PAGES_BASE` in `apps/client/vite.config.ts` and
# `ALLOWED_ORIGINS` in `apps/desktop/src-tauri/src/http_server.rs` if
# the URL changes (rename, custom domain).
Expand Down Expand Up @@ -47,15 +47,15 @@ jobs:

- uses: ./.github/actions/install-js

# GITHUB_PAGES=true flips Vite's `base` to `/tarkov-checker/` and
# GITHUB_PAGES=true flips Vite's `base` to `/raidmate/` and
# turns on the 404.html fallback plugin (SPA-history workaround
# for Pages — see vite.config.ts).
- name: Build SPA
env:
GITHUB_PAGES: 'true'
run: |
pnpm --filter @tarkov-checker/shared build
pnpm --filter @tarkov-checker/client build
pnpm --filter @raidmate/shared build
pnpm --filter @raidmate/client build

# Pages artifact is just a tarball of the dist/ folder; the deploy
# job below unpacks it into the published site.
Expand Down
42 changes: 22 additions & 20 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@
One command:

```
pnpm --filter @tarkov-checker/desktop tauri:dev
pnpm --filter @raidmate/desktop tauri:dev
```

`beforeDevCommand` spawns `pnpm --filter @tarkov-checker/client dev`
`beforeDevCommand` spawns `pnpm --filter @raidmate/client dev`
(Vite on **:5173**). Tauri waits for it, opens the webview at the same
URL, and shuts Vite down when it exits. The Rust helper (in-process
HTTP server) binds `0.0.0.0:47474` for `/api/*` and `/events`; Vite's
Expand All @@ -51,7 +51,9 @@ Vite. Phones in the same Wi-Fi use `http://<lan-ip>:5173/`. The
embedded-SPA path lights up only in **release** builds, where there
is no Vite.

The repo must live on an **ASCII path** (currently `C:\git-repos\tarkov-checker`)
The repo must live on an **ASCII path** (currently `C:\git-repos\raidmate`;
if the folder still carries the pre-rebrand name `tarkov-checker`,
renaming it is a manual step done outside any running session/editor)
— `cargo metadata` segfaults on a Cyrillic CWD, which is what made the
OneDrive Documents path (`C:\Users\<user>\OneDrive\Документы\...`)
unusable historically. Earlier the workaround was an NTFS junction
Expand Down Expand Up @@ -293,7 +295,7 @@ map uses — no separate transport, no separate dataset.

`apps/desktop/src-tauri/src/server/paths.rs` reads the registry via
`winreg`, looks at env vars, applies manual overrides from
`%APPDATA%/tarkov-checker/config.json`, and returns the resolved triple
`%APPDATA%/raidmate/config.json`, and returns the resolved triple
(`gameDir`, `logsDir`, `screenshotsDir`) with `source` + `exists` flags.

Priority: env (`TARKOV_GAME_DIR`, `TARKOV_SCREENSHOT_DIR`) > manual
Expand Down Expand Up @@ -361,7 +363,7 @@ Persisted state lives in **per-feature** Pinia stores, not one big store:
`features/map/composables/useAutoMapSwitch.ts`, mounted once at
`App.vue` root.
- **Per-layer visibility**: `composables/useLayerVisibility.ts` exports a
function that returns a shared `persistedRef('tc.layer.<id>.visible', z.boolean(), true)`
function that returns a shared `persistedRef('rm.layer.<id>.visible', z.boolean(), true)`
per layer id (module-level singleton). The LayerRail toggle and the layer
composable read/write the same ref. Consumed by `MapLayerContext.visible`
in `layers/registry.ts`.
Expand All @@ -385,7 +387,7 @@ Persisted state lives in **per-feature** Pinia stores, not one big store:
`phase` and `outcome` are derived runtime state, not persisted.

Each store uses `persistedRef` from `@/shared/persisted-store` with its
own key (`tc.<feature>.<field>`) — corrupt persisted data falls back to
own key (`rm.<feature>.<field>`) — corrupt persisted data falls back to
defaults silently.

**Session-only state.** `clickThrough` intentionally does NOT use `persistedRef`.
Expand Down Expand Up @@ -424,7 +426,7 @@ id, order, titleKey, visible?, component })`; `useSettingsSections()` returns th
40 paths (desktop-or-tauri), 50 pairing (tauri). Consumed by the gear **drawer**
(`SettingsPanel.vue`): a **non-modal** PrimeVue `Drawer` (right on desktop,
bottom-sheet on `<640px`) rendering a single flat **Accordion**; open-panel state
persists in `tc.settings.open`.
persists in `rm.settings.open`.

Faction colours come from `FACTION_COLORS` in `packages/shared/src/maps.ts`
so icons and tooltip stripes never drift across components.
Expand Down Expand Up @@ -470,7 +472,7 @@ and the `apple-mobile-web-app-*` / `mobile-web-app-capable` meta in `index.html`
`display: standalone`, icon = the existing `favicon.svg` (`sizes: "any"`).
`start_url`/`scope` are `/`, correct for the phone (`:5173`/`:47474`) and the Tauri
release (base `/`). The hosted **GitHub Pages** build serves under base
`/tarkov-checker/`, so its `start_url`/`scope` would mismatch — the static manifest
`/raidmate/`, so its `start_url`/`scope` would mismatch — the static manifest
isn't templated by Vite. Pages PWA install is a secondary path; template the
manifest if it ever matters. iOS `apple-touch-icon` ideally wants a PNG — pointing
it at the SVG works on Android, but iPhone may fall back to a page screenshot for
Expand All @@ -481,7 +483,7 @@ and the `apple-mobile-web-app-*` / `mobile-web-app-capable` meta in `index.html`
`display: standalone`, icon = the existing `favicon.svg` (`sizes: "any"`).
`start_url`/`scope` are `/`, correct for the phone (`:5173`/`:47474`) and the Tauri
release (base `/`). The hosted **GitHub Pages** build serves under base
`/tarkov-checker/`, so its `start_url`/`scope` would mismatch — the static manifest
`/raidmate/`, so its `start_url`/`scope` would mismatch — the static manifest
isn't templated by Vite. Pages PWA install is a secondary path; template the
manifest if it ever matters. iOS `apple-touch-icon` ideally wants a PNG — pointing
it at the SVG works on Android, but iPhone may fall back to a page screenshot for
Expand Down Expand Up @@ -612,7 +614,7 @@ machine (via HTTP). One source of state, two transports.
| `server/screenshots.rs` | `notify-debouncer-full` watcher (250 ms `awaitWriteFinish` equivalent); parses filename → position; opt-in recycle-bin delete after parse (see below) |
| `server/logs.rs` | poll-tails latest `log_*/application_NNN.log`; emits `map-change` on `rcid:` / `Location:` hits |
| `server/paths.rs` | env → manual override → `winreg` auto-detect; returns `ResolvedPaths` |
| `server/config.rs` | reads/writes `%APPDATA%/tarkov-checker/config.json`; rejects UNC paths |
| `server/config.rs` | reads/writes `%APPDATA%/raidmate/config.json`; rejects UNC paths |
| `server/events.rs` | `ServerEvent` enum + `tokio::sync::broadcast` channel for HTTP-side fan-out |
| `watcher.rs` | `WatcherSlot` state holder + `apply_resolved` that atomically swaps watcher handles |
| `lan.rs` | LAN IP detection for the QR pairing flow (multi-NIC heuristic — see `detect_lan_ip`) |
Expand Down Expand Up @@ -686,11 +688,11 @@ focus-required `useBrowserShortcut` and per-client `useGlobalShortcut`
wiring for these is gone; only the overlay **lock** combo stays
client-registered (see "Desktop overlay").

- Combos persist in `%APPDATA%/tarkov-checker/hotkeys.json` via
- Combos persist in `%APPDATA%/raidmate/hotkeys.json` via
`server/hotkeys.rs` (`HotkeyStore`, sibling to `config.json`). Defaults
match the client's historical `tc.hotkeys.*` so an un-customised install
is unchanged; the client migrates customised localStorage values up once
(`tc.hotkeys.migrated`).
match the client's `DEFAULTS` so an un-customised install agrees on both
ends. (The one-time localStorage→backend migration from the pre-rebrand
`tc.hotkeys.*` keys was removed in the RaidMate rebrand — clean break.)
- Registration lives in `src/hotkeys.rs` behind one `HotkeyController`
trait, with two impls that are **never** used together (the windowed app
and headless backend are mutually exclusive — both bind :47474):
Expand Down Expand Up @@ -768,7 +770,7 @@ one new alias entry + one new test case in `parse-log.spec.ts`.

`bundle.active: false` in `tauri.conf.json` — overlay:build skips MSI
and NSIS, just produces the bare `.exe` at
`apps/desktop/src-tauri/target/release/tarkov-checker-desktop.exe`.
`apps/desktop/src-tauri/target/release/raidmate.exe`.
Flip to `true` (with `bundle.targets: ["msi","nsis"]` or `"all"`) when
a release flow needs installers.

Expand Down Expand Up @@ -812,7 +814,7 @@ DeviceGuard').SecurityServicesRunning` → should be empty/`0`. VBS
4. **The repo must live on an ASCII path.** `cargo metadata` segfaults
on a Cyrillic CWD (which is what made the OneDrive Documents path —
`C:\Users\<u>\OneDrive\Документы\...` — unusable). Current location
is `C:\git-repos\tarkov-checker`. If you ever clone fresh into a
is `C:\git-repos\raidmate`. If you ever clone fresh into a
Cyrillic path, either move it or `mklink /J` an ASCII alias and run
pnpm from there. The legacy junction `C:\tarkov-checker` is no
longer required and can be removed with `rmdir C:\tarkov-checker`.
Expand All @@ -839,7 +841,7 @@ DeviceGuard').SecurityServicesRunning` → should be empty/`0`. VBS
Resource step depends on it). The icon set (`32x32.png`, `128x128.png`,
`128x128@2x.png`, `icon.ico`, `icon.icns`, the `Square*Logo`/`StoreLogo`
set) is generated from `apps/client/public/favicon.svg` via
`pnpm --filter @tarkov-checker/desktop exec tauri icon <path>/favicon.svg`
`pnpm --filter @raidmate/desktop exec tauri icon <path>/favicon.svg`
— the same mark the browser build uses. Re-run that after editing the SVG;
the generator also emits `ios/` + `android/` dirs which we delete (this is a
Windows-only desktop app). `icons/128x128.png` is also `include_bytes!`'d
Expand All @@ -853,11 +855,11 @@ DeviceGuard').SecurityServicesRunning` → should be empty/`0`. VBS
toast shows "PowerShell" + its icon). Fix: we don't use the plugin.
`src/notify.rs` registers `HKCU\Software\Classes\AppUserModelId\<identifier>`
with a `DisplayName` + `IconUri` (the favicon PNG, written to
`%APPDATA%/tarkov-checker/notification-icon.png`) at startup, then emits the
`%APPDATA%/raidmate/notification-icon.png`) at startup, then emits the
toast via `tauri-winrt-notification::Toast::new(<identifier>)`. No installer
/ Start-Menu shortcut needed. Only used today for the one-time "still
running in the tray" hint (`commands::notify_tray_hint`, fired by the
client's `useCloseConfirm` gated on `tc.overlay.trayHintShown`).
client's `useCloseConfirm` gated on `rm.overlay.trayHintShown`).

## CI & releases

Expand All @@ -882,7 +884,7 @@ git push origin v0.1.0

Pushing the tag triggers a fresh CI run from the tagged commit
(~3-5 min warm cache, ~8-12 cold). On success `softprops/action-gh-release@v2`
publishes a GitHub Release named `v0.1.0` with `tarkov-checker-desktop.exe`
publishes a GitHub Release named `v0.1.0` with `raidmate.exe`
attached and marked as **Latest**. End users grab it from the Releases
tab; the .exe lives there indefinitely.

Expand Down
2 changes: 1 addition & 1 deletion CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4
See [`apps/client/public/maps/LICENSE.md`](apps/client/public/maps/LICENSE.md)
for the full text and the explicit no-cheating clause.

`tarkov-checker` is a personal, non-commercial tool — the NC clause is
`RaidMate` is a personal, non-commercial tool — the NC clause is
satisfied. Should this repo ever be open-sourced, the SVG maps remain
under their original CC BY-NC-SA 4.0 license; the submodule keeps them
separate from this project's code so the two licenses don't entangle.
Expand Down
Loading
Loading