Skip to content

SVG icons, custom logo, EN i18n cleanup, Windows desktop build - #1

Merged
CaYatur merged 1 commit into
masterfrom
feat/desktop-app-icons-i18n
Jul 15, 2026
Merged

SVG icons, custom logo, EN i18n cleanup, Windows desktop build#1
CaYatur merged 1 commit into
masterfrom
feat/desktop-app-icons-i18n

Conversation

@CaYatur

@CaYatur CaYatur commented Jul 15, 2026

Copy link
Copy Markdown
Owner

Summary

  • Replaced every emoji in the panel UI with lucide-react icons, and swapped the wolf-emoji placeholder logo for a custom pixel-art "bot head" SVG (BotLogo.tsx) used in the sidebar, favicon, and empty states — colors match the existing zinc/emerald/red palette.
  • Added an About footer to the Settings page with cayadev.com / GitHub links and MIT copyright.
  • Swept hardcoded Turkish strings so the English locale is actually English end-to-end, including server-emitted log messages (both the terminal/stdout output and the panel's Log view read from the same strings in server/src/**).
  • Packaged the app as a Windows desktop build via Electron: electron/main.cjs forks the existing Express/mineflayer server as a child process and points a BrowserWindow at it. Bot/rule/data storage now writes to the OS per-user data directory instead of the install folder (new CAYA_DATA_DIR override in server/src/config/paths.ts), since Program Files installs aren't writable.
  • electron-builder config (package.json build field) produces both an NSIS installer and a portable .exe via npm run dist:win, using a generated app icon (build/icon.png, built by scripts/make-icon.mjs from the same logo design) instead of the Electron default.
  • Added build-release.bat / release.bat for a one-click local release build (bumps versions, runs dist:win, optionally tags + pushes + creates a GitHub release via gh).
  • Added scripts/check-i18n-keys.mjs (EN/TR key-parity + untranslated-value check) and scripts/extract-tr-strings.mjs (residual Turkish-character scan of server/src) as ongoing lint helpers — both currently pass clean on the EN/TR key set, with a small number (~26) of Turkish substrings left in server/src, mostly inside comments.
  • Removed web/src/pages/Placeholders.tsx — dead code superseded by the real Automations/Settings pages.

Test plan

  • npm run typecheck (server + web) passes
  • npm run build (server + web) succeeds
  • Manual browser check of the dev server: no emoji left, new logo/icons render, EN/TR toggle works
  • npm run dist:win produces both CaYa Bot Panel.exe (portable) and CaYa Bot Panel Setup.exe (NSIS installer); both launch, fork the server correctly (CAYA_DATA_DIR writes to app.getPath('userData')), and serve the built web app on 127.0.0.1:3001
  • Full manual pass through every panel tab in the packaged desktop build (only spot-checked the dashboard during this session)

… packaging

- Replace all emoji with lucide-react icons across the panel UI; add a
  custom pixel-art "bot head" SVG logo (BotLogo.tsx) used in the sidebar,
  favicon, and empty states, replacing the wolf emoji placeholder
- Add an About footer to Settings with cayadev.com / GitHub links and
  MIT copyright
- Audit and translate hardcoded Turkish strings so the English locale is
  actually English, including server-emitted log messages shown in the
  Log panel and printed to the terminal (server/src/**)
- Package the app as a Windows desktop build via Electron: electron/main.cjs
  forks the existing Express/mineflayer server as a child process and
  points a BrowserWindow at it; data now writes to the OS per-user data
  dir instead of the install folder (CAYA_DATA_DIR override)
- electron-builder config produces both an NSIS installer and a portable
  exe (npm run dist:win), using a generated app icon (build/icon.png,
  scripts/make-icon.mjs) matching the new logo
- Add build-release.bat / release.bat for a one-click local release build
- Add scripts/check-i18n-keys.mjs and scripts/extract-tr-strings.mjs as
  ongoing lint helpers for i18n key parity and leftover Turkish text

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 15, 2026 22:57
@CaYatur
CaYatur merged commit 127073a into master Jul 15, 2026
1 check passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes the panel UI and prepares the project for Windows desktop distribution by standardizing iconography/logos, improving English i18n coverage (including server-emitted messages), and adding an Electron packaging + release workflow.

Changes:

  • Replaced emoji-based UI affordances with lucide-react icons and introduced a shared BotLogo SVG used across the app (sidebar, empty states, favicon).
  • Expanded i18n usage across web UI and server messages; updated several formatting helpers to be locale-aware.
  • Added Electron Windows build support (child-process server + electron-builder), plus release/lint helper scripts and updated ignore rules.

Reviewed changes

Copilot reviewed 85 out of 95 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
web/src/pages/Settings.tsx Adds icon header for language section + About footer with links and logo.
web/src/pages/Servers.tsx Replaces hardcoded TR strings with i18n keys.
web/src/pages/Schematics.tsx Replaces hardcoded TR strings, adds icon-based file picker UI, improves subtitle rendering.
web/src/pages/Placeholders.tsx Removes dead placeholder pages.
web/src/pages/Dashboard.tsx Uses BotLogo in empty state instead of emoji.
web/src/pages/BotDetail.tsx Replaces emojis with lucide icons; passes locale into dimension labeling.
web/src/pages/Automations.tsx Adds new action fields (count/drop/match modes) and replaces emoji glyphs with lucide icons.
web/src/lib/format.ts Makes time/dimension formatting locale-aware via i18n translate.
web/src/lib/api.ts Improves fallback error message to English when server error is absent.
web/src/components/TasksPanel.tsx Replaces hardcoded TR UI/toasts with i18n and uses lucide icon.
web/src/components/NearbyPlayers.tsx Adds i18n and replaces hardcoded TR UI/toasts; renames interval var to avoid shadowing.
web/src/components/LogPanel.tsx Localizes log level chips and timestamps via i18n/locale.
web/src/components/Layout.tsx Replaces emoji nav icons with lucide icons and uses BotLogo.
web/src/components/ItemPicker.tsx Localizes placeholder and minor UI text.
web/src/components/GatherCraftPanel.tsx Localizes panel strings and prompts via i18n.
web/src/components/ErrorBoundary.tsx Uses lucide icon + translated strings; reads locale from store.
web/src/components/ChatPanel.tsx Localizes placeholders/tags; timestamps now locale-aware.
web/src/components/BuildPanel.tsx Localizes UI strings and replaces hardcoded TR text with i18n keys.
web/src/components/BuildAnim.tsx Localizes status labels/counters via i18n.
web/src/components/BotLogo.tsx Introduces shared pixel-art SVG logo component.
web/src/components/BotCard.tsx Replaces emojis with icons and localizes strings; dimension label now locale-aware.
web/src/components/Bars.tsx Changes StatBar.icon from string to ReactNode to support SVG icons.
web/src/components/automation/AdvancedFlowBuilder.tsx Replaces arrow/close glyphs with lucide icons in the advanced flow editor.
web/src/components/AllChatPanel.tsx Localizes empty state/tags and makes timestamps locale-aware.
web/src/components/AddBotModal.tsx Localizes modal strings and improves pluralized success toast.
web/package.json Adds lucide-react dependency.
web/index.html Replaces emoji favicon with SVG logo and updates document title.
server/src/utils/chatText.ts Converts friendly error/translate map strings to English.
server/src/types.ts Updates various docs/strings; keeps shared types aligned with new UI behavior.
server/src/persistence/store.ts Converts persistence read/write log messages to English.
server/src/modules/world/memory.ts Updates module description text.
server/src/modules/survival/waterGuard.ts Converts many log/status strings to English.
server/src/modules/survival/index.ts Updates module header text and some log strings to English.
server/src/modules/survival/hazardGuard.ts Converts hazard guard logs/status strings to English.
server/src/modules/survival/bucketScoop.ts Updates internal comments/strings for English consistency.
server/src/modules/movement/water.ts Updates comments to English (partial).
server/src/modules/movement/look.ts Updates comments to English (partial).
server/src/modules/inventory/index.ts Converts inventory errors/messages to English.
server/src/modules/gather/smartGather.ts Adds count-mode support and converts many labels/messages to English.
server/src/modules/gather/ringSearch.ts Adds surface-travel option and movement options; converts labels to English.
server/src/modules/craft/smartCraft.ts Converts craft/gather errors/labels to English.
server/src/modules/craft/index.ts Converts task labels/logs/errors to English.
server/src/modules/combat/weapons.ts Updates comments to English (partial).
server/src/modules/combat/realism.ts Converts a cancellation message and LoS detail to English.
server/src/modules/chat/parse.ts Adjusts chat parsing docs/regex patterns (system/whisper/player).
server/src/modules/build/types.ts Updates build type docs (partial).
server/src/modules/build/storage.ts Converts storage/shulker messages and errors to English (partial).
server/src/modules/build/scaffold.ts Converts scaffold comment to English.
server/src/modules/build/place.ts Converts build placement comments/errors to English (partial).
server/src/modules/build/pathSafe.ts Converts schematic path validation errors to English.
server/src/modules/build/litematic.ts Converts litematic parse errors to English.
server/src/modules/build/library.ts Converts schematic library defaults/errors to English (partial).
server/src/modules/build/blocks.ts Converts “skip reason” strings to English.
server/src/modules/automation/flow.ts Updates doc comment text (minor).
server/src/modules/automation/blueprints.ts Updates doc comment text (minor).
server/src/index.ts Converts startup/shutdown logs and comments to English.
server/src/core/Waypoints.ts Converts waypoint errors/messages to English.
server/src/core/TaskQueue.ts Converts preempt/pause/cancel strings to English (partial).
server/src/core/errors.ts Minor doc comment tweak.
server/src/core/BotManager.ts Adds “cancel all work” support and updates many logs/messages; adjusts chatParsed handling.
server/src/config/paths.ts Adds CAYA_DATA_DIR override for writable desktop builds.
server/src/api/socket.ts Converts socket connect/disconnect/log messages to English.
server/src/api/rest.ts Converts REST errors/messages to English; adds “reset-all work” action alias; updates waypoint action label.
scripts/make-icon.mjs Generates build/icon.png from the same pixel-art logo (no external deps).
scripts/extract-tr-strings.mjs Adds Turkish-character scan helper for residual TR strings in server code.
scripts/create-github-release.mjs Automates GitHub release creation/upload via gh CLI.
scripts/check-i18n-keys.mjs Adds EN/TR i18n key parity + untranslated Turkish-value checks.
release.bat Thin wrapper to run build-release script.
package.json Adds Electron entrypoint, electron-builder config, and Windows dist script.
electron/main.cjs Electron main process: forks server, waits for it, and loads the UI.
build-release.bat One-click Windows release build script (version bump + dist + optional GitHub release).
.gitignore Ignores electron dist output and local release folders.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +317 to +321
inst.on("chatParsed", (entry: { botId: string; username?: string; text: string; kind: string }) => {
if (entry.kind === "player" || entry.kind === "whisper") {
this.rules.onChat(entry.botId, entry.username, entry.text);
}
);
});
/başarıyla\s+giriş|basariyla\s+giris|successfully\s+logged|logged\s+in\s+successfully/i.test(p) ||
/giriş\s+yaptınız|giris\s+yaptiniz|wrong\s+password|yanlış\s+şifre|yanlis\s+sifre/i.test(p) ||
/kayıt\s+ol|kayit\s+ol|not\s+registered|unregister/i.test(p)
/entries\s+ol|kayit\s+ol|not\s+registered|unregister/i.test(p)
{ kind: "whisper", re: new RegExp(`^(${MC_NAME}) whispers(?: to you)?:\\s*(.*)$`, "s") },
{ kind: "whisper", re: new RegExp(`^\\[(${MC_NAME})\\s*->\\s*(?:me|ben|you|sen)\\]\\s*(.*)$`, "is") },
{ kind: "whisper", re: new RegExp(`^(${MC_NAME})\\s*(?:fısıldıyor|fisildiyor|whispers).*?:\\s*(.*)$`, "is") },
{ kind: "whisper", re: new RegExp(`^(${MC_NAME})\\s*(?:whispers|whispers|whispers).*?:\\s*(.*)$`, "is") },
/**
* AuthMe / join-leave / hoş geldin / sunucu duyurusu — oyuncu sohbeti DEĞİL.
* Bunlar isim içerse bile (tıklanabilir prefix) sunucu mesajı kalmalı.
* Bunlar isim içerse bile (tıklmainbilir prefix) sunucu mesajı kalmalı.
Comment thread server/src/types.ts
/** mesaj gövdesi (rütbesiz) */
text: string;
/** isimden önce: "[Admin] [VIP] " rütbe/kanal prefix */
/** isimden önce: "[Admin] [VIP] " rütbe/kmainl prefix */
}

cancel(id: string, reason = "iptal edildi"): boolean {
cancel(id: string, reason = "cancelled edildi"): boolean {
if (token.cancelled) {
this.setPhase("cancelled", "iptal edildi");
throw new Error(token.reason ?? "iptal");
this.setPhase("cancelled", "cancelled edildi");
} else {
this.setPhase("failed", label, `${failed} blok yerleştirilemedi`);
this.log().warn(`İnşaat kısmi/hatalı: ${parsed.meta.name}`, label);
this.setPhase("failed", label, `${failed} blok placeilemedi`);
Comment thread web/src/pages/Automations.tsx
Comment thread electron/main.cjs
Comment on lines +61 to +72
app.whenReady().then(async () => {
try {
await startServer();
} catch (err) {
console.error("Failed to start Minecraft CaYa Bot Panel server:", err);
}
createWindow();

app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants