Refine Lab banner copy, stance to Regular/Goofy, full profile carry-over chips on Become-Skater, remove Back to Leaderboard from profile

- Lab "Just a skater?" banner: drop redundant "→ join the directory" trailer (arrow icon already present)
- Skater stances distinct emojis (🛹 Regular / 🤙 Goofy); already limited to Regular & Goofy
- Become-Skater: fix missing ShieldCheck/Zap imports; show ALL carried-over kind-0 fields (photo, name, bio, website, nip05, zaps) as read-only chips
- Profile (NIP19Page): remove hardcoded "Back to Leaderboard" link and unused ArrowLeft import

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
shakespeare.diy 2026-09-02 21:28:55 +07:00
parent 67d8a24d73
commit 3ef11eda61
5 changed files with 54 additions and 30 deletions

2
NIP.md
View file

@ -1506,7 +1506,7 @@ exists purely for community discovery.
["t", "skateskater"],
["t", "skateboarding"],
["alt", "SkateSpots skater: <display name>"],
["stance", "regular | goofy | switch | mongo"],
["stance", "regular | goofy"],
["level", "grom | intermediate | advanced | ripper"],
["t", "<style>"],
["years", "<years skating>"],

View file

@ -294,15 +294,13 @@ export function isValidLightningAddress(value: string | undefined | null): value
// skater*. Publishing this (opt-in) is what lets someone appear in the /skaters
// directory — a plain kind-0 profile is NOT enough (that's the anti-spam wall).
export type SkaterStance = 'regular' | 'goofy' | 'switch' | 'mongo';
export type SkaterStance = 'regular' | 'goofy';
export type SkaterStyle = 'street' | 'park' | 'vert' | 'transition' | 'bowl' | 'cruising' | 'downhill' | 'freestyle' | 'ledges' | 'stairs' | 'diy';
export type SkaterLevel = 'grom' | 'intermediate' | 'advanced' | 'ripper';
export const SKATER_STANCES: Record<SkaterStance, { label: string; emoji: string }> = {
regular: { label: 'Regular', emoji: '🦶' },
goofy: { label: 'Goofy', emoji: '🦶' },
switch: { label: 'Switch', emoji: '🔄' },
mongo: { label: 'Mongo', emoji: '😅' },
regular: { label: 'Regular', emoji: '🛹' },
goofy: { label: 'Goofy', emoji: '🤙' },
};
export const SKATER_STYLES: Record<SkaterStyle, { label: string; emoji: string }> = {

View file

@ -28,7 +28,7 @@ import {
} from '@/lib/types';
import { genUserName } from '@/lib/genUserName';
import { cn } from '@/lib/utils';
import { Upload, X, Loader2, ArrowLeft, MapPin, PersonStanding, Sparkles, UserRound } from 'lucide-react';
import { Upload, X, Loader2, ArrowLeft, MapPin, PersonStanding, Sparkles, UserRound, ShieldCheck, Zap, FileText, Globe } from 'lucide-react';
export default function BecomeSkaterPage() {
useSeoMeta({
@ -50,6 +50,8 @@ export default function BecomeSkaterPage() {
// kind-0 values we borrow from so we never re-ask for what the profile has.
const kind0About = metadata?.about ?? '';
const kind0Website = metadata?.website ?? '';
const kind0Nip05 = metadata?.nip05 ?? '';
const kind0Lud16 = metadata?.lud16 ?? '';
const [bio, setBio] = useState('');
const [location, setLocation] = useState('');
@ -236,17 +238,51 @@ export default function BecomeSkaterPage() {
</div>
</div>
{/* Linked-to-your-profile notice */}
<Link
to="/settings?section=profile"
className="group flex items-center gap-3 rounded-xl border border-white/10 bg-white/5 p-3.5 mb-6 hover:border-white/25 transition-colors"
>
<UserRound className="h-5 w-5 text-gray-400 flex-shrink-0" />
<p className="text-xs text-gray-400 flex-1 leading-relaxed">
This is your <span className="text-white font-bold">skate layer</span>, built on your Nostr profile.
Your name, photo & bio come from there — <span className="text-[#ccff00] font-bold group-hover:underline">edit your full profile</span> to change them everywhere.
</p>
</Link>
{/* Linked-to-your-profile notice + read-only summary of borrowed fields */}
<div className="rounded-xl border border-white/10 bg-white/5 p-3.5 mb-6 space-y-3">
<Link
to="/settings?section=profile"
className="group flex items-center gap-3"
>
<UserRound className="h-5 w-5 text-gray-400 flex-shrink-0" />
<p className="text-xs text-gray-400 flex-1 leading-relaxed">
This is your <span className="text-white font-bold">skate layer</span>, built on your Nostr profile.
Your name, photo, bio, lightning &amp; verification come from there — <span className="text-[#ccff00] font-bold group-hover:underline">edit your full profile</span> to change them everywhere.
</p>
</Link>
{/* Chips showing EVERYTHING carried over from your kind-0 profile */}
<div className="flex flex-wrap items-center gap-1.5 pl-8">
{avatar && (
<span className="inline-flex items-center gap-1 text-[10px] font-bold px-2 py-1 rounded-full bg-black/40 border border-white/10 text-gray-300">
<img src={avatar} alt="" className="h-3.5 w-3.5 rounded-full object-cover" /> Photo
</span>
)}
<span className="inline-flex items-center gap-1 text-[10px] font-bold px-2 py-1 rounded-full bg-black/40 border border-white/10 text-gray-300">
<UserRound className="h-3 w-3 text-[#ff0040]" /> {displayName}
</span>
{kind0About.trim() && (
<span className="inline-flex items-center gap-1 text-[10px] font-bold px-2 py-1 rounded-full bg-black/40 border border-white/10 text-gray-300">
<FileText className="h-3 w-3 text-gray-400" /> Bio
</span>
)}
{kind0Website.trim() && (
<span className="inline-flex items-center gap-1 text-[10px] font-bold px-2 py-1 rounded-full bg-black/40 border border-white/10 text-gray-300">
<Globe className="h-3 w-3 text-sky-400" /> Website
</span>
)}
{kind0Nip05 && (
<span className="inline-flex items-center gap-1 text-[10px] font-bold px-2 py-1 rounded-full bg-black/40 border border-white/10 text-gray-300">
<ShieldCheck className="h-3 w-3 text-[#ccff00]" /> {kind0Nip05}
</span>
)}
{kind0Lud16 && (
<span className="inline-flex items-center gap-1 text-[10px] font-bold px-2 py-1 rounded-full bg-black/40 border border-white/10 text-gray-300">
<Zap className="h-3 w-3 text-yellow-400" /> Zaps on
</span>
)}
</div>
</div>
{loadingExisting ? (
<div className="flex items-center justify-center py-16 text-gray-500">

View file

@ -1305,10 +1305,10 @@ export default function LabPage() {
</div>
<div className="min-w-0 flex-1">
<p className="font-black uppercase text-sm leading-tight">
Just a <span className="text-[#ff0040]">skater</span>? Not a pro?
Just a <span className="text-[#ff0040]">skater</span>?
</p>
<p className="text-xs text-gray-400 mt-0.5">
The Lab is for services. Browse & join the whole skater community →
The Lab is for services. Browse &amp; join the whole skater community
</p>
</div>
<ArrowRight className="h-5 w-5 text-gray-500 group-hover:text-[#ff0040] group-hover:translate-x-0.5 transition-all flex-shrink-0" />

View file

@ -27,7 +27,6 @@ import {
Zap,
Calendar,
ExternalLink,
ArrowLeft,
Copy,
Check,
Users,
@ -129,15 +128,6 @@ function ProfilePage({ pubkey }: { pubkey: string }) {
return (
<Layout>
<div className="container px-4 py-6 max-w-4xl">
{/* Back Button */}
<Link
to="/bounties"
className="inline-flex items-center text-gray-400 hover:text-white transition-colors mb-4"
>
<ArrowLeft className="h-4 w-4 mr-2" />
Back to Leaderboard
</Link>
{/* Banner */}
<div className="relative h-32 sm:h-48 rounded-xl overflow-hidden bg-gradient-to-br from-[#ff0040]/30 to-[#ccff00]/20 mb-4">
{banner && (