- treat stored locale-specific default templates as fallbacks so switching languages restores the active locale copy instead of preserving stale persisted defaults
- compact unchanged notification template defaults on save and keep the shared template resolver surface consistent across locales
- rebuild notification template preview samples from locale-aware labels and content, and cover the regression with focused shared and web tests
- add shared notification template defaults, validation, and settings persistence for text, markdown, and html groups
- add the settings page editor modal, preview flow, and form wiring with markdown and html first and plain text fallback last
- cover template storage and editor integration with focused shared, api, and web regression tests
- extend shared settings, backend notification routes, and forgot-password or direct-channel delivery so Apprise can sync target lists to a stateful API key and send both broadcast and target-specific test notifications
- add the Apprise targets management modal, settings form handling, locale copy, and focused web/api regression coverage for sync status, validation, and target testing
- document the optional Apprise API deployment and configuration flow in the bilingual readmes and deployment guide without changing the default compose footprint
- extend shared settings, locale resources, backend dispatch, and web settings flows so Bark and NotifyX can be configured, tested, and used as direct notification channels
- add focused apprise-adjacent regression coverage for notification routing, test endpoints, forgot-password eligibility, and settings validation without changing the default deployment shape
- refresh the bilingual README notification lists and keep the English-facing copy aligned with the new channel names and settings summaries
- keep the 1-12 frequency quick picks while allowing custom positive integer values in the subscription form and cover the helper behavior with focused web tests
- add local logo library search plus reopen cache invalidation so saved logo usage counts refresh after creating a subscription
- tighten the related shared copy for custom frequency validation and exchange-rate status wording while locking the locale regressions with shared tests
- change the email sender placeholder to a parameterized format so vue-i18n does not parse the @ sign as linked syntax
- pass the @ glyph from SettingsPage at render time and keep the shared placeholder text compatible with both zh-CN and en-US
- point the web dev build at the shared source entry so locale edits take effect without relying on stale generated dist artifacts
- move shared website-url and schema validation copy onto translation keys and broaden zh-CN and en-US runtime coverage
- add message keys for notification merge, exchange-rate payloads and timezone validation so backend and web helpers can reuse one catalog
- expand shared regression coverage for locale-aware website normalization, fallback lookups and validation key stability
- shorten selected english labels, refine broader en-US wording, and keep the copy changes within locale resources only
- adjust the subscription form footer layout to avoid truncation and button crowding while keeping the related english labels compact
- update reminder copy expectations and set a shared zh-CN default in web vitest so locale-sensitive tests do not drift with navigator or cached preferences
- make dashboard AI summary generation locale-aware across prompts, fallback messages and cached metadata
- regenerate summaries when the cached locale no longer matches the current request locale and reuse the resolved app locale for backend fallbacks
- refresh the statistics summary query on locale changes and extend backend tests for localized summary behavior
- add a dedicated app locale endpoint and move locale persistence from settings to appLocale with env-based defaults
- sync the app shell and login bootstrap flow against the resolved backend locale while keeping localStorage only as a cache
- reject locale updates through PATCH /settings and cover the migration and locale route behavior with regression tests
- add shared locale schemas, key-based message catalogs and locale helpers for zh-CN and en-US
- route API errors, notifications and default AI prompts through locale-aware message lookups with request and settings fallbacks
- cover locale parsing, settings defaults and i18n-aware backend flows with regression tests
- add a public version updates endpoint that reads GitHub releases and filters tags above the current app version
- show a brand-area update dot and release modal in the web app with shared DTOs and query helpers
- cover the endpoint and sidebar indicator flow with regression tests
- add shared schemas, auth routes and channel delivery for password reset verification codes
- gate forgot-password availability on the settings switch plus direct notification channels
- surface login and settings controls in the web app with regression coverage
- add shared ai summary prompt and dto fields for the latest-only summary state
- implement in-memory summary generation, preview caching, and dashboard summary routes
- cover the backend summary flow with route and service tests
- add shared and api contracts for SubTracker backup inspect, commit and export
- add ZIP backup modal and settings entry for backup and migration flows
- remove legacy CSV and JSON subscription export path in favor of backup flow
- add configurable business timezone handling across settings, calendar, notifications, statistics, renewals, and subscription forms
- preserve TZ as the default runtime fallback while letting saved settings override business date calculations
- port Wallos source-timezone preview handling from worker and store imported business dates using the active app timezone
- gate daily refresh cron execution against settings.timezone so low-frequency tasks follow the configured business day
- add SMTP/Resend provider switching plus Server 酱 and Gotify settings, validation, and test endpoints
- keep email config backward compatible while reworking the notification settings grid into a compact 3-column layout
- add local-only light/dark theme preference with a floating sidebar toggle and dark theme styling across cards, pages, charts, logo pickers, and drawers
- tighten notification target URL validation, update exchange rate provider naming, and refresh API/web tests for the new settings and theme behavior
- replace fixed reminder day controls with configurable reminder rule strings for advance and overdue notifications
- add shared parsing and normalization helpers, subscription-level override fields, and default seeded rules
- switch reminder scanning to minute-level rule matching while preserving merged notification behavior
- update settings, subscription forms, detail views, and types to use tooltip-guided rule inputs and normalized save flow
- refresh API and tests to cover the new reminder rule settings, storage, and notification matching behavior
- enforce default admin password change with a blocking post-login flow
- add Telegram bot notification settings and test endpoint
- move Wallos import into Settings and add subscription CSV/JSON export
- enable batch subscription actions for renew, pause, cancel, and guarded delete
- expand frontend and API typing/tests for the new auth, settings, and subscription flows
- add notifyOnDueDay and overdueReminderDays to shared settings schema and defaults
- wire reminder settings through API settings service, notification scan logic, seed data, and tests
- update settings page with 默认提前提醒天数 label, 到期当天提醒 switch, and 过期提醒 multi-select
- show current app version under SubTracker branding and inject VITE_APP_VERSION during web builds
- add GPLv3 LICENSE and update README with license and acknowledgements
- add monthly subscription spend TOP10 to statistics overview and UI
- improve subscriptions pagination with per-page persistence and note-row handling
- make login validation messages friendlier on both client and server
- clarify API-only upgrade flow for static web assets
- move web unit tests into apps/web/tests/unit
- add provider presets for Aliyun Bailian, Tencent Hunyuan, and Volcengine Ark
- switch to explicit vision and structured-output capability flags
- add separate connection and vision test flows
- share the built-in subscription prompt between frontend and backend
- show the built-in prompt directly inside the editable custom prompt field
- keep empty or unchanged prompt values falling back to the built-in default
- add /statistics/budgets endpoint with total and tag budget summaries
- introduce dedicated 预算统计 page and hide its sidebar entry when tag budgets are disabled
- move tag monthly budget editing into a dedicated modal on the budget page
- add dashboard tag budget overview cards when tag budgets are enabled
- remove duplicate upcoming renewals table from 费用统计 and keep that info on the dashboard
- invalidate menu and statistics queries after settings changes so budget navigation updates immediately
- default login sessions to non-persistent browser storage unless remember-me is enabled
- add remember-me checkbox to login page and load configurable remember duration from the server
- add rememberSessionDays to settings and persist it through the shared settings schema
- expose login options endpoint for unauthenticated clients
- move sidebar collapse trigger higher for long single-page layouts
- unify calendar events with projected renewal generation across a date range
- add shared projected renewal service and unit coverage for monthly, weekly, expired, and filtered states
- update statistics trend and upcoming-by-day aggregation to reuse projected events
- keep calendar summary, list view, and day detail on the same predicted event source
- refresh shared/web statistics types for projected trend metadata and distribution charts
- replace legacy category-based subscription flow with tag-based models, routes, types and UI management
- rebuild Prisma schema around Tag and SubscriptionTag, remove legacy category relation fields, and reseed defaults
- add unified Wallos import inspect/commit flow for JSON, SQLite and ZIP packages with ZIP logo ingestion and DB-version compatibility
- add auto-renew execution in scheduler plus payment record drawer entry in subscription actions
- rename user-facing renewal wording to 续订 in key views and align subscription form with tag selection and auto-renew
- improve logo handling with local library support, remote import persistence, and ZIP asset matching fallback