diff --git a/frontend/components/TeamCard.vue b/frontend/components/TeamCard.vue
new file mode 100644
index 0000000..a8b3297
--- /dev/null
+++ b/frontend/components/TeamCard.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+ Collaborators can help manage this event. Owners can invite + change roles;
+ editors can manage guests + send messages; viewers can read but not change.
+
+
+ {{ error }}
+
+ Loading team…
+
+
+
+
+
{{ c.name || c.email }}
+
{{ c.email }}
+
+
+
changeRole(c, ((e.target as HTMLSelectElement).value as any))"
+ >
+ Owner
+ Editor
+ Viewer
+
+
{{ c.role }}
+
+
+
+
+
+
+
+
+
+ No collaborators yet.
+
+
+
Pending invitations
+
+
+
+
{{ p.email }}
+
+ {{ p.role }} · expires {{ fmtDate(p.expires_at) }}
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
Invite a collaborator
+
+ They'll get an email with a link that's valid for 7 days. If they don't have a
+ GuestGuard account yet, they'll be prompted to create one.
+
+
+
+
+
+
+
diff --git a/frontend/pages/dashboard/events/[id].vue b/frontend/pages/dashboard/events/[id].vue
index 0bc2cf9..e145d97 100644
--- a/frontend/pages/dashboard/events/[id].vue
+++ b/frontend/pages/dashboard/events/[id].vue
@@ -35,6 +35,9 @@ interface EventDetail {
status: string
created_at: string
updated_at: string
+ // Tier 2 Block C — caller's role on this event. The dashboard branches
+ // UI affordances off this rather than the legacy host_id check.
+ your_role?: 'owner' | 'editor' | 'viewer'
}
interface IssuedToken {
@@ -1117,6 +1120,12 @@ function checkLabel(band?: string): string {
+
+
+
+
+