SkateSpots/src/pages/BecomeJudgePage.tsx
shakespeare.diy 8ae852f1b8 Add Judges tab to The Lab
- Flesh out SkateJudge as a full craft-based Lab profile (parseCraftBase),
  with JUDGE_FORMAT / SPECIALTY / LEVEL label sets covering Game of S.K.A.T.E.,
  best trick, jams, contests, am series, world tour stops, etc.
- Wire judge into useLabProfiles (union type, self-tag, parse case)
- Add "judging" ServiceType to LabPage: tab, accent, filter sections, empty
  state, counts, profile card icon, and ?craft=judging deep link
- New BecomeJudgePage + /become-judge route + FAB entry
- CoachDetailPage renders judge profiles (accent, icon, labels, noun, title)
- Community Stats "Judges" card now links to /lab?craft=judging
- Document kind 35012 (skatejudge) in NIP.md

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-08-27 15:30:43 +07:00

50 lines
1.8 KiB
TypeScript

import { useSeoMeta } from '@unhead/react';
import { Gavel } from 'lucide-react';
import { CraftProfileForm } from '@/components/CraftProfileForm';
import {
SKATE_JUDGE_KIND,
JUDGE_FORMAT_LABELS,
JUDGE_SPECIALTY_LABELS,
JUDGE_LEVEL_LABELS,
} from '@/lib/types';
export default function BecomeJudgePage() {
useSeoMeta({
title: 'Judge Skate Events - SkateSpots',
description:
'List yourself as a skate event judge — Game of S.K.A.T.E., best trick jams, contests, am series and world tour stops. Get booked to run fair, credible events.',
});
return (
<CraftProfileForm
config={{
kind: SKATE_JUDGE_KIND,
selfTag: 'skatejudge',
identifier: 'judge-profile',
heading: 'Skate Event Judge',
tagline: 'From flat-ground Game of S.K.A.T.E. to the World Destruction Tour — run it fair, run it credible',
noun: 'judge',
accentText: 'text-yellow-400',
accentBg: 'bg-yellow-500',
accentChip: 'bg-yellow-500 text-black border-yellow-500',
accentChipHover: 'hover:border-yellow-500/60 hover:text-yellow-400',
icon: Gavel,
rateLabel: 'Day Rate / Fee',
portfolioLabel: 'Results archive / profile link',
skillSections: [
{ title: 'Event Formats', entries: Object.entries(JUDGE_FORMAT_LABELS), required: true },
{ title: 'Specialty', entries: Object.entries(JUDGE_SPECIALTY_LABELS) },
{ title: 'Level / Circuit', entries: Object.entries(JUDGE_LEVEL_LABELS) },
],
extraFields: [
{
tag: 'events_judged',
label: 'Events Judged',
placeholder: 'e.g. 40+ contests, 3 World Tour stops',
helper: 'Notable events, comps or tours you have officiated.',
},
],
}}
/>
);
}