Added notification to different providers#191
Conversation
Create a /settings route (+layout, +page) implementing a config form using superforms and Zod, theme/locale handling, and persistence via saveConfig. Add SettingsFeatureToggle, SettingsSectionHeader and SettingsSelectField components and minor Header import cleanup. Add AGENTS.md guide for AI coding agents and add the "nav_settings" i18n key to multiple locale files.
Support testing and sending for webhook and Gotify; refactor provider UI into per-type forms (Email, Webhook, Gotify). Update domain schemas, backend services and API routes to handle multiple provider types. Add config helper and boolean config handling and adjust settings UI/store.
There was a problem hiding this comment.
Pull request overview
Introduces a new notification system with configurable delivery providers (email/webhook/gotify) and updates the UI to consume API-backed notifications and manage provider settings.
Changes:
- Adds notification + notification-provider domain models (Zod schemas/types) and exports them via the domain index.
- Reworks the notifications dropdown to fetch/mark/clear notifications via API and adds provider-management UI (forms, testing dialog, cron schedule input).
- Adds DB migration for notifications/providers, server startup scheduler initialization, and various formatting/i18n/message updates.
Reviewed changes
Copilot reviewed 66 out of 442 changed files in this pull request and generated 20 comments.
Show a summary per file
| File | Description |
|---|---|
| src/lib/domain/reminder.ts | Changes reminder type constants and removes localized label helper. |
| src/lib/domain/notification.ts | Adds notification domain model + Zod schema. |
| src/lib/domain/notification-provider.ts | Adds provider config schemas for email/webhook/gotify. |
| src/lib/domain/index.ts | Re-exports notification domain types/constants. |
| src/lib/domain/config.ts | Adds boolean config key set + notification-related config fields. |
| src/lib/config/env.server.ts | Adds APP_URL + APP_SECRET to server env config. |
| src/lib/components/ui/switch/switch.svelte | Adds a Switch UI wrapper component. |
| src/lib/components/ui/switch/index.ts | Exports Switch component. |
| src/lib/components/ui/form/form-field.svelte | Formatting update to children render call. |
| src/lib/components/ui/form/form-element-field.svelte | Formatting update to children render call. |
| src/lib/components/ui/accordion/index.ts | Adds Accordion component exports. |
| src/lib/components/ui/accordion/accordion.svelte | Adds Accordion Root wrapper. |
| src/lib/components/ui/accordion/accordion-trigger.svelte | Adds Accordion Trigger wrapper. |
| src/lib/components/ui/accordion/accordion-item.svelte | Adds Accordion Item wrapper. |
| src/lib/components/ui/accordion/accordion-content.svelte | Adds Accordion Content wrapper. |
| src/lib/components/layout/Notifications.svelte | Replaces local reminder/alert notifications with API-backed notifications + actions. |
| src/lib/components/layout/Header.svelte | Shows notifications conditionally and routes Settings to /settings. |
| src/lib/components/layout/DashboardTabs.svelte | Formatting-only tab definition changes. |
| src/lib/components/layout/DashboardNav.svelte | Formatting-only nav entry changes. |
| src/lib/components/layout/AppTable.svelte | Formatting-only derived pagination expansion. |
| src/lib/components/feature/vehicle/VehicleDetailsModal.svelte | Formatting-only text wrapping changes. |
| src/lib/components/feature/settings/WebhookProviderForm.svelte | Adds webhook provider config form UI. |
| src/lib/components/feature/settings/TestProviderDialog.svelte | Adds provider test dialog UI + API call. |
| src/lib/components/feature/settings/SettingsSelectField.svelte | Adds reusable select field component. |
| src/lib/components/feature/settings/SettingsSection.svelte | Adds accordion-based settings section wrapper. |
| src/lib/components/feature/settings/SettingsModal.svelte | Formatting-only options list changes. |
| src/lib/components/feature/settings/SettingsForm.svelte | Removes old settings form implementation. |
| src/lib/components/feature/settings/SettingsFeatureToggle.svelte | Adds reusable feature-toggle field component. |
| src/lib/components/feature/settings/SettingFormSection.svelte | Adds accordion item wrapper for settings sections. |
| src/lib/components/feature/settings/ProviderCard.svelte | Adds provider card UI (enable toggle, edit/delete/test actions). |
| src/lib/components/feature/settings/NotificationProvidersSettings.svelte | Adds provider management page section (CRUD, schedule, test/send). |
| src/lib/components/feature/settings/GotifyProviderForm.svelte | Adds gotify provider config form UI. |
| src/lib/components/feature/settings/EmailProviderForm.svelte | Adds email provider config form UI. |
| src/lib/components/feature/settings/CronInput.svelte | Adds cron expression input with presets and basic validation. |
| src/lib/components/feature/reminder/ReminderList.svelte | Minor formatting change for recurrence end date display. |
| src/lib/components/feature/reminder/ReminderForm.svelte | Removes localized reminder label usage; uses REMINDER_TYPES labels + hardcoded strings. |
| src/lib/components/feature/overview/MileageChart.svelte | Formatting-only date formatter expansion. |
| src/lib/components/feature/overview/CostChart.svelte | Formatting-only date formatter expansion. |
| src/lib/components/feature/overview/AreaChart.svelte | Changes skeleton container height class. |
| src/lib/components/feature/maintenance/MaintenanceLogList.svelte | Formatting-only renderSnippet call expansion. |
| src/lib/components/feature/insurance/InsuranceList.svelte | Changes skeleton max-width utility class. |
| src/lib/components/feature/data-export-import/DataExportImport.svelte | Formatting-only title wrapping change. |
| src/lib/components/feature/auth/profile-form.svelte | Formatting-only Zod refine message object expansion. |
| src/lib/components/app/loading.svelte | Formatting-only message wrapping change. |
| src/lib/components/app/DeleteConfirmation.svelte | Formatting-only message wrapping change. |
| src/lib/components/app/AutocompleteInput.svelte | Removes unused i18n import. |
| src/hooks.server.ts | Initializes notification scheduler at server startup. |
| scripts/seed.ts | Adds db seeding script entrypoint. |
| pnpm | Adds a file that appears to contain an accidental shell error output. |
| package.json | Updates deps; adds node-cron/nodemailer and type packages. |
| migrations/meta/_journal.json | Adds migration journal entry for notification system. |
| migrations/meta/20260316065336_snapshot.json | Adds Drizzle snapshot for new migration. |
| migrations/20260316065336_add_notification_system.sql | Adds notifications + notification_providers tables. |
| migrations/20260120190820_config_changes.sql | Adds statement breakpoints to config inserts. |
| messages/ar.json | Adds nav_settings translation. |
| messages/de.json | Adds nav_settings translation. |
| messages/en.json | Removes many existing translations; adds notification mark-all-read strings. |
| messages/es.json | Adds nav_settings translation. |
| messages/fi.json | Adds nav_settings translation. |
| messages/fr.json | Adds nav_settings translation. |
| messages/hi.json | Adds nav_settings translation. |
| messages/hu.json | Removes many existing translations; adds nav_settings translation. |
| messages/it.json | Adds nav_settings translation. |
| AGENTS.md | Adds contributor guide (includes formatting rules). |
| .prettierrc | Switches to spaces (useTabs false) and sets tabWidth=2. |
| .env.example | Adds ENABLE_CRON_JOBS and APP_SECRET docs. |
Comments suppressed due to low confidence (1)
messages/en.json:1
- This file appears to have had a very large number of existing translation keys removed (the JSON now ends almost immediately after the pollution recurrence strings). If Paraglide generates message functions from this file, removing keys will cause compile failures wherever those messages are still referenced. If this was not intentional, restore the missing keys (or re-run the i18n generation workflow without dropping entries).
{
You can also share your feedback on Copilot code review. Take the survey.
There was a problem hiding this comment.
Pull request overview
Adds a notification system with configurable delivery providers (email/webhook/gotify), along with UI updates to display in-app notifications and manage provider settings.
Changes:
- Introduces domain schemas/models for notifications and notification providers (including config validation).
- Adds UI for in-app notifications and provider management (create/edit/test/toggle, schedule input).
- Adds DB migration for notifications/provider tables and wires server startup to initialize a notification scheduler.
Reviewed changes
Copilot reviewed 64 out of 442 changed files in this pull request and generated 17 comments.
Show a summary per file
| File | Description |
|---|---|
| src/lib/domain/notification.ts | Adds notification constants, type, and Zod schema |
| src/lib/domain/notification-provider.ts | Adds provider types and config schemas (email/webhook/gotify) |
| src/lib/domain/index.ts | Re-exports new notification domain types/constants |
| src/lib/domain/config.ts | Adds boolean config key set and new schedule config field |
| src/lib/config/env.server.ts | Adds BASE_URL formatting, introduces APP_SECRET |
| src/lib/components/ui/switch/switch.svelte | Adds Switch wrapper component |
| src/lib/components/ui/switch/index.ts | Switch barrel export |
| src/lib/components/ui/form/form-field.svelte | Formatting/structure change for render snippet |
| src/lib/components/ui/form/form-element-field.svelte | Formatting/structure change for render snippet |
| src/lib/components/ui/accordion/index.ts | Adds Accordion barrel export |
| src/lib/components/ui/accordion/accordion.svelte | Adds Accordion Root wrapper |
| src/lib/components/ui/accordion/accordion-trigger.svelte | Adds Accordion Trigger wrapper |
| src/lib/components/ui/accordion/accordion-item.svelte | Adds Accordion Item wrapper |
| src/lib/components/ui/accordion/accordion-content.svelte | Adds Accordion Content wrapper |
| src/lib/components/layout/Notifications.svelte | Replaces reminder/alert derived notifications with API-backed notifications UI |
| src/lib/components/layout/Header.svelte | Shows notifications conditionally and routes to /settings |
| src/lib/components/layout/DashboardTabs.svelte | Formatting tweak for tabs array |
| src/lib/components/layout/DashboardNav.svelte | Formatting tweak for nav items |
| src/lib/components/layout/AppTable.svelte | Formatting tweak for derived pagination |
| src/lib/components/feature/vehicle/VehicleDetailsModal.svelte | Formatting tweaks |
| src/lib/components/feature/settings/WebhookProviderForm.svelte | Adds webhook provider config form |
| src/lib/components/feature/settings/TestProviderDialog.svelte | Adds provider test dialog |
| src/lib/components/feature/settings/SettingsSelectField.svelte | Adds reusable select field component |
| src/lib/components/feature/settings/SettingsSection.svelte | Adds settings section with accordion layout |
| src/lib/components/feature/settings/SettingsModal.svelte | Formatting tweak for options array |
| src/lib/components/feature/settings/SettingsForm.svelte | Removes old settings sheet form implementation |
| src/lib/components/feature/settings/SettingsFeatureToggle.svelte | Adds reusable feature toggle field |
| src/lib/components/feature/settings/SettingFormSection.svelte | Adds accordion-based form section component |
| src/lib/components/feature/settings/ProviderCard.svelte | Adds provider card (toggle/edit/delete/test) |
| src/lib/components/feature/settings/NotificationProvidersSettings.svelte | Adds provider management page/section and schedule input |
| src/lib/components/feature/settings/GotifyProviderForm.svelte | Adds gotify provider config form |
| src/lib/components/feature/settings/EmailProviderForm.svelte | Adds email provider config form |
| src/lib/components/feature/settings/CronInput.svelte | Adds cron input with presets and basic validation |
| src/lib/components/feature/reminder/ReminderList.svelte | Formatting tweak |
| src/lib/components/feature/reminder/ReminderForm.svelte | Changes reminder type label rendering |
| src/lib/components/feature/overview/MileageChart.svelte | Formatting tweak |
| src/lib/components/feature/overview/CostChart.svelte | Formatting tweak |
| src/lib/components/feature/overview/AreaChart.svelte | Adjusts loading skeleton container height class |
| src/lib/components/feature/maintenance/MaintenanceLogList.svelte | Formatting tweak |
| src/lib/components/feature/insurance/InsuranceList.svelte | Adjusts skeleton max width utility class |
| src/lib/components/feature/data-export-import/DataExportImport.svelte | Formatting tweak |
| src/lib/components/feature/auth/profile-form.svelte | Formatting tweak for refine error objects |
| src/lib/components/app/loading.svelte | Formatting tweak |
| src/lib/components/app/DeleteConfirmation.svelte | Formatting tweak |
| src/hooks.server.ts | Initializes notification scheduler during server startup |
| pnpm | Adds a file that appears to be an accidental shell error capture |
| package.json | Adds nodemailer/node-cron deps and bumps toolchain versions |
| migrations/meta/_journal.json | Registers new migration snapshot entry |
| migrations/meta/20260316065336_snapshot.json | Adds new migration snapshot metadata |
| migrations/20260316065336_add_notification_system.sql | Creates notifications + notification_providers tables |
| migrations/20260120190820_config_changes.sql | Adds statement breakpoints to existing config migration |
| messages/*.json | Adds nav_settings and new notification strings (partial locales) |
| AGENTS.md | Adds developer/agent contribution guide |
| .prettierrc | Switches formatting to spaces (useTabs=false) |
| .env.example | Adds BASE_URL and APP_SECRET examples |
You can also share your feedback on Copilot code review. Take the survey.
No description provided.