diff --git a/src/lib/components/admin/DropdownSelectField.svelte b/src/lib/components/admin/DropdownSelectField.svelte
new file mode 100644
index 0000000..8c7bd89
--- /dev/null
+++ b/src/lib/components/admin/DropdownSelectField.svelte
@@ -0,0 +1,159 @@
+
+
+
+ {#snippet children()}
+
+
+
+ {#if isOpen}
+
+ {#each options as option}
+ handleSelect(option.value)}
+ />
+ {/each}
+
+ {/if}
+
+ {/snippet}
+
+
+
diff --git a/src/lib/components/admin/StatusPicker.svelte b/src/lib/components/admin/StatusPicker.svelte
new file mode 100644
index 0000000..5b715c8
--- /dev/null
+++ b/src/lib/components/admin/StatusPicker.svelte
@@ -0,0 +1,189 @@
+
+
+
+
+
+ {#if isOpen}
+
+ {#each availableStatuses as status}
+ {#if status.value !== currentStatus}
+ handleStatusChange(status.value)}>
+ {status.label}
+
+ {/if}
+ {/each}
+
+ {#if viewUrl && currentStatus === 'published'}
+
+
+ View on site
+
+ {/if}
+
+ {/if}
+
+
+
diff --git a/src/lib/utils/time.ts b/src/lib/utils/time.ts
new file mode 100644
index 0000000..8e945d6
--- /dev/null
+++ b/src/lib/utils/time.ts
@@ -0,0 +1,27 @@
+/**
+ * Format a date as a relative time string (e.g., "2 minutes ago")
+ * @param date - The date to format
+ * @returns A human-readable relative time string
+ */
+export function formatTimeAgo(date: Date | string): string {
+ const now = new Date()
+ const past = new Date(date)
+ const seconds = Math.floor((now.getTime() - past.getTime()) / 1000)
+
+ if (seconds < 10) return 'just now'
+ if (seconds < 60) return `${seconds} seconds ago`
+
+ const minutes = Math.floor(seconds / 60)
+ if (minutes < 60) return minutes === 1 ? '1 minute ago' : `${minutes} minutes ago`
+
+ const hours = Math.floor(minutes / 60)
+ if (hours < 24) return hours === 1 ? '1 hour ago' : `${hours} hours ago`
+
+ // For saves older than 24 hours, show formatted date
+ return past.toLocaleDateString(undefined, {
+ month: 'short',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: '2-digit'
+ })
+}