Files
avbeat-com/src/app/auth-debug/ClientReadout.tsx
Local Administrator 8042024c4a feat(brand): AV BEAT 2026 rebrand — blue/navy/white identity
- New AvBeatLogo inline-SVG component (rounded-square emblem with
  forward-leaning AV monogram + horizontal beam detail) at
  src/components/AvBeatLogo.tsx, three variants (full/wordmark/icon).
- Header.tsx now uses the responsive AV BEAT logo lockup in the
  top-left, links to /, full lockup on desktop (emblem+wordmark+tagline),
  emblem+wordmark on tablet, emblem-only on mobile.
- Removed DualSpeedTicker (the 'RECENT FORUM POSTS' ticker strip);
  the news ticker / glow chrome does not match the new aesthetic and the
  forum row was the explicit removal target.
- Tailwind theme + globals.css now expose the AV BEAT 2026 palette as
  semantic tokens: --brand-blue (#1D4ED8), --brand-blue-bright (#38BDF8),
  --brand-navy (#0F172A), --brand-bg (#F8FAFC), --brand-surface, --brand-border,
  --brand-text, --brand-text-muted. Legacy --color-* aliases re-point to the
  new tokens so any inline-styled component re-themes for free.
- Site-wide hex sweep migrates 2,769 hardcoded color literals across 144
  files from the old dark-broadcast palette to the new tokens (orange
  -> blue, dark-brown -> white surface / navy text, cream -> navy).
- Layout body class flipped from 'bb-neon' to 'bg-brand-bg text-brand-text'
  so the dark glow chrome no longer leaks through the new light theme.
2026-06-03 12:07:18 +00:00

63 lines
2.1 KiB
TypeScript

"use client";
import { useEffect, useState } from "react";
import { createClient } from "@/lib/supabase/client";
export default function ClientReadout() {
const [out, setOut] = useState<any>({ status: "loading…" });
useEffect(() => {
(async () => {
const documentCookie = typeof document !== "undefined" ? document.cookie : "(no document)";
const sbCookieNames = (documentCookie || "")
.split(";")
.map((c) => c.trim().split("=")[0])
.filter((n) => n.startsWith("sb-"));
let sessionState: any = null;
let userState: any = null;
let getSessionErr: string | null = null;
let getUserErr: string | null = null;
try {
const supabase = createClient();
const sess = await supabase.auth.getSession();
sessionState = sess.data?.session
? {
access_token_len: sess.data.session.access_token?.length,
user_id: sess.data.session.user?.id,
user_email: sess.data.session.user?.email,
}
: null;
if (sess.error) getSessionErr = sess.error.message;
const userRes = await supabase.auth.getUser();
userState = userRes.data?.user
? { id: userRes.data.user.id, email: userRes.data.user.email }
: null;
if (userRes.error) getUserErr = userRes.error.message;
} catch (e: any) {
getSessionErr = e?.message || String(e);
}
setOut({
note: "Client-side view (after hydration) on the same request.",
document_cookie_length: documentCookie.length,
document_cookie_sample: documentCookie.slice(0, 120),
sb_cookie_names_visible_to_js: sbCookieNames,
client_getSession_error: getSessionErr,
client_getUser_error: getUserErr,
client_has_session: !!sessionState,
client_session: sessionState,
client_user: userState,
});
})();
}, []);
return (
<pre style={{ padding: 20, fontFamily: "monospace", whiteSpace: "pre-wrap", background: "#FFFFFF", color: "#bbb", borderTop: "1px solid #333" }}>
{JSON.stringify(out, null, 2)}
</pre>
);
}