# Change 011: Branding Completion Pass (2026-03-31)

## Summary
Complete remaining user-facing "RustDesk" → "NetExperts Support" rebranding
that was missed in the initial pass (changes 001-005).

## AGPL-3.0 Compliance
- LICENCE file: untouched
- "Based on RustDesk" attribution preserved in: About pages, Cargo.toml
  descriptions, .desktop comments, CLI about text, `powered_by_me` lang key,
  Windows LegalCopyright metadata
- Original copyright headers in source files: untouched
- Upstream git dependency URLs (rustdesk-org/*): untouched
- Functional driver/path references (printer driver, virtual display): untouched

## Files Modified

### Flutter UI (user-facing)
- `flutter/lib/desktop/widgets/tabbar_widget.dart:643`
  - Hardcoded `"RustDesk"` → dynamic `bind.mainGetAppNameSync()`
- `flutter/lib/desktop/pages/desktop_setting_page.dart:2363`
  - `translate('About RustDesk')` → `translate('About NetExperts Support')`
  - Privacy link: rustdesk.com/privacy.html → netexperts.com.au/privacy
  - Website link: rustdesk.com → netexperts.com.au
  - Copyright: Purslane Ltd → NetExperts Pty Ltd, added AGPL attribution
  - About box accent colour: #2c8cff → #CA2325 (NetExperts red)
- `flutter/lib/mobile/pages/settings_page.dart:532`
  - `translate('Keep RustDesk background service')` → `translate('Keep NetExperts Support background service')`
- `flutter/lib/mobile/pages/settings_page.dart:1088`
  - `translate('About RustDesk')` → `translate('About NetExperts Support')`
  - About dialog links: rustdesk.com → netexperts.com.au

### Rust source (user-facing)
- `src/main.rs:49-53`
  - CLI app name, author, about text rebranded
- `src/auth_2fa.rs:17`
  - ISSUER: "RustDesk" → "NetExperts Support" (shown in authenticator apps)
- `src/clipboard.rs:435`
  - Clipboard placeholder text rebranded

### Language strings
- `src/lang/en.rs:232`
  - Added key: "Keep NetExperts Support background service"

### Build metadata
- `libs/portable/Cargo.toml`
  - Package name: rustdesk-portable-packer → netexperts-support-portable-packer
  - Description, ProductName, FileDescription, OriginalFilename, LegalCopyright

### Platform manifests
- `res/rustdesk-link.desktop:2` — Name=RustDesk → Name=NetExperts Support
- `flutter/android/app/src/main/AndroidManifest.xml:28,49` — app label, input service label
- `flutter/android/app/src/main/res/values/strings.xml` — app_name, accessibility description
- `flutter/ios/Runner/Info.plist:10,18` — CFBundleDisplayName, CFBundleName

## NOT Changed (intentionally)
- Printer driver references (RustDeskPrinterDriver.inf, driver name) — must match actual .inf/.sys files
- Virtual display driver identifiers (RustDeskIddDriver) — must match actual driver
- Internal class/variable names (RustDeskMultiWindowManager, etc.) — not user-visible
- Code comments referencing upstream RustDesk — AGPL provenance
- rustdesk.com documentation URLs in lang files — functional help links to upstream docs
- All Cargo.toml git dependency URLs pointing to rustdesk-org — upstream references
- `flutter/lib/web/bridge.dart:1613` — `!= "RustDesk"` check correctly detects us as custom client

## Risk Assessment
- **Breaking risk**: Low — string/metadata changes only, no logic changes
- **Regression areas**: Window titles, About pages, CLI help, 2FA setup, system tray, mobile settings

## Test Cases
1. Window title bar shows "NetExperts Support" (not "RustDesk")
2. Desktop About section: title, copyright, links all correct
3. Mobile About dialog: title, version, netexperts.com.au link
4. CLI `--help` shows NetExperts branding with RustDesk attribution
5. 2FA setup shows "NetExperts Support" as issuer in authenticator app
6. `isCustomClient()` returns true (web bridge)
7. Android app drawer shows "NetExperts Support"
8. Windows Explorer file properties show "NetExperts Support" (portable packer)
9. Grep source for user-visible "RustDesk" — should only appear in attribution/compliance contexts
