SkateSpots/src/hooks
SkateSpots e44f8b81a7 feat(moderation): reversible verdicts (undo) + community photos as a signal
Undo (latest verdict wins):
- MODERATION_LABEL_CLEARED = 'cleared' — the neutral undo verdict.
- useAdminModeration no longer UNIONS labels (which made a hide permanent in the
  UI); it keeps the NEWEST verdict per target (created_at, with device-local
  verdicts overlaid by timestamp), so 'cleared' supersedes an earlier
  'hidden'/'verified'. useAdminClear() publishes it.
- Local mirror is now a verdict map (skatespots_local_admin_verdicts_v1: key ->
  {verdict, at}) with migration from the legacy hidden/confirmed arrays.
- useSkateSpots(limit, { includeHidden: true }) — ADMIN TOOLING ONLY: without it
  a hidden spot leaves the list, so a verdict could never be undone. The review
  queue uses it, keeps actioned rows (Hidden/Confirmed badge + Undo), and sorts
  un-actioned first.

Community photos as a signal:
- useBatchSpotPhotos: ONE #a query for every spot (the single-spot hook already
  queried by #a, so batching is free), counting only photos from people OTHER
  than the mapper. Folded into the 'no community signals' flag.

Verified by seeding local verdicts: none -> flags + Confirm/Hide; hidden ->
Undo; verified -> Undo; cleared -> back to neutral. tsc/eslint clean, 101 tests,
smoke PASS.
2026-09-28 01:06:04 +07:00
..
wallet chore(lint): clear all no-unused-vars warnings (position-precise) 2026-09-26 22:20:21 +07:00
useActivityNotifications.ts chore(lint): remove all explicit any + sweep dead imports 2026-09-26 21:40:42 +07:00
useAdminHide.ts feat(moderation): reversible verdicts (undo) + community photos as a signal 2026-09-28 01:06:04 +07:00
useAdminModeration.ts feat(moderation): reversible verdicts (undo) + community photos as a signal 2026-09-28 01:06:04 +07:00
useAppContext.ts New project created with Shakespeare 2026-06-15 19:49:07 +07:00
useAuthor.ts Fix generic npub names: query profile aggregators in parallel in useAuthor 2026-07-25 14:01:55 +07:00
useBatchTrustScores.ts chore(lint): remove safely-detectable unused locals 2026-09-26 21:58:03 +07:00
useBTCMap.ts chore(lint): clear all no-unused-vars warnings (position-precise) 2026-09-26 22:20:21 +07:00
useBtcMapPlaces.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useCitrine.ts Citrine audit: endpoint fallback, a11y, reduced-motion, UX polish (1.3.6) 2026-09-09 10:54:22 +07:00
useCoaches.ts #2 Reduce console noise: strip debug logs from relay queries, publish, trust score, weather, coaches, NostrSync 2026-08-27 10:17:01 +07:00
useCollectiveJoinRequests.ts Crew audit: fix member-clobber on rapid roster writes (1.2.37) 2026-09-08 00:02:30 +07:00
useCollectiveMembers.ts Crews: opt-in member visibility + Lab vouch/web-of-trust anti-fraud + CrewDetail redesign 2026-08-10 21:01:57 +07:00
useCommentCounts.ts Fix 78 pre-existing TypeScript errors surfaced by npm test 2026-09-03 21:18:02 +07:00
useComments.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useCordnChat.ts fix(amber): stop passive decryption from storming Amber on navigation (1.2.16) 2026-09-07 14:57:35 +07:00
useCrewActivity.ts Crews: proximity discovery, activity/rep signals, treasury, hiring pipeline, crew-hosted events + reverse links; add Contacts page 2026-07-25 12:38:45 +07:00
useCrewAgentChat.ts feat(sasquatch-pro): crew agent sends Pro credentials too 2026-09-27 14:27:02 +07:00
useCrewChatRead.ts feat: cross-device read-state + preference sync via encrypted NIP-78 2026-09-25 09:49:47 +07:00
useCrewChatUnread.ts Crew chat: unread dot on the Chat tab (cheap, honest, no bell spam) 2026-09-03 18:21:38 +07:00
useCrewDismissals.ts Crew dismissals: merge remote set before sync (close clobber pattern) 2026-09-07 20:46:46 +07:00
useCrewEvents.ts Crews: proximity discovery, activity/rep signals, treasury, hiring pipeline, crew-hosted events + reverse links; add Contacts page 2026-07-25 12:38:45 +07:00
useCrewFeed.ts Step 3: Crews — map-anchored collective feature (kind 35006) 2026-07-24 13:59:50 +07:00
useCrewGoal.ts security: verify invoice amounts + require provider-issued zap receipts (1.2.14) 2026-09-07 11:45:21 +07:00
useCrewInvites.ts Crew audit: fix member-clobber on rapid roster writes (1.2.37) 2026-09-08 00:02:30 +07:00
useCrewmates.ts Crews: proximity discovery, activity/rep signals, treasury, hiring pipeline, crew-hosted events + reverse links; add Contacts page 2026-07-25 12:38:45 +07:00
useCrewModeration.ts Add crew admin moderation + invite actions 2026-07-24 17:01:28 +07:00
useCrewNip05.ts Add soft NIP-05 verification for skaters (open directory + "Verified" filter) 2026-09-02 21:51:11 +07:00
useCrewNotifications.ts Lab collective join-requests → notification bell 2026-09-03 15:41:03 +07:00
useCrewRole.ts Add crew NIP-05 (any-domain, founder-verified) + founder/delegated-admin governance 2026-07-24 16:46:20 +07:00
useCrews.ts fix(lab): complete offer-a-service audit — data preservation, rendering, stats, input handling 2026-09-27 09:38:03 +07:00
useCrewsForSpot.ts Crews: proximity discovery, activity/rep signals, treasury, hiring pipeline, crew-hosted events + reverse links; add Contacts page 2026-07-25 12:38:45 +07:00
useCrewZap.ts security: verify invoice amounts + require provider-issued zap receipts (1.2.14) 2026-09-07 11:45:21 +07:00
useCurrentUser.ts Fix Amber native login in APK: reliable Capacitor detection (v1.1.7) 2026-08-27 14:00:39 +07:00
useCVMClient.ts fix(sasquatch): cover the organizer + barber Lab roles 2026-09-27 11:12:14 +07:00
useCVMServerHealth.ts fix(sasquatch): bound AI latency, separate system prompt, verify relay events 2026-09-27 10:32:07 +07:00
useDeleteEntity.ts fix(amber): Amethyst-style foreground-intent signer to end the GrapheneOS sign hang 2026-09-07 12:39:00 +07:00
useDirectMessages.ts fix(dms): DM inbox relays were wiped on every load, so DMs went nowhere 2026-09-27 19:58:54 +07:00
useDMRead.ts feat: cross-device read-state + preference sync via encrypted NIP-78 2026-09-25 09:49:47 +07:00
useDmRelays.ts feat(relays): NIP-17 DM inbox relays (kind 10050) 2026-09-26 21:32:53 +07:00
useEventRsvps.ts Route event notifications to the event, not the actor (1.2.35) 2026-09-07 22:56:20 +07:00
useEventUpdates.ts Give admins moderator control over events + fix a spoofing hole 2026-09-03 14:40:17 +07:00
useExchangeRate.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useFeaturedVerification.ts security: verify invoice amounts + require provider-issued zap receipts (1.2.14) 2026-09-07 11:45:21 +07:00
useFollowing.ts chore(lint): clear all no-unused-vars warnings (position-precise) 2026-09-26 22:20:21 +07:00
useFollowList.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useFoodSpots.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useGeolocation.ts Crews: proximity discovery, activity/rep signals, treasury, hiring pipeline, crew-hosted events + reverse links; add Contacts page 2026-07-25 12:38:45 +07:00
useGigs.ts Interconnect Music ↔ Events: featured musician on events + gig list on musician profiles; count new Lab crafts in growth stats; document visibility/vouch/gig conventions in NIP.md 2026-08-10 22:02:22 +07:00
useGrowthStats.ts feat(lab): add Barber / Hairstylist profile (kind 35014) 2026-09-27 10:15:30 +07:00
useIsMobile.tsx fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useLabProfiles.ts feat(lab): add Barber / Hairstylist profile (kind 35014) 2026-09-27 10:15:30 +07:00
useLightningAddress.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useListingReports.ts refactor(relays): route every relay consumer through useRelays() 2026-09-26 22:36:14 +07:00
useListingRestrictions.ts fix(pro): single-source the platform Lightning address + show it to payers 2026-09-27 14:13:37 +07:00
useLocalStorage.ts fix(newsletter): infinite render loop + issues published to the wrong relays 2026-09-27 17:40:02 +07:00
useLoggedInAccounts.ts chore(lint): remove safely-detectable unused locals 2026-09-26 21:58:03 +07:00
useLoginActions.ts Fix amber login type: use x-amber instead of amber 2026-07-09 14:57:20 +07:00
useMarketplace.ts feat(marketplace): listing detail page + shared trade/escrow actions 2026-09-26 22:30:43 +07:00
useMarketplaceOffers.ts feat(offers): structured marketplace offers (kind 30403) with accept/decline 2026-09-26 23:17:51 +07:00
useMarkListingSold.ts chore(lint): remove all explicit any + sweep dead imports 2026-09-26 21:40:42 +07:00
useMembershipAttestation.ts Crews: opt-in member visibility + Lab vouch/web-of-trust anti-fraud + CrewDetail redesign 2026-08-10 21:01:57 +07:00
useMintDirectory.ts fix(mints): native app fetched /api/mints from the local shell -> HTML/JSON error 2026-09-27 17:25:16 +07:00
useMyLabProfile.ts feat(lab): craft profiles are now editable + add a title/headline field 2026-09-27 00:17:05 +07:00
useNavPreferences.ts feat(app-shop): add the App Shop section (empty on purpose) 2026-09-27 21:40:41 +07:00
useNewsletterIssues.ts Add Nostr-native newsletter: subscribe, mailbox & notifications 2026-09-03 19:16:49 +07:00
useNewsletterRead.ts feat: cross-device read-state + preference sync via encrypted NIP-78 2026-09-25 09:49:47 +07:00
useNewsletterSubscriberCount.ts Newsletter: subscriber count + admin archive backfill to Nostr 2026-09-03 19:21:09 +07:00
useNewsletterSubscription.ts fix(newsletter): infinite render loop + issues published to the wrong relays 2026-09-27 17:40:02 +07:00
useNostr.ts New project created with Shakespeare 2026-06-15 19:49:07 +07:00
useNostrPublish.ts chore(lint): remove all explicit any + sweep dead imports 2026-09-26 21:40:42 +07:00
useNotASpotReport.ts feat(spots): honest quality signals, photo required, off-topic reports, admin review queue 2026-09-27 23:41:49 +07:00
useNotificationsRead.ts feat: cross-device read-state + preference sync via encrypted NIP-78 2026-09-25 09:49:47 +07:00
useNutzap.ts chore(lint): remove all explicit any + sweep dead imports 2026-09-26 21:40:42 +07:00
useNWC.ts feat(wallet): Lightning wallet over NWC (balance, receive, send) 2026-09-26 20:01:59 +07:00
useNWCContext.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useOfflineCache.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
usePersonalContext.ts fix(amber): stop global SasquatchGuide from decrypting the stash on every page 2026-09-07 19:15:00 +07:00
usePlatformFee.ts Add duration tiers + layered NIP-57 zap verification, extend featured/Pro to tours 2026-07-24 16:18:15 +07:00
usePostComment.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
usePreferences.ts feat: cross-device read-state + preference sync via encrypted NIP-78 2026-09-25 09:49:47 +07:00
usePrivateContacts.ts Private Contacts: fetch-before-write to prevent list clobber 2026-09-07 20:36:01 +07:00
usePurchasePro.ts refactor(relays): route every relay consumer through useRelays() 2026-09-26 22:36:14 +07:00
useQRCodeScanner.ts Add optional CLINK (noffer) self-custodial payments to Lab profiles + shops 2026-07-24 12:34:50 +07:00
useReadState.ts fix(newsletter): infinite render loop + issues published to the wrong relays 2026-09-27 17:40:02 +07:00
useRelatrScore.ts Security hardening (audit F1-F4): secure Cashu seed in native Keychain/KeyStore with mandatory first-time backup; verify event signatures for trust scores (WoT + NIP-85 Relatr); add safeJson guard on config boot parse; delete dead CashuWallet.tsx with raw alert(mnemonic) 2026-09-24 18:13:58 +07:00
useRelayStatus.ts Polish relay list UI: match CitrineCard style, add Local chip, on-brand read/write chips, and live connection dots 2026-09-14 10:14:16 +07:00
useRiderStats.ts feat: SkateSpots Rider Cards — 3 card types, 6 themes, holographic shimmer, print-ready 2026-06-16 14:29:54 +07:00
useSasquatchActions.ts Sasquatch Pro Phase 2: action drafting (draft → you confirm) 2026-07-29 23:41:11 +07:00
useSasquatchAiStatus.ts fix(mobile-ux): Mints in the nav, instant directions, no stray signer prompt 2026-09-27 15:54:29 +07:00
useSasquatchGuide.ts Fix Sasquatch "Learn More" landing on home instead of /onboarding 2026-08-27 11:20:53 +07:00
useSasquatchPro.ts feat(sasquatch-pro): server-side Pro gate on the AI proxy + client credentials 2026-09-27 14:18:33 +07:00
useSellerInfo.ts refactor(relays): route every relay consumer through useRelays() 2026-09-26 22:36:14 +07:00
useSellerSales.ts chore(lint): remove all explicit any + sweep dead imports 2026-09-26 21:40:42 +07:00
useShakespeare.ts chore: clean up console noise - remove debug logs from NostrProvider, NostrSync, useShakespeare 2026-06-16 22:23:00 +07:00
useShops.ts perf: lazy loading, faster timeouts, better caching, chunk splitting 2026-06-18 11:32:24 +07:00
useSkateEvents.ts Admins can delete/take down any listing (spot, crew, tour, event, shop) 2026-08-18 17:51:34 +07:00
useSkateRelays.ts refactor(relays): route every relay consumer through useRelays() 2026-09-26 22:36:14 +07:00
useSkaters.ts Add Skater profiles (kind 35000) + /skaters directory 2026-09-02 20:58:51 +07:00
useSkaterVerifications.ts Add soft NIP-05 verification for skaters (open directory + "Verified" filter) 2026-09-02 21:51:11 +07:00
useSkateShops.ts Admins can delete/take down any listing (spot, crew, tour, event, shop) 2026-08-18 17:51:34 +07:00
useSkateSpots.ts feat(moderation): reversible verdicts (undo) + community photos as a signal 2026-09-28 01:06:04 +07:00
useSpotChat.ts Add Spot Chat: ephemeral geohash-anchored local chat channels 2026-07-24 14:52:48 +07:00
useSpotCollections.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useSpotContributions.ts feat(moderation): reversible verdicts (undo) + community photos as a signal 2026-09-28 01:06:04 +07:00
useSpotServices.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useSpotStatus.ts Add community Spot Status Reports (kind 2259) 2026-07-24 23:06:10 +07:00
useSpotWeather.ts #2 Reduce console noise: strip debug logs from relay queries, publish, trust score, weather, coaches, NostrSync 2026-08-27 10:17:01 +07:00
useStash.ts fix(amber): stop re-decrypting on every navigation 2026-09-27 13:28:36 +07:00
useStashShowcase.ts Rename "The Quiver" to "Stash" for brand consistency 2026-09-02 19:41:45 +07:00
useSyncedAppData.ts fix(amber,routing): scope Amber prompts to real actions; real per-mode routes + steps 2026-09-27 18:35:17 +07:00
useTheme.ts New project created with Shakespeare 2026-06-15 19:49:07 +07:00
useToast.ts New project created with Shakespeare 2026-06-15 19:49:07 +07:00
useTours.ts Admins can delete/take down any listing (spot, crew, tour, event, shop) 2026-08-18 17:51:34 +07:00
useTradeAttestations.test.ts feat(marketplace): mutual trade attestations + reputation (kind 31871) 2026-09-26 20:17:38 +07:00
useTradeAttestations.ts fix(nav,amber,reputation,routing): header crowding, no read-state popups, anti-collusion rep, instant directions 2026-09-27 16:42:39 +07:00
useTraderRecommendations.ts feat(trades): trusted-trader recommendations (31873) + offer DM nudges 2026-09-26 23:24:23 +07:00
useTrustScore.ts Security hardening (audit F1-F4): secure Cashu seed in native Keychain/KeyStore with mandatory first-time backup; verify event signatures for trust scores (WoT + NIP-85 Relatr); add safeJson guard on config boot parse; delete dead CashuWallet.tsx with raw alert(mnemonic) 2026-09-24 18:13:58 +07:00
useUploadFile.ts Audit fixes: harden Amber signEvent response handling, fix web AmberSigner signEvent naming, add Blossom upload fallbacks, sanitize untrusted URLs in FoodPage/CreateTourPage 2026-09-03 20:20:08 +07:00
useUserStatus.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useVouches.ts Crews: opt-in member visibility + Lab vouch/web-of-trust anti-fraud + CrewDetail redesign 2026-08-10 21:01:57 +07:00
useWallet.ts fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
useZapLeaderboard.ts feat(leaderboards): zap leaderboards page (top spots + top supporters) 2026-09-26 17:17:21 +07:00
useZaps.ts refactor(relays): route every relay consumer through useRelays() 2026-09-26 22:36:14 +07:00
useZapTotals.test.ts test: cover zap helpers and newsletter data 2026-09-26 19:45:48 +07:00
useZapTotals.ts feat(leaderboards): zap leaderboards page (top spots + top supporters) 2026-09-26 17:17:21 +07:00