diff --git a/src/components/ProfilePreviewCard.tsx b/src/components/ProfilePreviewCard.tsx
new file mode 100644
index 0000000..f623a96
--- /dev/null
+++ b/src/components/ProfilePreviewCard.tsx
@@ -0,0 +1,86 @@
+import { useState } from 'react';
+import { Link } from 'react-router-dom';
+import { nip19 } from 'nostr-tools';
+import { ExternalLink, ShieldCheck } from 'lucide-react';
+import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
+import { ProfileBadges } from '@/components/ProfileBadges';
+import { useCurrentUser } from '@/hooks/useCurrentUser';
+import { isSkateSpotsNip05, profileBadges } from '@/lib/badges';
+import { cn } from '@/lib/utils';
+
+/**
+ * A live preview of how the signed-in user appears to everyone else — banner,
+ * avatar, handle, bio and badges — shown at the top of the Edit Profile screen
+ * so "how do I look?" has an answer without leaving the page.
+ *
+ * Reads the same kind-0 metadata the form edits, so it reflects the last SAVED
+ * profile (the form's unsaved edits aren't shown; the sticky Save button commits).
+ */
+export function ProfilePreviewCard({ className }: { className?: string }) {
+ const { user, metadata, isLoadingProfile } = useCurrentUser();
+ const [bannerOk, setBannerOk] = useState(true);
+
+ if (!user) return null;
+
+ const name = metadata?.display_name || metadata?.name || '';
+ const initials = (name || user.pubkey.slice(0, 2)).slice(0, 2).toUpperCase();
+ const nip05 = metadata?.nip05;
+ const about = metadata?.about?.trim();
+ const badges = profileBadges(metadata);
+
+ return (
+
+ {/* Banner (falls back to the brand gradient) */}
+
- {/* Quick link to the user's own public profile page */}
-
-
-
- View my public profile
-
-
-
- {!metadata?.name && (
+ {/* How everyone else sees you (last saved profile). */}
+
+
+ {/* Only warn when we truly have NOTHING — an account with a name but no
+ bio is not "not loaded", and the checklist below covers that case. */}
+ {!isLoadingProfile && !metadata && (
-
Profile not loaded from relays.
+
+ We couldn't find a profile on the relays. If you've set one before, try refreshing.
+