feat(phase3): import/export, sparklines, user theme overrides

- JSON import/export with conflict resolution (skip/overwrite) + admin UI
- Ping history sparklines on AppWidget and AppCard (24h, 288 points)
- Hourly cleanup job for old AppStatus records
- User theme preferences (hue, saturation, mode, background, locale)
- Settings page with ThemeCustomizer (sliders, toggles, live preview)
- Prisma migration for user preference fields
- i18n translations for all new strings (EN/RU)
This commit is contained in:
2026-03-25 00:51:01 +03:00
parent d155b3ce4a
commit c6a7de895d
30 changed files with 1633 additions and 44 deletions
+31 -1
View File
@@ -127,6 +127,8 @@
"app.healthcheck_timeout": "Timeout (ms)",
"app.healthcheck_interval": "Interval (seconds)",
"app.icon_board_label": "Icon (Lucide name)",
"app.uptime": "uptime",
"app.history_loading": "Loading history...",
"admin.panel": "Admin Panel",
"admin.users": "Users",
@@ -213,6 +215,23 @@
"admin.perm_none": "No permissions configured.",
"admin.perm_search_placeholder": "Type to search...",
"admin.import_export_title": "Import / Export",
"admin.import_export_description": "Export all data (apps, boards, groups, settings) as JSON, or import from a previously exported file.",
"admin.export_section": "Export Data",
"admin.export_button": "Export JSON",
"admin.export_exporting": "Exporting...",
"admin.export_success": "Export downloaded successfully.",
"admin.import_section": "Import Data",
"admin.import_select_file": "Select a JSON export file",
"admin.import_preview": "Preview",
"admin.import_mode_label": "Conflict Resolution",
"admin.import_mode_skip": "Skip existing (keep current data)",
"admin.import_mode_overwrite": "Overwrite existing (replace with imported data)",
"admin.import_button": "Import",
"admin.import_importing": "Importing...",
"admin.import_success": "Import completed.",
"admin.import_invalid_json": "Selected file is not valid JSON.",
"search.placeholder": "Search apps and boards...",
"search.trigger": "Search...",
"search.min_chars": "Type at least 2 characters to search",
@@ -261,5 +280,16 @@
"home.view_boards": "View Boards",
"home.browse_apps": "Browse Apps",
"language.label": "Language"
"language.label": "Language",
"settings.title": "Settings",
"settings.theme": "Theme Mode",
"settings.primary_color": "Primary Color",
"settings.hue": "Hue",
"settings.saturation": "Saturation",
"settings.background": "Background Effect",
"settings.language": "Language",
"settings.save": "Save Preferences",
"settings.saving": "Saving...",
"settings.saved": "Preferences saved!"
}