Skip to content

Onboarding changes#3759

Draft
marcusljf wants to merge 2 commits intomainfrom
partner-onboarding
Draft

Onboarding changes#3759
marcusljf wants to merge 2 commits intomainfrom
partner-onboarding

Conversation

@marcusljf
Copy link
Copy Markdown
Collaborator

@marcusljf marcusljf commented Apr 15, 2026

Partner updates

Changed:

  • Setting a consistent top alignment for the form screens to adapt for keyboards showing
  • Profile photo supporting content
  • On MD breakpoints, the sign in and help show below the content, as to not overlap the form.
  • Changed the description to "About you" to match the dashboard profile field naming. Also updated the placeholder to match.
  • For the spotlight payout method, reduced some of the values as they were too big.
  • On the password requirements, simplified how they show to fit on one line
  • Simplifying other styles that had extra padding
  • Updated the help button to the secondary style to match the "sign in as" instead of the ghost version

Fixed:

  • Profile image not showing focus state
  • Profile image was squishing width on smaller screens
  • The "you're signed in as.." content was wrapping them separately, so if the email is long it broke both pieces
  • Social and web platform inputs had no L/R padding
  • Social inputs @ was breaking from the content on smaller screens from being absolutely positioned.
  • Profile creation and social fields content are the same width now
  • Updating the header text sizes to be consistent (mismatched on the payouts)
  • Padding is now consistent across the onboarding pages
  • dub partners logo is now in the same location across it all
Before After
CleanShot 2026-04-15 at 14 06 29@2x CleanShot 2026-04-15 at 14 04 07@2x
CleanShot 2026-04-15 at 14 06 47@2x CleanShot 2026-04-15 at 14 04 41@2x

Summary by CodeRabbit

  • New Features

    • Added fixed help/support links for easy access to support resources on desktop screens
  • Improvements

    • Enhanced responsive layout across onboarding flows for improved mobile experience
    • Updated form field labels for better clarity
    • Improved form styling and spacing throughout onboarding and partner setup flows
    • Optimized password requirement display for mobile devices with abbreviated labels
    • Better scrollable content handling on smaller viewports

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 15, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dub Ready Ready Preview Apr 17, 2026 6:12am

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 15, 2026

📝 Walkthrough

Walkthrough

This PR updates onboarding and partner portal layouts with responsive design improvements, typography refinements, container sizing adjustments, and replaces Toolbar help functionality with custom CircleQuestion-based support links across multiple pages.

Changes

Cohort / File(s) Summary
Onboarding Layout Restructuring
apps/web/app/(ee)/partners.dub.co/(onboarding)/layout.tsx, apps/web/app/app.dub.co/(onboarding)/layout.tsx, apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/layout.tsx
Restructured main layout containers with overflow handling, responsive padding, and flexbox adjustments. Removed Toolbar dependency and added fixed bottom-right CircleQuestion help links to support portal. Made SignedInHint responsive (hidden on small screens, visible on md and up). Added mobile-specific scroll behavior with overflow-y-auto on smaller viewports.
Partner Onboarding Forms & Pages
apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/onboarding-form.tsx, apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/page.tsx, apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/payouts/page.tsx, apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/platforms/page.tsx
Updated form field labels and helper text copy (e.g., profile image helper, description placeholder). Adjusted container max-widths (480px→430px, 640px→600px). Modified typography sizing (h1 styling from text-lg font-medium to text-center text-xl font-semibold) and refined spacing utilities on wrapper elements.
Onboarding Step Components
apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/domain/default-domain-selector.tsx, apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/plan/plan-selector.tsx, apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/products/product-selector.tsx, apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/program/reward/form.tsx, apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/step-page.tsx
Adjusted responsive grid breakpoints from lg:grid-cols-2 to sm:grid-cols-2 for earlier mobile card stacking. Changed container max-widths for step pages. Reordered product config object entries and updated plan selector initialization logic to derive default plan based on product type ("Advanced" for partners, "Business" for others).
UI Component Updates
apps/web/app/app.dub.co/(onboarding)/signed-in-hint.tsx, apps/web/ui/layout/toolbar/toolbar.tsx
Updated SignedInHint with full-width responsive layout and integrated help icon link. Modified Toolbar help item visibility to display only at md breakpoint and above (hidden md:block).
Partner Portal Components
apps/web/ui/partners/partner-platforms-form.tsx, apps/web/ui/partners/payouts/payout-method-cards.tsx
Refactored YouTube/TikTok input prefix positioning from absolute to relative container with consistent left-3 offset and pointer-events-none. Reduced spotlight card padding, spacing, and typography sizing; adjusted ConnectPayoutButton height logic to consistently use h-9.
Shared Components
apps/web/ui/shared/password-requirements.tsx, apps/web/ui/workspaces/create-workspace-form.tsx
Extended password requirements with optional mobileName field for abbreviated labels on small screens (≤420px). Adjusted form input prefix padding and logo preview sizing in workspace creation form.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Suggested reviewers

  • steven-tey
  • pepeladeira

Poem

🐰 A hop through layouts, responsive and bright,
Typography dancing, from left side to right,
Help buttons glowing with CircleQuestion's gleam,
Breakpoints reshuffled—the onboarding dream!
From helpers to hints, the design takes flight. ✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Onboarding changes' is vague and generic, using non-descriptive language that fails to convey the specific nature of the work despite the PR making numerous targeted improvements across onboarding components. Provide a more specific title that highlights the primary changes, such as 'Refactor onboarding layouts and improve form UX' or 'Improve onboarding form styling and responsive behavior.'
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch partner-onboarding

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@marcusljf marcusljf marked this pull request as ready for review April 17, 2026 06:02
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (6)
apps/web/ui/partners/partner-platforms-form.tsx (1)

466-485: LGTM — TikTok mirrors the YouTube fix consistently.

Same relative-wrapper + pointer-events-none @ span pattern as YouTube; good that both @-prefixed platforms use the identical structure.

Optional follow-up (nitpick, not blocking): the two @-prefixed blocks (YouTube at 324–350 and TikTok at 461–487) are now structurally identical aside from the platform literal, and share nearly all of their className strings with the non-prefixed social inputs too. A small shared subcomponent (e.g. SocialHandleInput taking platform, domainLabel, and optional prefix) would remove ~6 near-duplicated blocks and make future style tweaks land in one place.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/ui/partners/partner-platforms-form.tsx` around lines 466 - 485, Two
identical "@-prefixed" social input blocks (TikTok input and the existing
YouTube input) are duplicated; extract a small shared component (e.g.,
SocialHandleInput) that accepts props platform (string key for register/errors),
placeholder/domainLabel, optional prefixChar (e.g., "@"), disabled and onPaste
handler, and the CN/className variants, then replace both YouTube and TikTok JSX
with <SocialHandleInput platform="tiktok" ...> / <SocialHandleInput
platform="youtube" ...>. Ensure SocialHandleInput uses register(platform),
errors[platform], onPasteSocial(e, platform) and preserves the
pointer-events-none span and all conditional className logic so styling and
behavior remain identical.
apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/products/product-selector.tsx (1)

30-30: Nit: double space in className.

w-full gap-4 contains a stray double space left over from removing max-w-[312px]. Clean up for consistency.

Proposed fix
-    <div className="animate-fade-in mx-auto grid w-full  gap-4 sm:max-w-[600px] sm:grid-cols-2">
+    <div className="animate-fade-in mx-auto grid w-full gap-4 sm:max-w-[600px] sm:grid-cols-2">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/web/app/app.dub.co/`(onboarding)/onboarding/(steps)/products/product-selector.tsx
at line 30, Trim the stray double space in the JSX div's className in
product-selector.tsx: locate the element with className "animate-fade-in mx-auto
grid w-full  gap-4 sm:max-w-[600px] sm:grid-cols-2" and remove the extra space
between "w-full" and "gap-4" so it becomes "w-full gap-4" for consistent
spacing.
apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/payouts/page.tsx (1)

11-17: Optional: redundant text-center on children.

The parent container on Line 11 already applies text-center, so the additional text-center on the h1 (Line 12) and p (Line 15) is redundant. Not a bug, just noise — consider dropping them for clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/app/`(ee)/partners.dub.co/(onboarding)/onboarding/payouts/page.tsx
around lines 11 - 17, Remove the redundant text-center classes from the child
elements: in the JSX block where the parent div has className "relative mx-auto
flex w-full max-w-[600px] flex-col items-center text-center md:mt-6", drop the
extra "text-center" tokens on the <h1> and <p> elements so they inherit the
centering from the parent; update the <h1> and <p> elements (the Connect payouts
heading and its paragraph) to omit their internal text-center class.
apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/page.tsx (1)

12-12: Nit: double space in className.

Leftover whitespace from removing rounded-xl p-8.

Proposed fix
-      <div className="animate-slide-up-fade w-full  [--offset:10px] [animation-delay:500ms] [animation-duration:1s] [animation-fill-mode:both]">
+      <div className="animate-slide-up-fade w-full [--offset:10px] [animation-delay:500ms] [animation-duration:1s] [animation-fill-mode:both]">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/app/`(ee)/partners.dub.co/(onboarding)/onboarding/page.tsx at line
12, The className string in the JSX div (the animate-slide-up-fade wrapper in
onboarding/page.tsx) contains an accidental double space ("w-full 
[--offset...") left from removing `rounded-xl p-8`; edit the className on that
div to collapse the double space into a single space so the classes read "w-full
[--offset:10px] ..." to avoid stray whitespace in class names.
apps/web/app/app.dub.co/(onboarding)/layout.tsx (1)

12-19: Add rel="noopener noreferrer" to external target="_blank" link.

Modern browsers implicitly apply noopener for target="_blank", but noreferrer still needs to be set explicitly if you want to prevent Referer leakage to dub.co/contact/support. Other external links in this PR (e.g., SignedInHint help link, partners layout Wordmark & support link) have the same gap — worth applying consistently.

🔒 Proposed fix
       <a
         href="https://dub.co/contact/support"
         target="_blank"
+        rel="noopener noreferrer"
         className="fixed bottom-0 right-0 z-40 m-5 hidden h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-neutral-200 bg-white text-neutral-700 shadow-sm transition-colors hover:bg-neutral-100 md:flex"
         aria-label="Help"
       >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/app/app.dub.co/`(onboarding)/layout.tsx around lines 12 - 19, Add
rel="noopener noreferrer" to all external anchor tags that use target="_blank"
to prevent referrer leakage and provide security isolation; specifically update
the <a href="https://dub.co/contact/support" ...> in layout.tsx and any other
external help/support links referenced by SignedInHint and the partners layout
Wordmark/support link so they include rel="noopener noreferrer" alongside
target="_blank", and apply the same change consistently across those components.
apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/platforms/page.tsx (1)

24-30: rounded-xl has no visible effect here.

The panel wrapper has rounded-xl but no bg-*, border, shadow, or overflow-hidden to clip anything, so the radius utility is a no-op. Either drop it or add the matching background/border it was intended to round.

🧹 Proposed cleanup
-      <div className="animate-slide-up-fade w-full rounded-xl py-8 [animation-delay:750ms] [animation-duration:1s] [animation-fill-mode:both]">
+      <div className="animate-slide-up-fade w-full py-8 [animation-delay:750ms] [animation-duration:1s] [animation-fill-mode:both]">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/app/`(ee)/partners.dub.co/(onboarding)/onboarding/platforms/page.tsx
around lines 24 - 30, The wrapper div with className "animate-slide-up-fade
w-full rounded-xl py-8 [animation-delay:750ms] [animation-duration:1s]
[animation-fill-mode:both]" uses rounded-xl but no background, border, shadow,
or overflow so the border-radius is a no-op; either remove the rounded-xl
utility or add a matching visual style (e.g., bg-*, border-*, shadow-*, or
overflow-hidden) to the same div to make the radius take effect—update the
wrapper div around OnboardingPlatformsFormRSC (the panel wrapper) accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@apps/web/app/`(ee)/partners.dub.co/(onboarding)/onboarding/page.tsx:
- Line 12: The className string in the JSX div (the animate-slide-up-fade
wrapper in onboarding/page.tsx) contains an accidental double space ("w-full 
[--offset...") left from removing `rounded-xl p-8`; edit the className on that
div to collapse the double space into a single space so the classes read "w-full
[--offset:10px] ..." to avoid stray whitespace in class names.

In `@apps/web/app/`(ee)/partners.dub.co/(onboarding)/onboarding/payouts/page.tsx:
- Around line 11-17: Remove the redundant text-center classes from the child
elements: in the JSX block where the parent div has className "relative mx-auto
flex w-full max-w-[600px] flex-col items-center text-center md:mt-6", drop the
extra "text-center" tokens on the <h1> and <p> elements so they inherit the
centering from the parent; update the <h1> and <p> elements (the Connect payouts
heading and its paragraph) to omit their internal text-center class.

In
`@apps/web/app/`(ee)/partners.dub.co/(onboarding)/onboarding/platforms/page.tsx:
- Around line 24-30: The wrapper div with className "animate-slide-up-fade
w-full rounded-xl py-8 [animation-delay:750ms] [animation-duration:1s]
[animation-fill-mode:both]" uses rounded-xl but no background, border, shadow,
or overflow so the border-radius is a no-op; either remove the rounded-xl
utility or add a matching visual style (e.g., bg-*, border-*, shadow-*, or
overflow-hidden) to the same div to make the radius take effect—update the
wrapper div around OnboardingPlatformsFormRSC (the panel wrapper) accordingly.

In `@apps/web/app/app.dub.co/`(onboarding)/layout.tsx:
- Around line 12-19: Add rel="noopener noreferrer" to all external anchor tags
that use target="_blank" to prevent referrer leakage and provide security
isolation; specifically update the <a href="https://dub.co/contact/support" ...>
in layout.tsx and any other external help/support links referenced by
SignedInHint and the partners layout Wordmark/support link so they include
rel="noopener noreferrer" alongside target="_blank", and apply the same change
consistently across those components.

In
`@apps/web/app/app.dub.co/`(onboarding)/onboarding/(steps)/products/product-selector.tsx:
- Line 30: Trim the stray double space in the JSX div's className in
product-selector.tsx: locate the element with className "animate-fade-in mx-auto
grid w-full  gap-4 sm:max-w-[600px] sm:grid-cols-2" and remove the extra space
between "w-full" and "gap-4" so it becomes "w-full gap-4" for consistent
spacing.

In `@apps/web/ui/partners/partner-platforms-form.tsx`:
- Around line 466-485: Two identical "@-prefixed" social input blocks (TikTok
input and the existing YouTube input) are duplicated; extract a small shared
component (e.g., SocialHandleInput) that accepts props platform (string key for
register/errors), placeholder/domainLabel, optional prefixChar (e.g., "@"),
disabled and onPaste handler, and the CN/className variants, then replace both
YouTube and TikTok JSX with <SocialHandleInput platform="tiktok" ...> /
<SocialHandleInput platform="youtube" ...>. Ensure SocialHandleInput uses
register(platform), errors[platform], onPasteSocial(e, platform) and preserves
the pointer-events-none span and all conditional className logic so styling and
behavior remain identical.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 85773b34-cafd-4eff-b7f0-d5b70bebcc93

📥 Commits

Reviewing files that changed from the base of the PR and between 05b9c87 and 7ca2dc9.

📒 Files selected for processing (18)
  • apps/web/app/(ee)/partners.dub.co/(onboarding)/layout.tsx
  • apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/onboarding-form.tsx
  • apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/page.tsx
  • apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/payouts/page.tsx
  • apps/web/app/(ee)/partners.dub.co/(onboarding)/onboarding/platforms/page.tsx
  • apps/web/app/app.dub.co/(onboarding)/layout.tsx
  • apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/domain/default-domain-selector.tsx
  • apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/layout.tsx
  • apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/plan/plan-selector.tsx
  • apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/products/product-selector.tsx
  • apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/program/reward/form.tsx
  • apps/web/app/app.dub.co/(onboarding)/onboarding/(steps)/step-page.tsx
  • apps/web/app/app.dub.co/(onboarding)/signed-in-hint.tsx
  • apps/web/ui/layout/toolbar/toolbar.tsx
  • apps/web/ui/partners/partner-platforms-form.tsx
  • apps/web/ui/partners/payouts/payout-method-cards.tsx
  • apps/web/ui/shared/password-requirements.tsx
  • apps/web/ui/workspaces/create-workspace-form.tsx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant