diff --git a/admin/src/app/(dashboard)/notification-prefs/page.tsx b/admin/src/app/(dashboard)/notification-prefs/page.tsx index aacf365..92fb22b 100644 --- a/admin/src/app/(dashboard)/notification-prefs/page.tsx +++ b/admin/src/app/(dashboard)/notification-prefs/page.tsx @@ -193,6 +193,15 @@ export default function NotificationPrefsPage() { /> ), }, + { + accessorKey: 'timezone', + header: 'Timezone', + cell: ({ row }) => ( + + {row.original.timezone || -} + + ), + }, { id: 'notification_times', header: () => ( diff --git a/admin/src/app/(dashboard)/users/[id]/client.tsx b/admin/src/app/(dashboard)/users/[id]/client.tsx index f0045e6..d1fd55b 100644 --- a/admin/src/app/(dashboard)/users/[id]/client.tsx +++ b/admin/src/app/(dashboard)/users/[id]/client.tsx @@ -239,6 +239,12 @@ export function UserDetailClient() {
{new Date(user.date_joined).toLocaleDateString()}
+
+
+ Timezone +
+
{user.timezone || '-'}
+
diff --git a/admin/src/lib/api.ts b/admin/src/lib/api.ts index 11a2bec..b272371 100644 --- a/admin/src/lib/api.ts +++ b/admin/src/lib/api.ts @@ -652,6 +652,8 @@ export interface NotificationPreference { task_overdue_hour: number | null; warranty_expiring_hour: number | null; daily_digest_hour: number | null; + // User timezone (IANA name, auto-captured from X-Timezone header) + timezone: string | null; created_at: string; updated_at: string; } diff --git a/admin/src/types/models.ts b/admin/src/types/models.ts index 62007a9..5ae7945 100644 --- a/admin/src/types/models.ts +++ b/admin/src/types/models.ts @@ -28,6 +28,7 @@ export interface User { export interface UserDetail extends User { residences?: ResidenceSummary[]; devices?: DeviceSummary[]; + timezone?: string; // IANA timezone (auto-captured from mobile app) } export interface ResidenceSummary {