From f5e4da10ce1847f003013b87f812fafb617de1a5 Mon Sep 17 00:00:00 2001
From: Thompson <140930314+Godbrand0@users.noreply.github.com>
Date: Mon, 28 Sep 2026 18:23:28 -0400
Subject: [PATCH] Require signed ownership proof for wallet linking; add
non-color cues to status badges
Wallet (#32): linking a Stellar address now runs challenge -> Freighter signMessage -> PATCH with signature. A Freighter account that differs from the profile's address is held pending until the user explicitly confirms, and AuthUser.stellarAddress overrides a stale cached address on load.
Badges (#49): every status/difficulty badge gets a distinct icon; paid is the only solid-filled badge (vs. funded's tinted lock); open/refunded use dashed outlines. Darker text shades and a WCAG AA contrast test cover all pairs in both themes.
---
src/app/connect/ConnectPanel.tsx | 28 +++++
src/components/ui/Badge.contrast.test.ts | 57 +++++++++
src/components/ui/Badge.test.tsx | 30 +++++
src/components/ui/Badge.tsx | 134 ++++++++++++++++++---
src/context/WalletContext.test.tsx | 119 +++++++++++++++++--
src/context/WalletContext.tsx | 145 ++++++++++++++++++++---
src/lib/messages.ts | 5 +
src/lib/wallet.ts | 35 ++++++
8 files changed, 509 insertions(+), 44 deletions(-)
create mode 100644 src/components/ui/Badge.contrast.test.ts
diff --git a/src/app/connect/ConnectPanel.tsx b/src/app/connect/ConnectPanel.tsx
index ec385a3..3aea880 100644
--- a/src/app/connect/ConnectPanel.tsx
+++ b/src/app/connect/ConnectPanel.tsx
@@ -62,6 +62,9 @@ export function ConnectPanel() {
error,
initializing: walletInitializing,
linkState,
+ pendingRelinkAddress,
+ confirmRelink,
+ cancelRelink,
connect,
disconnect,
} = useWallet();
@@ -229,6 +232,31 @@ export function ConnectPanel() {
)}
+ {pendingRelinkAddress && (
+
+
+ {messages["connect.wallet.relinkTitle"]}
+
+
+ {t("connect.wallet.relinkBody", {
+ address: `${pendingRelinkAddress.slice(0, 4)}...${pendingRelinkAddress.slice(-4)}`,
+ onFile: `${user?.stellarAddress?.slice(0, 4)}...${user?.stellarAddress?.slice(-4)}`,
+ })}
+
+
+
+
+
+
+ )}