import { redirect } from 'next/navigation' import { createClient } from '@/lib/supabase/server' import { ProfileForm } from './profile-form' import { AffiliationsForm } from './affiliations-form' 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 (
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()}
)}You hold a privileged role ({member.role}). Please disclose any outside affiliations that could conflict with space governance. Disclosure is visible to other members.