diff --git a/apps/web/app/(app)/[emailAccountId]/onboarding/page.tsx b/apps/web/app/(app)/[emailAccountId]/onboarding/page.tsx index 4357c2f3c1..e598522d87 100644 --- a/apps/web/app/(app)/[emailAccountId]/onboarding/page.tsx +++ b/apps/web/app/(app)/[emailAccountId]/onboarding/page.tsx @@ -1,6 +1,9 @@ import { Suspense } from "react"; import type { Metadata } from "next"; +import { after } from "next/server"; import { OnboardingContent } from "@/app/(app)/[emailAccountId]/onboarding/OnboardingContent"; +import { fetchUserAndStoreUtms } from "@/app/(landing)/welcome/utms"; +import { auth } from "@/utils/auth"; export const metadata: Metadata = { title: "Onboarding | Inbox Zero", @@ -16,6 +19,14 @@ export default async function OnboardingPage(props: { const step = searchParams.step ? Number.parseInt(searchParams.step, 10) : 1; + const authPromise = auth(); + + after(async () => { + const user = await authPromise; + if (!user?.user) return; + await fetchUserAndStoreUtms(user.user.id); + }); + return ( diff --git a/apps/web/app/(landing)/welcome-redirect/page.tsx b/apps/web/app/(landing)/welcome-redirect/page.tsx index ef4987aa62..2352095d4c 100644 --- a/apps/web/app/(landing)/welcome-redirect/page.tsx +++ b/apps/web/app/(landing)/welcome-redirect/page.tsx @@ -1,13 +1,8 @@ import { redirect } from "next/navigation"; -import { after } from "next/server"; import { auth } from "@/utils/auth"; import { env } from "@/env"; import prisma from "@/utils/prisma"; import { WelcomeRedirectContent } from "@/app/(landing)/welcome-redirect/content"; -import { storeUtms } from "@/app/(landing)/welcome/utms"; -import { createScopedLogger } from "@/utils/logger"; - -const logger = createScopedLogger("welcome-redirect"); export default async function WelcomeRedirectPage(props: { searchParams: Promise<{ question?: string; force?: boolean }>; @@ -29,13 +24,5 @@ export default async function WelcomeRedirectPage(props: { if (!searchParams.force && user.completedOnboardingAt) redirect(env.NEXT_PUBLIC_APP_HOME_PATH); - after(async () => { - if (!user.utms) { - await storeUtms(session.user.id).catch((error) => { - logger.error("Failed to store utms", { error }); - }); - } - }); - return ; } diff --git a/apps/web/app/(landing)/welcome/page.tsx b/apps/web/app/(landing)/welcome/page.tsx index 33cd5802df..3c2f26be85 100644 --- a/apps/web/app/(landing)/welcome/page.tsx +++ b/apps/web/app/(landing)/welcome/page.tsx @@ -1,9 +1,12 @@ import { Suspense } from "react"; import type { Metadata } from "next"; +import { after } from "next/server"; import { OnboardingForm } from "@/app/(landing)/welcome/form"; import { SquaresPattern } from "@/app/(landing)/home/SquaresPattern"; import { PageHeading, TypographyP } from "@/components/Typography"; import { CardBasic } from "@/components/ui/card"; +import { fetchUserAndStoreUtms } from "@/app/(landing)/welcome/utms"; +import { auth } from "@/utils/auth"; export const metadata: Metadata = { title: "Welcome", @@ -20,6 +23,14 @@ export default async function WelcomePage(props: { ? Number.parseInt(searchParams.question) : 0; + const authPromise = auth(); + + after(async () => { + const user = await authPromise; + if (!user?.user) return; + await fetchUserAndStoreUtms(user.user.id); + }); + return (
diff --git a/apps/web/app/(landing)/welcome/utms.tsx b/apps/web/app/(landing)/welcome/utms.tsx index 9f1d897791..03c46fdc89 100644 --- a/apps/web/app/(landing)/welcome/utms.tsx +++ b/apps/web/app/(landing)/welcome/utms.tsx @@ -1,7 +1,30 @@ import { cookies } from "next/headers"; import prisma from "@/utils/prisma"; +import { createScopedLogger } from "@/utils/logger"; + +const logger = createScopedLogger("utms"); + +export async function fetchUserAndStoreUtms(userId: string) { + const user = await prisma.user + .findUnique({ + where: { id: userId }, + select: { utms: true }, + }) + .catch((error) => { + logger.error("Failed to fetch user", { error, userId }); + return null; + }); + + if (user && !user.utms) { + await storeUtms(userId).catch((error) => { + logger.error("Failed to store utms", { error, userId }); + }); + } +} export async function storeUtms(userId: string) { + logger.info("Storing utms", { userId }); + const cookieStore = await cookies(); const utmCampaign = cookieStore.get("utm_campaign"); const utmMedium = cookieStore.get("utm_medium"); @@ -21,4 +44,6 @@ export async function storeUtms(userId: string) { where: { id: userId }, data: { utms }, }); + + logger.info("Stored utms", { utms, userId }); } diff --git a/version.txt b/version.txt index 8c00422158..31d573518c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.6.18 \ No newline at end of file +v2.6.19 \ No newline at end of file