diff --git a/app/actions/auth.ts b/app/actions/auth.ts index 330cd67..4aa51ec 100644 --- a/app/actions/auth.ts +++ b/app/actions/auth.ts @@ -14,7 +14,7 @@ export async function signUp( const email = formData.get("email") as string; const password = formData.get("password") as string; - const next = (formData.get("next") as string) || "/welcome"; + const next = (formData.get("next") as string) || "/subscribe"; const confirmUrl = new URL("/auth/confirm-callback", appOrigin); confirmUrl.searchParams.set("next", next); @@ -62,7 +62,7 @@ export async function signIn(formData: FormData) { return { error: error.message }; } - const next = (formData.get("next") as string) || "/welcome"; + const next = (formData.get("next") as string) || "/subscribe"; revalidatePath("/", "layout"); redirect(next); } diff --git a/app/actions/subscription.ts b/app/actions/subscription.ts index fb8884b..fa89f83 100644 --- a/app/actions/subscription.ts +++ b/app/actions/subscription.ts @@ -12,7 +12,7 @@ import { validatePdsSlugInput, } from "@/lib/pds-slug"; import { isProfaneSlug } from "@/lib/profanity-server"; -import { welcomeNamePath } from "@/lib/onboarding"; +import { subscribeNamePath } from "@/lib/onboarding"; import { getPlanCatalogEntry } from "@/lib/plan-catalog"; import { getPriceIdForPlan, @@ -290,7 +290,7 @@ export async function createSubscriptionCheckout( }, ], success_url: `${origin}/dashboard?session_id={CHECKOUT_SESSION_ID}`, - cancel_url: `${origin}${welcomeNamePath({ pds_plan: plan.key })}`, + cancel_url: `${origin}${subscribeNamePath({ pds_plan: plan.key })}`, }); return { url: checkoutSession.url }; diff --git a/app/auth/confirm-callback/route.ts b/app/auth/confirm-callback/route.ts index 312dd29..0d375f4 100644 --- a/app/auth/confirm-callback/route.ts +++ b/app/auth/confirm-callback/route.ts @@ -7,7 +7,7 @@ export async function GET(request: Request) { requestUrl.searchParams.get("next")?.startsWith("/") && !requestUrl.searchParams.get("next")!.startsWith("//") ? requestUrl.searchParams.get("next")! - : "/welcome"; + : "/subscribe"; return exchangeCodeAndRedirect( request, diff --git a/app/components/pricing/plan-cards.tsx b/app/components/pricing/plan-cards.tsx index a1cc718..d3dc09a 100644 --- a/app/components/pricing/plan-cards.tsx +++ b/app/components/pricing/plan-cards.tsx @@ -7,7 +7,7 @@ import { import { ButtonLink } from "@/components/button-link"; import { Paragraph } from "@/components/paragraph"; import { formatStripePrice } from "@/lib/format-stripe-price"; -import { welcomeNamePath } from "@/lib/onboarding"; +import { subscribeNamePath } from "@/lib/onboarding"; import { PLAN_CATALOG } from "@/lib/plan-catalog"; import { getStripePlanAmounts, PLAN_KEYS } from "@/lib/stripe-plans"; import { SUPPORT_MAILTO } from "@/lib/site-config"; @@ -32,7 +32,7 @@ export async function PlanCards({ const onboarding = { pds_plan: plan.key }; const ctaHref = isLoggedIn - ? welcomeNamePath(onboarding) + ? subscribeNamePath(onboarding) : `/signup?${new URLSearchParams(onboarding).toString()}`; return ( diff --git a/app/dashboard/dashboard-client.tsx b/app/dashboard/dashboard-client.tsx index b429c1e..ac9c2f9 100644 --- a/app/dashboard/dashboard-client.tsx +++ b/app/dashboard/dashboard-client.tsx @@ -10,7 +10,7 @@ import { Heading } from "@/components/heading"; import { Paragraph } from "@/components/paragraph"; import { Button } from "@/actions/components/ui/button"; import { ButtonLink } from "@/components/button-link"; -import { welcomeNamePath } from "@/lib/onboarding"; +import { subscribeNamePath } from "@/lib/onboarding"; interface DashboardClientProps { subscribed: boolean; @@ -44,7 +44,7 @@ export default function DashboardClient({ again to regain access. Subscribe again diff --git a/app/dashboard/lifecycle-notice.tsx b/app/dashboard/lifecycle-notice.tsx index d86805d..8f81c7c 100644 --- a/app/dashboard/lifecycle-notice.tsx +++ b/app/dashboard/lifecycle-notice.tsx @@ -1,7 +1,7 @@ import { ButtonLink } from "@/components/button-link"; import { Heading } from "@/components/heading"; import { Paragraph } from "@/components/paragraph"; -import { welcomePath } from "@/lib/onboarding"; +import { subscribePath } from "@/lib/onboarding"; import type { PdsLifecycleReason, PdsLifecycleStatus, @@ -50,7 +50,7 @@ export function LifecycleGraceBanner({ lost. {reason === "past_due" ? "Update payment" : "Resubscribe"} @@ -84,7 +84,7 @@ export function LifecycleBlocked({ } — resubscribe to restore it.`} {isDeleted ? "Get started" : "Resubscribe"} diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index 3728d0e..2b1a712 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -8,7 +8,7 @@ import { ButtonLink } from "@/components/button-link"; import { Heading } from "@/components/heading"; import { Paragraph } from "@/components/paragraph"; import { getPdsServiceForCurrentUser } from "../api/pds/atproto/helpers"; -import { welcomePath, type OnboardingSearchParams } from "@/lib/onboarding"; +import { subscribePath, type OnboardingSearchParams } from "@/lib/onboarding"; import { isPdsReady } from "@/lib/pds-state"; import { PdsStatusCard } from "./pds-status-card"; import { UserDashboardClient } from "./user-dashboard-client"; @@ -111,7 +111,7 @@ export default async function DashboardPage({ searchParams }: DashboardPageProps // Lifecycle is active: require an active subscription, otherwise onboard. if (lifecycle === "active" && !active) { - redirect(welcomePath({ pds_plan: params?.pds_plan })); + redirect(subscribePath({ pds_plan: params?.pds_plan })); } // Account limits from the user's plan (personal = single account, no invites). diff --git a/app/login/page.tsx b/app/login/page.tsx index e80a976..ba643df 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -1,6 +1,6 @@ import { redirect } from "next/navigation"; import { createClient } from "@/lib/supabase/server"; -import { welcomePath, type OnboardingSearchParams } from "@/lib/onboarding"; +import { subscribePath, type OnboardingSearchParams } from "@/lib/onboarding"; import { LoginForm } from "./login-form"; type LoginPageProps = { @@ -14,7 +14,7 @@ type LoginPageProps = { export default async function LoginPage({ searchParams }: LoginPageProps) { const params = await searchParams; const onboarding = { pds_plan: params?.pds_plan }; - const next = welcomePath(onboarding); + const next = subscribePath(onboarding); const supabase = await createClient(); const { diff --git a/app/signup/page.tsx b/app/signup/page.tsx index ad2b777..d7980c9 100644 --- a/app/signup/page.tsx +++ b/app/signup/page.tsx @@ -2,7 +2,7 @@ import { redirect } from "next/navigation"; import { Suspense } from "react"; import { createClient } from "@/lib/supabase/server"; import { SignUpForm } from "./signup-form"; -import { welcomePath, type OnboardingSearchParams } from "@/lib/onboarding"; +import { subscribePath, type OnboardingSearchParams } from "@/lib/onboarding"; type SignUpPageProps = { searchParams?: Promise; @@ -11,7 +11,7 @@ type SignUpPageProps = { export default async function SignUpPage({ searchParams }: SignUpPageProps) { const params = await searchParams; const onboarding = { pds_plan: params?.pds_plan }; - const next = welcomePath(onboarding); + const next = subscribePath(onboarding); const supabase = await createClient(); const { diff --git a/app/subscribe/name/page.tsx b/app/subscribe/name/page.tsx index f151e52..29c4def 100644 --- a/app/subscribe/name/page.tsx +++ b/app/subscribe/name/page.tsx @@ -39,7 +39,7 @@ export default async function WelcomeNamePage({ } if (!params?.pds_plan) { - redirect("/welcome"); + redirect("/subscribe"); } // If the user already has a PDS, this is a resubscribe — lock to their diff --git a/app/subscribe/page.tsx b/app/subscribe/page.tsx index 0081a9f..239a1d6 100644 --- a/app/subscribe/page.tsx +++ b/app/subscribe/page.tsx @@ -6,7 +6,7 @@ import { Heading } from "@/components/heading"; import { Paragraph } from "@/components/paragraph"; import { getPlanCatalogEntry } from "@/lib/plan-catalog"; import type { OnboardingSearchParams } from "@/lib/onboarding"; -import { welcomeNamePath } from "@/lib/onboarding"; +import { subscribeNamePath } from "@/lib/onboarding"; import { PlanCards } from "@/components/pricing/plan-cards"; import { OnboardingSteps } from "./onboarding-steps"; @@ -35,7 +35,7 @@ export default async function WelcomePage({ searchParams }: WelcomePageProps) { if (params?.pds_plan) { const plan = getPlanCatalogEntry(params.pds_plan); - redirect(welcomeNamePath({ pds_plan: plan.key })); + redirect(subscribeNamePath({ pds_plan: plan.key })); } // A non-null subscription with no active access = the user had a plan that diff --git a/app/subscribe/pds-name-form.tsx b/app/subscribe/pds-name-form.tsx index 5533460..4cbf247 100644 --- a/app/subscribe/pds-name-form.tsx +++ b/app/subscribe/pds-name-form.tsx @@ -8,7 +8,7 @@ import { Input } from "@/actions/components/ui/input"; import { Label } from "@/actions/components/ui/label"; import { Paragraph } from "@/components/paragraph"; import { pdsHostnameForSlug, validatePdsSlugInput } from "@/lib/pds-slug"; -import { welcomePath } from "@/lib/onboarding"; +import { subscribePath } from "@/lib/onboarding"; type Availability = "idle" | "checking" | "available" | "taken" | "blocked"; @@ -184,7 +184,7 @@ export function PdsNameForm({ pdsPlan, lockedName }: PdsNameFormProps) { variant="ghost" disabled={loading} className="rounded-full border border-white/40 bg-transparent px-4 text-xs font-medium uppercase tracking-wide text-white hover:bg-white/10" - onClick={() => router.push(welcomePath({ pds_plan: pdsPlan }))} + onClick={() => router.push(subscribePath({ pds_plan: pdsPlan }))} > Back diff --git a/app/subscribe/subscribe-checkout.tsx b/app/subscribe/subscribe-checkout.tsx index c5444f6..e1ca86b 100644 --- a/app/subscribe/subscribe-checkout.tsx +++ b/app/subscribe/subscribe-checkout.tsx @@ -1,7 +1,7 @@ import { ButtonLink } from "@/components/button-link"; import { PlanSummaryCard } from "@/components/plan/plan-summary-card"; import type { PlanCatalogEntry } from "@/lib/plan-catalog"; -import { welcomeNamePath } from "@/lib/onboarding"; +import { subscribeNamePath } from "@/lib/onboarding"; type WelcomeCheckoutProps = { plan: PlanCatalogEntry; @@ -14,7 +14,7 @@ export function WelcomeCheckout({ plan, displayPrice }: WelcomeCheckoutProps) { Choose PDS name diff --git a/lib/onboarding.ts b/lib/onboarding.ts index 3520e0d..8165e0b 100644 --- a/lib/onboarding.ts +++ b/lib/onboarding.ts @@ -16,12 +16,12 @@ export function onboardingQueryString(params?: OnboardingSearchParams): string { return sp.toString(); } -export function welcomePath(params?: OnboardingSearchParams): string { +export function subscribePath(params?: OnboardingSearchParams): string { const qs = onboardingQueryString(params); - return qs ? `/welcome?${qs}` : "/welcome"; + return qs ? `/subscribe?${qs}` : "/subscribe"; } -export function welcomeNamePath(params?: OnboardingSearchParams): string { +export function subscribeNamePath(params?: OnboardingSearchParams): string { const qs = onboardingQueryString(params); - return qs ? `/welcome/name?${qs}` : "/welcome/name"; + return qs ? `/subscribe/name?${qs}` : "/subscribe/name"; } diff --git a/proxy.ts b/proxy.ts index 8989012..93a9e46 100644 --- a/proxy.ts +++ b/proxy.ts @@ -1,7 +1,7 @@ import { type NextRequest, NextResponse } from "next/server"; import { createMiddlewareClient } from "@/lib/supabase/middleware"; import { isRecoverySession } from "@/lib/auth"; -import { welcomePath } from "@/lib/onboarding"; +import { subscribePath } from "@/lib/onboarding"; const AUTH_ROUTES = ["/login", "/signup"]; const RESET_PASSWORD_PATH = "/reset-password"; @@ -28,7 +28,7 @@ export async function proxy(request: NextRequest) { if (AUTH_ROUTES.includes(pathname)) { const pdsPlan = request.nextUrl.searchParams.get("pds_plan") ?? undefined; - const destination = welcomePath({ pds_plan: pdsPlan }); + const destination = subscribePath({ pds_plan: pdsPlan }); return NextResponse.redirect(new URL(destination, request.url)); } }