import { redirect } from 'next/navigation' import { createClient } from '@/lib/supabase/server' import { ProfileForm } from './profile-form' import { AffiliationsForm } from './affiliations-form' import { PageTitle } from '@/components/ui/page-title' export const dynamic = 'force-dynamic' export default async function ProfilePage() { const supabase = await createClient() const { data: { user } } = await supabase.auth.getUser() if (!user) redirect('/login') const { data: memberRaw } = await supabase .from('space_members') .select('*') .eq('user_id', user.id) .in('status', ['current', 'unverified', 'late']) .maybeSingle() if (!memberRaw) redirect('/signup') const member = memberRaw as unknown as { id: string display_name: string | null handle: string | null phone: string | null role: string tier: string skills: string[] interests: string[] willing_to: string[] affiliations: string[] coi_last_disclosed_at: string | null email: string | null } const privilegedRoles = ['admin', 'board', 'treasurer'] const isPrivileged = privilegedRoles.includes(member.role) return (
My profile

Account

{member.email}

role: {member.role} ยท tier: {member.tier}

Role and tier can only be changed by an admin or board member. The privilege-escalation trigger blocks self-edits to those fields at the database level.

Profile

Conflict-of-interest disclosure

{member.coi_last_disclosed_at && (

last disclosed {new Date(member.coi_last_disclosed_at).toLocaleDateString()}

)}
{isPrivileged && !member.coi_last_disclosed_at && (

You hold a privileged role ({member.role}). Please disclose any outside affiliations that could conflict with space governance. Disclosure is visible to other members.

)}
) }