The monitoring feature is already available in the application,
no need for a hardcoded external IP link in the header.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rebrand hero section with OasisRelay title, gradient text, and uptime counter
- Add transparent-to-frosted-glass nav bar effect on home page scroll
- Add grid square background pattern on home page
- Simplify nav items to: 首页, 控制台, 定价, 文档
- Change 分组监控 to Activity icon button opening external status page
- Switch font family to PingFang SC with cross-platform fallbacks
- Fix username visibility in light mode nav bar
- Restyle login/register forms and home page sections
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix data race on gin.DefaultWriter during log rotation by adding LogWriterMu
- Report partial failure when some log files fail to delete instead of always returning success
- Fix misleading "logging disabled" banner shown before API responds
- Fix en.json translation for numeric validation message
Add API endpoints (GET/DELETE /api/performance/logs) to list and clean up
server log files by count or by age. Track the active log file path in
the logger to prevent deleting the currently open log. Add a management
UI section in the performance settings page with log directory info,
file statistics, and cleanup controls. Includes i18n translations for
all supported languages (en, fr, ja, ru, vi, zh-CN, zh-TW).
When only Waffo was enabled, the generic payment method list showed a
"Waffo (Global Payment)" button calling preTopUp (epay flow) instead of
waffoTopUp, while the dedicated "Waffo 充值" section had the correct buttons.
Fix: filter waffo entries from generic list and hide the "选择支付方式"
column when no non-waffo methods exist.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The waffoTopUp function was validating against the shared minTopUp
which could be set by epay/stripe when multiple gateways are enabled,
causing mismatch with backend's WaffoMinTopUp check.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The backend defines TopUpStatusFailed = "failed" but the frontend
STATUS_CONFIG was missing this status, causing raw text display
instead of a styled danger badge.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>