Blog post
v2.7.0 brings full Spanish localization, theme color customization, a dockable side panel for in-game notes and reminders, and custom audio for boss alerts — plus a handful of quality-of-life fixes across every tab.
v2.7.0 is a personalization-focused release. The headline additions are a complete Spanish translation, per-theme color customization, a dockable Notes side panel for player-managed todos and reminders, and the ability to import custom audio for boss alerts. The app remains portable, installation-free, and runs on the same Tauri + Svelte 5 stack as previous releases.
The entire UI now supports Spanish — roughly 345 translated strings spanning every tab, toast, dialog, date, and number. On first launch the app detects the system locale via @tauri-apps/plugin-os and uses it; on subsequent launches it reads the stored preference. Switching between English and Spanish happens in place without a page reload, powered by a $state rune wired into paraglide-js's getLocale() so Svelte re-renders the affected templates automatically. Numbers respect locale formatting (Spanish gets `.` thousands and `,` decimal), and dates use locale-aware abbreviations. Brand names, BDO proper nouns, ship variants, and NPC names stay in English by design.
Settings → Display now has a Customize Colors block with three live-preview color slots: Primary (buttons, CTAs, active tabs), Accent (focus rings, neon-pulse highlights), and Gold Glow (active-state ring, slider thumbs). A Glow Intensity slider (0–200%) acts as a multiplier on the neon glow CSS variable, letting you dim glows on Obsidian without flipping fully to Light, or push a faint glow into Light mode. Each slot offers a native color picker, six preset swatches (purple, cyan, gold, neon-green, orange-red, pink), and a per-slot reset that only appears when customized. Obsidian Dark and Light each keep separate override sets. Changes apply instantly through live CSS variable fan-out — no reload, no flash.
A new dockable overlay panel for player-managed notes is accessible via a Note button at the top-right of the main content area. The panel opens with a dimmed and blurred backdrop and closes via ESC, the close icon, or by clicking outside. Categories live on a vertical color spine — six sticky tones (amber, violet, cyan, rose, lime, slate) — tap to filter, tap the active shelf again to clear. Three note types are supported: text notes with a three-line clamp that expands to edit, todos with multi-item checklists, and reminders that fire a toast plus the existing boss-alert sound at the target time. A bottom command line takes slash commands (`/todo`, `/remind`, `/note`) or plain text, and Ctrl+K focuses it from anywhere in the panel. Trailing `#tag` is captured automatically. Six default categories — Bosses, Bartering, Crafting, Reminders, Dailies, General — seed on a fresh install and are fully renameable.
You can now import any audio file (mp3, wav, ogg, m4a, aac, flac, max 10 MB) to replace the built-in two-tone synth beep. Settings → Bosses has a new Custom Alert Sound subsection with Choose file…, Preview, and Reset buttons. The Preview button is a stateful play/stop toggle — long imported clips can be auditioned and stopped without waiting for them to finish, and a gold-glow tint marks the playing state. Imported files are copied into the app data directory as `boss_alert_sound.<ext>` with extension whitelisting and a path-traversal-safe Rust handler. The original synth beep is still the fallback whenever nothing is imported.
A few smaller fixes ship alongside the headline features. The animated hex background was removed entirely — a cool experiment, but rarely noticed and unnecessary for what was decoration. Height handling was reworked across every tab so ingredient, inventory, and loot lists now scale 1:1 with the window size instead of being clamped at hardcoded max-heights. The bartering map labels no longer clip under adjacent nodes — z-index is now driven by node state (open > last-visited > visited > unvisited). And the notes panel delete confirm was rewired to use Tauri's async confirm, since `window.confirm()` doesn't block reliably from inside an overlay-portal context.
Native OS Notifications — When the app is unfocused, important alerts (boss spawns, fired reminders) will surface through the OS notification system instead of only in-app toasts. The current toast pipeline already centralizes alert events, so wiring it through @tauri-apps/plugin-notification is mostly a matter of asking for permission once and adding a focus-state check.
Recurring Reminders — The current reminder system fires once. The follow-up will add daily, weekly, and custom-interval scheduling, with the reminder's `fired` flag reset on each cycle. The data model already supports nullable timestamps, so the change is mostly a state machine and a UI dropdown.
Drag-Reorder for Notes — Note shelves and individual cards will support drag-and-drop reordering. The current sort is fixed (pinned first, then by updated descending), so this opens the door to user-curated priority ordering. svelte-dnd-action or a hand-rolled HTML5 DnD wrapper are both on the table.
Marketplace Live Pricing — Pulling live BDO marketplace prices will let the crafting planner show profit margins ("is this worth crafting vs. buying?") and the grinding tracker show real silver/hour from logged loot. The Rust backend already does HTTP fetching for announcements, so the data pipeline is straightforward — the remaining question is which community marketplace API to wire against.