From df5c3763764d090f5f838a86eb1b2405d7a668f4 Mon Sep 17 00:00:00 2001 From: hamaguchi <93605959+LeandroHamaguchi@users.noreply.github.com> Date: Mon, 23 Mar 2026 22:39:07 -0400 Subject: [PATCH 1/5] redirect / to /volunteers and redirect user from /login to /volunteers on login --- src/app/auth/confirm/route.ts | 2 +- src/lib/client/supabase/middleware.ts | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/app/auth/confirm/route.ts b/src/app/auth/confirm/route.ts index 7057a1d..f88d9ed 100644 --- a/src/app/auth/confirm/route.ts +++ b/src/app/auth/confirm/route.ts @@ -20,5 +20,5 @@ export async function GET(request: NextRequest): Promise { return redirect("/auth/auth-code-error"); } - return redirect("/"); + return redirect("/volunteers"); } diff --git a/src/lib/client/supabase/middleware.ts b/src/lib/client/supabase/middleware.ts index f608036..92661ca 100644 --- a/src/lib/client/supabase/middleware.ts +++ b/src/lib/client/supabase/middleware.ts @@ -4,15 +4,18 @@ import { NextResponse, type NextRequest } from "next/server"; const publicPathPrefixes = ["/auth", "/animation-test", "/login"]; function isPublicPath(pathname: string): boolean { - return ( - pathname === "/" || - publicPathPrefixes.some((path) => pathname.startsWith(path)) - ); + return publicPathPrefixes.some((path) => pathname.startsWith(path)); } export async function updateSession( request: NextRequest ): Promise { + if (request.nextUrl.pathname === "/") { + const url = request.nextUrl.clone(); + url.pathname = "/volunteers"; + return NextResponse.redirect(url); + } + let supabaseResponse = NextResponse.next({ request, }); @@ -51,6 +54,12 @@ export async function updateSession( const { data } = await supabase.auth.getClaims(); const user = data?.claims; + if (!user && request.nextUrl.pathname === "/volunteers") { + const url = request.nextUrl.clone(); + url.pathname = "/login"; + return NextResponse.redirect(url); + } + if (!user && !isPublicPath(request.nextUrl.pathname)) { // no user, potentially respond by redirecting the user to the login page const url = request.nextUrl.clone(); From a05bb236ea76719f35f7ebb77eb36c0f4fed9ad0 Mon Sep 17 00:00:00 2001 From: hamaguchi <93605959+LeandroHamaguchi@users.noreply.github.com> Date: Mon, 23 Mar 2026 22:40:50 -0400 Subject: [PATCH 2/5] fix server.ts error, volunteer data now loads properly --- src/lib/client/supabase/server.ts | 40 +++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/lib/client/supabase/server.ts b/src/lib/client/supabase/server.ts index fcd2501..61727a6 100644 --- a/src/lib/client/supabase/server.ts +++ b/src/lib/client/supabase/server.ts @@ -7,6 +7,30 @@ import type { SupabaseClient } from "@supabase/supabase-js"; import { createClient as createBrowserClient } from "@supabase/supabase-js"; import * as process from "node:process"; +function getSupabaseUrl(preferLocal: boolean): string { + const url = preferLocal + ? (process.env["API_URL"] ?? process.env["NEXT_PUBLIC_SUPABASE_URL"]) + : (process.env["NEXT_PUBLIC_SUPABASE_URL"] ?? process.env["API_URL"]); + if (!url) { + throw new Error("Missing env var API_URL or NEXT_PUBLIC_SUPABASE_URL"); + } + return url; +} + +function getPublishableKey(preferLocal: boolean): string { + const key = preferLocal + ? (process.env["PUBLISHABLE_KEY"] ?? + process.env["NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY"]) + : (process.env["NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY"] ?? + process.env["PUBLISHABLE_KEY"]); + if (!key) { + throw new Error( + "Missing env var PUBLISHABLE_KEY or NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY" + ); + } + return key; +} + // During tests we prefer to use the plain `@supabase/supabase-js` client // because Next's `cookies()` and `@supabase/ssr` internals are not // available in the Vitest environment. @@ -21,8 +45,8 @@ export async function createClient(): Promise> { console.log("Creating Supabase client locally for tests..."); return createBrowserClient( - process.env["API_URL"]!, - process.env["PUBLISHABLE_KEY"]!, + getSupabaseUrl(true), + getPublishableKey(true), { global: { headers: { @@ -37,8 +61,8 @@ export async function createClient(): Promise> { console.log("Creating Supabase SSR client..."); const cookieStore = await cookies(); return createServerClient( - process.env["API_URL"]!, - process.env["PUBLISHABLE_KEY"]!, + getSupabaseUrl(false), + getPublishableKey(false), { cookies: { getAll() { @@ -61,21 +85,17 @@ export async function createClient(): Promise> { } export function createAdminClient(): SupabaseClient { - // Prefer SUPABASE_SERVICE_ROLE_KEY to avoid collisions with other tooling that - // may also define SERVICE_ROLE_KEY with a non-Supabase token. + const supabaseUrl = getSupabaseUrl(false); const serviceRoleKey = process.env["SUPABASE_SERVICE_ROLE_KEY"] ?? process.env["SERVICE_ROLE_KEY"]; - if (!process.env["API_URL"]) { - throw new Error("Missing env var API_URL"); - } if (!serviceRoleKey) { throw new Error( "Missing env var SERVICE_ROLE_KEY or SUPABASE_SERVICE_ROLE_KEY" ); } - return createBrowserClient(process.env["API_URL"], serviceRoleKey, { + return createBrowserClient(supabaseUrl, serviceRoleKey, { global: { headers: { Authorization: `Bearer ${serviceRoleKey}`, From 18fc2cfdb9e704d96d2d87b89abb2f1288a18fdb Mon Sep 17 00:00:00 2001 From: hamaguchi <93605959+LeandroHamaguchi@users.noreply.github.com> Date: Mon, 23 Mar 2026 23:17:56 -0400 Subject: [PATCH 3/5] fix imports in src/app/globals.css --- src/app/globals.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/globals.css b/src/app/globals.css index cadb647..13b5242 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,6 +1,6 @@ -@import "tailwindcss"; @import url("https://fonts.googleapis.com/css2?family=Manrope:wght@400;700;800&display=swap"); @import "../styles/variables.css"; +@import "tailwindcss"; :root { --background: #ffffff; From 720bf6bd8043cf2ff6c4ca1a2abdf3a35796d24d Mon Sep 17 00:00:00 2001 From: hamaguchi <93605959+LeandroHamaguchi@users.noreply.github.com> Date: Mon, 23 Mar 2026 23:19:05 -0400 Subject: [PATCH 4/5] fix error --- src/lib/client/supabase/server.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/client/supabase/server.ts b/src/lib/client/supabase/server.ts index 61727a6..3fa8977 100644 --- a/src/lib/client/supabase/server.ts +++ b/src/lib/client/supabase/server.ts @@ -37,8 +37,7 @@ function getPublishableKey(preferLocal: boolean): string { export async function createClient(): Promise> { if ( process.env.NODE_ENV === "test" || - process.env["SUPABASE_TESTING"] === "1" || - process.env.NODE_ENV === "development" + process.env["SUPABASE_TESTING"] === "1" ) { // In tests we connect to a local Supabase instance // and do not use SSR or cookies From 9ee7c9246875821ac12c20ec48c7f302c8b0bbea Mon Sep 17 00:00:00 2001 From: hamaguchi <93605959+LeandroHamaguchi@users.noreply.github.com> Date: Mon, 23 Mar 2026 23:21:12 -0400 Subject: [PATCH 5/5] fix error with css --- src/app/globals.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/globals.css b/src/app/globals.css index 13b5242..7902ff4 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,4 +1,3 @@ -@import url("https://fonts.googleapis.com/css2?family=Manrope:wght@400;700;800&display=swap"); @import "../styles/variables.css"; @import "tailwindcss";