+ );
- {/* Open call — looking for (crew ↔ Lab hiring pipeline) */}
+ const openCallBlock = (
+ );
- {/* Crew treasury (NIP-75 zap goal) — hidden for now via SHOW_CREW_TREASURY */}
- {SHOW_CREW_TREASURY && (
+ const treasuryBlock = SHOW_CREW_TREASURY ? (
@@ -749,9 +809,9 @@ export function CrewForm({ existing }: CrewFormProps) {
)}
- )}
+ ) : null;
- {/* Members */}
+ const membersBlock = (
@@ -838,8 +898,9 @@ export function CrewForm({ existing }: CrewFormProps) {
)}
+ );
- {/* Home spots */}
+ const spotsBlock = (
+ );
- {/* Linked Lab profiles (cross-link) */}
-
+ const labLinkBlock =
;
- {/* The Part — crew video / montage */}
+ const videoBlock = (
+ );
- {/* Sponsor shop */}
+ const sponsorBlock = (
+ );
- {/* Encrypted chat coordinator (Cordn / MLS) */}
+ const coordinatorBlock = (
+ );
-
-
-
-
-
- setLatitude(e.target.value)} className="bg-gray-800 border-gray-700" />
- setLongitude(e.target.value)} className="bg-gray-800 border-gray-700" />
-
-
- {existing?.geohash && !latitude && (
-
Leave blank to keep the current home turf location.
- )}
-
-
- {/* Crew NIP-05 identity */}
+ const nip05Block = (
+ );
- {/* Links */}
+ const linksBlock = (
@@ -1011,10 +1051,9 @@ export function CrewForm({ existing }: CrewFormProps) {
+ );
- {/* Crew Band — many crews double as local bands. Optional.
- Interconnects with the Lab: a serious band can set its Crew Type to
- "Band & Music" and link a full Musician profile below. */}
+ const bandBlock = (
@@ -1072,34 +1111,211 @@ export function CrewForm({ existing }: CrewFormProps) {
Linked Lab profiles section above.
+ );
- {/* Logo */}
-
-
- {image ? (
-
-

-
-
- ) : (
-
- )}
+ const busy = isPublishing || isUploading;
+
+ // ─── Edit mode: flat single page (all sections at once) ───────────────────
+ if (isEditing) {
+ return (
+
+ );
+ }
+
+ // ─── Create mode: guided 4-step wizard ────────────────────────────────────
+ const steps: { title: string; hint: string; content: ReactNode }[] = [
+ {
+ title: 'The Basics',
+ hint: 'Just the essentials — you can spin up a crew with only this step.',
+ content: (
+
+
+ {logoBlock}
+
+ A logo makes your crew instantly recognisable on the map and in feeds. Square works best.
+
+ {nameBlock}
+ {bioBlock}
+ {locationBlock}
+
+ ),
+ },
+ {
+ title: 'Identity & Vibe',
+ hint: 'How your crew shows up around the app. All optional.',
+ content: (
+
+ {vibeBlock}
+ {crewTypeBlock}
+
+ ),
+ },
+ {
+ title: 'Squad & Spots',
+ hint: 'Add your people and your home turf. You can always do this later.',
+ content: (
+
+ {membersBlock}
+ {spotsBlock}
+ {openCallBlock}
+
+ ),
+ },
+ {
+ title: 'Extras',
+ hint: 'Power-ups for later — skip anything you’re unsure about.',
+ content: (
+
+ {treasuryBlock}
+ {videoBlock}
+ {sponsorBlock}
+ {labLinkBlock}
+ {linksBlock}
+ {bandBlock}
+ {nip05Block}
+ {agentBlock}
+ {coordinatorBlock}
+
+ ),
+ },
+ ];
-