- Add Google OAuth sign-in alongside magic link authentication - Username onboarding: require username selection after first sign-in - Public profile pages at /u/[username] with social links (GitHub, X) - Settings page for managing username and social links - Viewer header: unified floating card with project name, @username, breadcrumb - Guest CTA on viewer page prompting sign-in - Show owner avatar + username on community project cards - Redesigned project cards (larger preview, avatar + stats row below) - Consistent navbar across hub and profile pages with GitHub link - Footer with links to GitHub repo and npm packages - Borderless design with natural shadows throughout - Apple corner smoothing (squircle) progressive enhancement - cursor:pointer globally on buttons and links - DB migrations: username, github_url, x_url columns on auth_users - Root-level db:generate/migrate/push/studio scripts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
29 lines
810 B
TypeScript
29 lines
810 B
TypeScript
export const dynamic = 'force-dynamic'
|
|
|
|
import { notFound } from 'next/navigation'
|
|
import { getPublicProfile } from '@/features/community/lib/auth/actions'
|
|
import { getPublicProjectsByUserId } from '@/features/community/lib/projects/actions'
|
|
import { PublicProfilePage } from '@/features/community/components/public-profile-page'
|
|
|
|
export default async function ProfilePage({
|
|
params,
|
|
}: {
|
|
params: Promise<{ username: string }>
|
|
}) {
|
|
const { username } = await params
|
|
const profileResult = await getPublicProfile(username)
|
|
|
|
if (!profileResult.success || !profileResult.data) {
|
|
notFound()
|
|
}
|
|
|
|
const projectsResult = await getPublicProjectsByUserId(profileResult.data.id)
|
|
|
|
return (
|
|
<PublicProfilePage
|
|
profile={profileResult.data}
|
|
projects={projectsResult.data ?? []}
|
|
/>
|
|
)
|
|
}
|