From d03ac5394d2d64fa2b96d2d6271639895441773e Mon Sep 17 00:00:00 2001 From: babblebey Date: Mon, 13 Jul 2026 20:05:18 +0100 Subject: [PATCH 1/7] feat(invite): update claim page layout and improve user messaging --- src/app/auth/claim/[token]/page.tsx | 47 ++++++++++++++++++----------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/app/auth/claim/[token]/page.tsx b/src/app/auth/claim/[token]/page.tsx index cc7616f..621e5bd 100644 --- a/src/app/auth/claim/[token]/page.tsx +++ b/src/app/auth/claim/[token]/page.tsx @@ -3,15 +3,16 @@ import Link from "next/link"; import { useParams, useRouter } from "next/navigation"; import { useState } from "react"; -import { AlertCircle, ShieldCheck } from "~/components/ui/icons"; +import { AlertCircle } from "~/components/ui/icons"; import { ThemeToggle } from "~/components/theme-toggle"; import { beginNavigationProgress } from "~/components/nav/navigation-progress"; import { Alert, AlertDescription, AlertTitle } from "~/components/ui/alert"; +import { Avatar, AvatarFallback, AvatarImage } from "~/components/ui/avatar"; import { Button } from "~/components/ui/button"; import { Input } from "~/components/ui/input"; import { Skeleton } from "~/components/ui/skeleton"; -import { formatFamilyDisplayName } from "~/lib/family-name"; +import { formatFamilyLockup } from "~/lib/family-name"; import { api } from "~/trpc/react"; function getClaimErrorMessage(error: unknown) { @@ -35,6 +36,20 @@ function getClaimErrorState(errorMessage: string | null) { return null; } +function getInitials(name: string): string { + const normalized = name.trim(); + if (!normalized) { + return "?"; + } + + const parts = normalized.split(/\s+/).filter(Boolean); + if (parts.length === 1) { + return parts[0]!.slice(0, 1).toUpperCase(); + } + + return `${parts[0]!.slice(0, 1)}${parts[parts.length - 1]!.slice(0, 1)}`.toUpperCase(); +} + export default function ClaimAccountPage() { const router = useRouter(); const params = useParams<{ token: string }>(); @@ -97,27 +112,25 @@ export default function ClaimAccountPage() {

- Claim family profile + Claim your profile

- Confirm your details to activate an existing family profile. + Confirm your details to activate your profile in {formatFamilyLockup(claimPreviewQuery.data.family.name)}.

-
-
-
- -
-

{claimPreviewQuery.data.member.name}

-

{formatFamilyDisplayName(claimPreviewQuery.data.family.name)}

-

Prepared by a family admin

-

- Claiming this link will activate this existing profile instead of creating a duplicate person. -

-
+
+ + + + {getInitials(claimPreviewQuery.data.member.name)} + + +

{claimPreviewQuery.data.member.name}

From d1e1a52e871e90d1b8fc04770a69e352d4df18ae Mon Sep 17 00:00:00 2001 From: babblebey Date: Mon, 13 Jul 2026 20:10:39 +0100 Subject: [PATCH 2/7] fix(feed): open post composer on click create first memory button --- src/app/(app)/page.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/(app)/page.tsx b/src/app/(app)/page.tsx index f005f85..210e9f0 100644 --- a/src/app/(app)/page.tsx +++ b/src/app/(app)/page.tsx @@ -6,6 +6,7 @@ import { useMemo } from "react"; import { Alert, AlertDescription, AlertTitle } from "~/components/ui/alert"; import { ComposerEntry } from "~/components/feed/composer-entry"; +import { useGlobalComposer } from "~/components/feed/global-composer-provider"; import { PostCard } from "~/components/feed/post-card"; import type { PostCardData } from "~/components/feed/post-card"; import { Skeleton } from "~/components/ui/skeleton"; @@ -101,7 +102,7 @@ function mapFeedItemToPostCardData(item: { }; } -function FeedEmptyState() { +function FeedEmptyState({ onCreateFirstMemory }: { onCreateFirstMemory: () => void }) { return (
@@ -111,7 +112,7 @@ function FeedEmptyState() {

Start your family timeline by creating the first memory post.

-
@@ -170,6 +171,7 @@ function FeedSkeletonList() { } export default function FeedPage() { + const { openComposer } = useGlobalComposer(); const managementContext = api.family.getManagementContext.useQuery(undefined, { retry: false, refetchOnWindowFocus: false, @@ -291,7 +293,7 @@ export default function FeedPage() { isAdmin={isAdmin} /> ) : ( - + openComposer()} /> )}
From f9329880aacae14cc5dc70fc1bc7d77028edd467 Mon Sep 17 00:00:00 2001 From: babblebey Date: Mon, 13 Jul 2026 20:31:02 +0100 Subject: [PATCH 3/7] fix(layout): adjust padding for responsive design in layout and sidebar components --- src/app/(app)/layout.tsx | 2 +- src/components/nav/desktop-sidebar.tsx | 61 +++++++++++++++----------- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/app/(app)/layout.tsx b/src/app/(app)/layout.tsx index 639bae9..c0fd70e 100644 --- a/src/app/(app)/layout.tsx +++ b/src/app/(app)/layout.tsx @@ -61,7 +61,7 @@ export default async function AppLayout({ children }: { children: React.ReactNod
-
+
diff --git a/src/components/nav/desktop-sidebar.tsx b/src/components/nav/desktop-sidebar.tsx index ea77096..89c86c8 100644 --- a/src/components/nav/desktop-sidebar.tsx +++ b/src/components/nav/desktop-sidebar.tsx @@ -56,6 +56,7 @@ export function DesktopSidebar({ primaryLockup }: { primaryLockup: string }) { const selectedLogotypeFontName = parsedBrandingConfig?.logotype.enabled ? (parsedBrandingConfig.logotype.fontName ?? null) : null; const selectedFamilyName = normalizeFamilyNameInput(managementContext.data?.family?.name ?? "") || "Family"; + const selectedFamilyInitial = Array.from(selectedFamilyName)[0] ?? "F"; const unreadCountQuery = api.notification.getUnreadCount.useQuery( { familyId: familyId ?? "", @@ -94,28 +95,37 @@ export function DesktopSidebar({ primaryLockup }: { primaryLockup: string }) { const unreadLabel = formatUnreadBadgeCount(unreadCountQuery.data?.count ?? 0); return ( -