Skip to content

feat: login page update#2107

Open
shnai0 wants to merge 1 commit intomainfrom
login-update
Open

feat: login page update#2107
shnai0 wants to merge 1 commit intomainfrom
login-update

Conversation

@shnai0
Copy link
Collaborator

@shnai0 shnai0 commented Mar 7, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added security compliance badges (SOC2, GDPR, HIPAA, CCPA) to login page.
    • Displayed trust rating badge highlighting customer adoption.
    • Implemented staggered animation reveal for partner logos.
  • Style

    • Refined login page layout and spacing.
    • Updated testimonial section design and positioning.
    • Enhanced button and form element styling.

@shnai0 shnai0 requested a review from mfts as a code owner March 7, 2026 14:08
@vercel
Copy link

vercel bot commented Mar 7, 2026

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

Project Deployment Actions Updated (UTC)
papermark Ready Ready Preview, Comment Mar 7, 2026 2:08pm

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 7, 2026

Walkthrough

Updated login page layout with increased left column width to 55%, redesigned right panel featuring security/compliance icons (SOC2, GDPR, HIPAA, CCPA), and updated testimonial content. Refactored LogoCloud component from static SVGs to animated image-based progressive reveal with staggered timing effects.

Changes

Cohort / File(s) Summary
Login Page Redesign
app/(auth)/login/page-client.tsx
Increased left column width to 55%, adjusted margins and padding for card containers; added security/compliance icon row beneath logo; redesigned right panel with updated testimonials and white background; updated form spacing and button styling; added fallback URL (https://www.papermark.com) for Terms and Privacy links with rel="noopener noreferrer".
LogoCloud Animation Refactor
components/shared/logo-cloud.tsx
Replaced static SVG grid with progressive animated reveal using visibleCount state; logos appear sequentially with opacity and translateY transforms controlled by staggered timeouts; converted inline SVGs to image-based rendering; added Mistral AI and Brevo to logos array; reduced code complexity and external link dependencies.

Possibly related PRs

🚥 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 'feat: login page update' is partially related to the changeset. While it correctly identifies that the login page is being updated, it is overly broad and generic, failing to capture the specific nature of the changes such as the layout restructuring, security badge additions, or the logo animation feature. Consider a more specific title like 'feat: redesign login page with security badges and animated logos' to better convey the main changes in the changeset.
✅ 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.

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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.

Copy link
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.

Actionable comments posted: 3

🧹 Nitpick comments (1)
components/shared/logo-cloud.tsx (1)

42-54: Prefer CSS delays over timer-driven state for this reveal.

This mount path schedules six timers and six React state updates, and every tile stays hidden until the effect starts. A CSS-based stagger would avoid the extra render churn, keep the content visible immediately, and make a reduced-motion fallback easier.

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

In `@components/shared/logo-cloud.tsx` around lines 42 - 54, The current
useEffect/timers + visibleCount state should be removed and replaced with a
CSS-based stagger: stop using visibleCount/setVisibleCount and the timers array
in useEffect; instead render all logos visible immediately and assign each tile
a style or data attribute containing its index (e.g., map logos and render <div
className="logo-tile" style={{ '--delay': `${i * 150}ms` }} ...>), then
implement the reveal purely in CSS using transition/animation with
animation-delay: var(--delay) and a prefers-reduced-motion media query to
disable animations; ensure no JS timers remain and the component still mounts
with content visible while the CSS handles the staggered reveal.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/`(auth)/login/page-client.tsx:
- Around line 181-184: The primary email CTA uses a className built via cn that
includes "disabled:opacity-100", which makes disabled buttons look active;
update the class list in the button's className (where cn(...) is used in
page-client.tsx) to show a visible disabled state—replace "disabled:opacity-100"
with a lower opacity like "disabled:opacity-50" and add
"disabled:cursor-not-allowed" (and optionally "disabled:pointer-events-none") so
the button appears and behaves disabled when the email is invalid or another
auth flow is running.
- Around line 63-69: The external Link around the Papermark logo uses
target="_blank" but lacks rel="noopener noreferrer"; update the Link element in
app/(auth)/login/page-client.tsx (the Link wrapping the <img> with
src="/_static/papermark-logo.svg") to include rel="noopener noreferrer" so the
opener is disabled for that external link while keeping target="_blank".

In `@components/shared/logo-cloud.tsx`:
- Line 59: Replace the explicit single row class on the logo grid with an auto
row track so all tiles align: in the div whose className currently contains
"grid grid-cols-2 grid-rows-[50px] gap-x-1 gap-y-3 md:grid-cols-3" (in
components/shared/logo-cloud.tsx) change "grid-rows-[50px]" to
"auto-rows-[50px]" so every implicit row uses a 50px height and the six logos
line up consistently.

---

Nitpick comments:
In `@components/shared/logo-cloud.tsx`:
- Around line 42-54: The current useEffect/timers + visibleCount state should be
removed and replaced with a CSS-based stagger: stop using
visibleCount/setVisibleCount and the timers array in useEffect; instead render
all logos visible immediately and assign each tile a style or data attribute
containing its index (e.g., map logos and render <div className="logo-tile"
style={{ '--delay': `${i * 150}ms` }} ...>), then implement the reveal purely in
CSS using transition/animation with animation-delay: var(--delay) and a
prefers-reduced-motion media query to disable animations; ensure no JS timers
remain and the component still mounts with content visible while the CSS handles
the staggered reveal.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f1b83348-ffc9-4bfd-8c53-4a529985d684

📥 Commits

Reviewing files that changed from the base of the PR and between 3cf4458 and 6c2124a.

⛔ Files ignored due to path filters (9)
  • package-lock.json is excluded by !**/package-lock.json
  • public/_static/logos/brevo.svg is excluded by !**/*.svg
  • public/_static/logos/dp-world.svg is excluded by !**/*.svg
  • public/_static/logos/mistral-logo-color-black.svg is excluded by !**/*.svg
  • public/_static/security-icons/CCPA.svg is excluded by !**/*.svg
  • public/_static/security-icons/GDPR.svg is excluded by !**/*.svg
  • public/_static/security-icons/HIPAA.svg is excluded by !**/*.svg
  • public/_static/security-icons/soc2-dark-new3.png is excluded by !**/*.png
  • public/_static/security-icons/soc2new3.svg is excluded by !**/*.svg
📒 Files selected for processing (2)
  • app/(auth)/login/page-client.tsx
  • components/shared/logo-cloud.tsx

Comment on lines +63 to 69
<div className="items-left flex flex-col space-y-3 px-4 py-6 pt-5 sm:px-12 sm:pt-6">
<Link href="https://www.papermark.com" target="_blank">
<img
src="/_static/papermark-logo.svg"
alt="Papermark Logo"
className="md:mb-48s -mt-8 mb-36 h-7 w-auto self-start sm:mb-32"
className="mb-24 h-7 w-auto self-start sm:mb-20"
/>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Harden the external logo link the same way as the legal links.

This target="_blank" navigation is still missing rel="noopener noreferrer", so it is the one opener-enabled external link left on the page.

Suggested fix
-            <Link href="https://www.papermark.com" target="_blank">
+            <Link
+              href="https://www.papermark.com"
+              target="_blank"
+              rel="noopener noreferrer"
+            >
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div className="items-left flex flex-col space-y-3 px-4 py-6 pt-5 sm:px-12 sm:pt-6">
<Link href="https://www.papermark.com" target="_blank">
<img
src="/_static/papermark-logo.svg"
alt="Papermark Logo"
className="md:mb-48s -mt-8 mb-36 h-7 w-auto self-start sm:mb-32"
className="mb-24 h-7 w-auto self-start sm:mb-20"
/>
<div className="items-left flex flex-col space-y-3 px-4 py-6 pt-5 sm:px-12 sm:pt-6">
<Link
href="https://www.papermark.com"
target="_blank"
rel="noopener noreferrer"
>
<img
src="/_static/papermark-logo.svg"
alt="Papermark Logo"
className="mb-24 h-7 w-auto self-start sm:mb-20"
/>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/`(auth)/login/page-client.tsx around lines 63 - 69, The external Link
around the Papermark logo uses target="_blank" but lacks rel="noopener
noreferrer"; update the Link element in app/(auth)/login/page-client.tsx (the
Link wrapping the <img> with src="/_static/papermark-logo.svg") to include
rel="noopener noreferrer" so the opener is disabled for that external link while
keeping target="_blank".

Comment on lines 181 to 184
className={cn(
"focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none",
clickedMethod === "email"
? "bg-black"
: "bg-gray-800 hover:bg-gray-900",
"focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none disabled:opacity-100",
"bg-black hover:bg-gray-900",
)}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Keep a visible disabled state on the primary email CTA.

disabled:opacity-100 makes the button look active even when the email is invalid or another auth flow is running.

Suggested fix
-                  "focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none disabled:opacity-100",
+                  "focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
className={cn(
"focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none",
clickedMethod === "email"
? "bg-black"
: "bg-gray-800 hover:bg-gray-900",
"focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none disabled:opacity-100",
"bg-black hover:bg-gray-900",
)}
className={cn(
"focus:shadow-outline w-full transform rounded px-4 py-2 text-white transition-colors duration-300 ease-in-out focus:outline-none",
"bg-black hover:bg-gray-900",
)}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/`(auth)/login/page-client.tsx around lines 181 - 184, The primary email
CTA uses a className built via cn that includes "disabled:opacity-100", which
makes disabled buttons look active; update the class list in the button's
className (where cn(...) is used in page-client.tsx) to show a visible disabled
state—replace "disabled:opacity-100" with a lower opacity like
"disabled:opacity-50" and add "disabled:cursor-not-allowed" (and optionally
"disabled:pointer-events-none") so the button appears and behaves disabled when
the email is invalid or another auth flow is running.

rel="noopener noreferrer"
className="group col-span-1 flex items-center justify-center bg-white p-8 font-bold text-[#249edc] transition-colors"
href="https://snowflake.com"
<div className="grid grid-cols-2 grid-rows-[50px] gap-x-1 gap-y-3 md:grid-cols-3">
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use auto-rows-[50px] if these tiles are meant to align.

grid-rows-[50px] creates one explicit 50px row. The remaining rows in this 6-item grid fall back to implicit auto tracks, so their height now depends on whichever logo lands there.

Suggested fix
-        <div className="grid grid-cols-2 grid-rows-[50px] gap-x-1 gap-y-3 md:grid-cols-3">
+        <div className="grid auto-rows-[50px] grid-cols-2 gap-x-1 gap-y-3 md:grid-cols-3">
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div className="grid grid-cols-2 grid-rows-[50px] gap-x-1 gap-y-3 md:grid-cols-3">
<div className="grid auto-rows-[50px] grid-cols-2 gap-x-1 gap-y-3 md:grid-cols-3">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/shared/logo-cloud.tsx` at line 59, Replace the explicit single row
class on the logo grid with an auto row track so all tiles align: in the div
whose className currently contains "grid grid-cols-2 grid-rows-[50px] gap-x-1
gap-y-3 md:grid-cols-3" (in components/shared/logo-cloud.tsx) change
"grid-rows-[50px]" to "auto-rows-[50px]" so every implicit row uses a 50px
height and the six logos line up consistently.

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