feat: Add Web Push notifications and multiple UX improvements
continuous-integration/drone/push Build is failing

- Add PWA manifest and service worker for push notifications
- Implement VAPID key generation and push subscription management
- Add push notification API endpoints (/api/push/*)
- Add push_subscriptions table to database schema
- Update notification settings UI with push support and iOS hints
- Fix translation issue showing "{ task } created" - add missing keys
- Fix mobile sidebar visibility for iOS home screen app
- Change default task filter from "all" to "open" (excludes done tasks)
- Add "Open" filter option to show only todo + inProgress tasks
This commit is contained in:
Paul Nothaft
2026-01-19 20:53:13 +01:00
parent 9bfc9e2f96
commit f91978c078
15 changed files with 1158 additions and 126 deletions
+25
View File
@@ -524,3 +524,28 @@ export const encouragementLogs = pgTable("encouragement_logs", {
});
export type EncouragementLog = typeof encouragementLogs.$inferSelect;
// ============================================
// PUSH NOTIFICATIONS
// ============================================
// Push Subscriptions - Store Web Push subscriptions for each user/device
export const pushSubscriptions = pgTable("push_subscriptions", {
id: varchar("id").primaryKey().default(sql`gen_random_uuid()`),
userId: varchar("user_id").references(() => users.id).notNull(),
endpoint: text("endpoint").notNull().unique(),
p256dh: text("p256dh").notNull(), // Public key
auth: text("auth").notNull(), // Auth secret
userAgent: text("user_agent"), // To identify device
createdAt: timestamp("created_at").defaultNow(),
lastUsedAt: timestamp("last_used_at").defaultNow(),
});
export const insertPushSubscriptionSchema = createInsertSchema(pushSubscriptions).omit({
id: true,
createdAt: true,
lastUsedAt: true,
});
export type InsertPushSubscription = z.infer<typeof insertPushSubscriptionSchema>;
export type PushSubscription = typeof pushSubscriptions.$inferSelect;