+ Gesamt: {{ waitlistStats.total }} · Updates: {{ waitlistStats.updates }} · Aktiviert: {{ waitlistStats.activated }} +
+Warteliste wird geladen…
+Keine Wartelisten-Einträge gefunden.
+ +LLM Decision Trace
+LLM Decision Summary
Next State
@@ -592,6 +752,57 @@OpenAI Decision Calls
+Request
+{{ formatJson(call.request) }}
+ Response
+{{ formatJson(call.response) }}
+ Raw Response
+{{ call.rawResponseText }}
+ Fallback aktiviert
++ Grund: {{ entry.metadata.decisionTrace.fallback.reason || 'unbekannt' }} + + · Pfad: {{ entry.metadata.decisionTrace.fallback.selected }} + +
+Metadata
{{ formatJson(entry.metadata) }}
@@ -786,6 +997,31 @@ interface LogsResponse {
pagination: { total: number; page: number; pageSize: number; pages: number }
}
+interface WaitlistEntryItem {
+ id: string
+ email: string
+ name?: string
+ notes?: string
+ source?: string
+ joinedAt: string
+ activatedAt?: string
+ wantsProductUpdates: boolean
+ updatesOptedInAt?: string
+}
+
+interface WaitlistStatsSummary {
+ total: number
+ updates: number
+ activated: number
+ pending: number
+}
+
+interface WaitlistResponse {
+ items: WaitlistEntryItem[]
+ pagination: { total: number; page: number; pageSize: number; pages: number }
+ stats: WaitlistStatsSummary
+}
+
interface CreateInviteResponse {
success: boolean
invitation: {
@@ -802,7 +1038,7 @@ useHead({ title: 'Admin • OpenSquawk' })
const auth = useAuthStore()
const api = useApi()
-const activeTab = ref<'overview' | 'users' | 'invitations' | 'logs'>('overview')
+const activeTab = ref<'overview' | 'users' | 'invitations' | 'waitlist' | 'logs'>('overview')
const refreshing = ref(false)
const overview = ref