ExposedGays: map, shop, auth, Supabase schema, Coolify Dockerfile

This commit is contained in:
Ryan Salazar
2026-06-26 17:32:15 -04:00
commit 3eb12c8b34
54 changed files with 4424 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
"use client";
import { useState, useEffect, createContext, useContext } from "react";
import { AgeGate } from "@/components/AgeGate";
import { Nav } from "@/components/Nav";
import { AuthProvider } from "@/lib/auth/context";
const ActiveCountContext = createContext<(n: number) => void>(() => {});
const VanillaModeContext = createContext(false);
export function useSetActiveCount() {
return useContext(ActiveCountContext);
}
export function useVanillaMode() {
return useContext(VanillaModeContext);
}
interface ProvidersProps {
children: React.ReactNode;
}
export function Providers({ children }: ProvidersProps) {
const [verified, setVerified] = useState(false);
const [vanillaMode, setVanillaMode] = useState(false);
const [activeCount, setActiveCount] = useState(0);
const [mounted, setMounted] = useState(false);
useEffect(() => {
setMounted(true);
setVerified(localStorage.getItem("eg_age_verified") === "true");
setVanillaMode(localStorage.getItem("eg_vanilla_mode") === "true");
}, []);
const handleVanillaToggle = (v: boolean) => {
setVanillaMode(v);
localStorage.setItem("eg_vanilla_mode", String(v));
};
if (!mounted) return null;
return (
<>
{!verified && <AgeGate onVerified={() => setVerified(true)} />}
<AuthProvider>
<VanillaModeContext.Provider value={vanillaMode}>
<Nav
vanillaMode={vanillaMode}
onVanillaToggle={handleVanillaToggle}
activeCount={activeCount}
/>
<main className="md:pt-14 pb-16 md:pb-0 min-h-screen">
<ActiveCountContext.Provider value={setActiveCount}>
{children}
</ActiveCountContext.Provider>
</main>
</VanillaModeContext.Provider>
</AuthProvider>
</>
);
}