feat: Add Web Push notifications and multiple UX improvements
continuous-integration/drone/push Build is failing
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user