// NOTE: This file should normally not be modified unless you are adding a new provider. // To add new routes, edit the AppRouter.tsx file. import { QueryClient } from "@tanstack/react-query"; import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client'; import { createHead, UnheadProvider } from '@unhead/react/client'; import { InferSeoMetaPlugin } from '@unhead/addons'; import { Suspense } from 'react'; import { createIDBPersister, shouldDehydrateQuery, PERSIST_BUSTER, PERSIST_MAX_AGE, } from '@/lib/queryPersister'; import NostrProvider from '@/components/NostrProvider'; import { NostrSync } from '@/components/NostrSync'; import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; import { NostrLoginProvider } from '@nostrify/react/login'; import { AppProvider } from '@/components/AppProvider'; import { NWCProvider } from '@/contexts/NWCContext'; import { LanguageProvider } from '@/contexts/LanguageContext'; import { AppConfig } from '@/contexts/AppContext'; import { PWAInstallPrompt } from '@/components/PWAInstallPrompt'; import { BetaDisclaimerDialog } from '@/components/BetaDisclaimerDialog'; import { SplashScreen } from '@/components/SplashScreen'; import { AmberCallbackHandler } from '@/components/auth/AmberCallbackHandler'; import AppRouter from './AppRouter'; const head = createHead({ plugins: [ InferSeoMetaPlugin(), ], }); const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, staleTime: 60000, // 1 minute gcTime: Infinity, }, }, }); // IndexedDB-backed persistence so the app rehydrates the last-seen spots, // shops, events and profiles instantly on a cold start (see lib/queryPersister). const persister = createIDBPersister(); const defaultConfig: AppConfig = { theme: "dark", relayMetadata: { relays: [ { url: 'wss://auth.nostr1.com', read: true, write: true }, { url: 'wss://relay.ditto.pub', read: true, write: true }, { url: 'wss://relay.skate-spots.org', read: true, write: true }, { url: 'wss://purplepag.es', read: true, write: false }, // Profile aggregator - read only ], updatedAt: 0, }, useSkateRelay: true, // Use community relay by default for skate content }; export function App() { return ( {/* Gentle opacity reveal so content eases in under the departing splash (pure opacity — never shifts the map). */}
); } export default App;