Skip to content

feat(branding): replace the last user-facing Documenso surfaces (batch 1) - #18

Merged
JOY (JOY) merged 4 commits into
mainfrom
chore/branding-batch-1
Sep 24, 2026
Merged

JOY (JOY) merged 4 commits into
mainfrom
chore/branding-batch-1

Conversation

@JOY

Copy link
Copy Markdown

Why

Branding audit (2026-09-22) verdict: branding is NOT fully changed yet. The three biggest user-facing Documenso leaks: (1) the hardcoded "Documenso, Inc. / 2261 Market Street, San Francisco" footer on every document email without org branding, (2) signup legal links pointing at documen.so with no local legal pages, (3) upstream Documenso artwork binaries (OG image, favicons, email logo) shipped in the repo and never replaced.

What

  • Email footer (template-footer.tsx): fallback identity now comes from APP_COMPANY_DETAILS (new constant in packages/lib/constants/app.ts, overridable via NEXT_PRIVATE_BRANDING_COMPANY_DETAILS, default Crove + https://crove.com); the "sent using" link targets the webapp instead of documen.so/mail-footer.
  • Legal pages: new local /terms and /privacy routes (placeholder skeletons - MUST be replaced with reviewed legal text before commercial reliance); signup links now point at them.
  • Share page: title/OG metadata rebranded, invalid-slug redirect goes to the webapp home instead of documenso.com, twitter:site -> @crovedos (adjustable).
  • Brand binaries: patch-crove-branding.mjs gains step [4/5] rasterizeBrandBinaries() (gracefully skipped when sharp is unavailable) that regenerates every committed binary from the Crove SVG: favicon-16/32, apple-touch-icon, android-chrome 192/512, PNG-format favicon.ico, email wordmark static/logo.png (374x55), logo_icon.png (320x320), opengraph-image.jpg (1270x760, dark + green brand), and both share OG frames (1200x630, card zone kept clear).

Deploy note

Optionally set NEXT_PRIVATE_BRANDING_COMPANY_DETAILS in prod env with the real legal entity name/address (default is Crove\nhttps://crove.com).

Verification

  • Binaries regenerated and visually verified (OG image, share frame, wordmark)
  • biome: clean; remix tsc: no errors in touched routes; CI Build App is the final gate
  • Reviewer gate per repo process

Known follow-ups (batch 2, not in this PR)

2FA issuer "Documenso", envelope sender dropdown "Documenso" option, email-domain upsell strings (app.documenso.com), package.json documenso scope, share OG frame1 usage audit.

…h 1)

Close the three biggest holes from the branding audit:

- Email footer: the hardcoded 'Documenso, Inc. / 2261 Market Street,
  San Francisco' fallback (rendered on every document email without org
  branding) now comes from APP_COMPANY_DETAILS (env-overridable, Crove
  default), and the 'sent using' link points at the webapp instead of
  documen.so.
- Legal links: signup Terms/Privacy now point at local /terms and
  /privacy routes (new placeholder skeletons to be replaced with
  reviewed legal text) instead of documen.so.
- Share page: title/OG metadata and the invalid-slug redirect no longer
  reference documenso.com; twitter:site moved to @crovedos (adjustable).
- Brand binaries: patch script gains a rasterization step (guarded on
  sharp) that regenerates every committed binary from the Crove SVG -
  favicons, apple-touch + android-chrome icons, PNG-ICO, email
  wordmark, logo_icon, OG image and both share OG frames - replacing
  the upstream Documenso artwork that shipped in the repo.
@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@coderabbitai

coderabbitai Bot commented Sep 24, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Warning

Review limit reached

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 6901c6a6-2231-44d2-9867-887d70872ca2

📥 Commits

Reviewing files that changed from the base of the PR and between 5fd97c0 and 1de8b5f.

⛔ Files ignored due to path filters (14)
  • apps/remix/public/android-chrome-192x192.png is excluded by !**/*.png
  • apps/remix/public/android-chrome-512x512.png is excluded by !**/*.png
  • apps/remix/public/apple-touch-icon.png is excluded by !**/*.png
  • apps/remix/public/favicon-16x16.png is excluded by !**/*.png
  • apps/remix/public/favicon-32x32.png is excluded by !**/*.png
  • apps/remix/public/favicon.ico is excluded by !**/*.ico
  • apps/remix/public/opengraph-image.jpg is excluded by !**/*.jpg
  • apps/remix/public/static/logo.png is excluded by !**/*.png
  • apps/remix/public/static/og-share-frame.png is excluded by !**/*.png
  • apps/remix/public/static/og-share-frame2.png is excluded by !**/*.png
  • packages/assets/logo_icon.png is excluded by !**/*.png
  • packages/assets/static/logo.png is excluded by !**/*.png
  • packages/assets/static/og-share-frame.png is excluded by !**/*.png
  • packages/assets/static/og-share-frame2.png is excluded by !**/*.png
📒 Files selected for processing (9)
  • apps/remix/app/components/forms/signup.tsx
  • apps/remix/app/routes/_share+/share.$slug.tsx
  • apps/remix/app/routes/_unauthenticated+/privacy.tsx
  • apps/remix/app/routes/_unauthenticated+/terms.tsx
  • packages/email/template-components/template-branding-logo.tsx
  • packages/email/template-components/template-footer.tsx
  • packages/email/templates/admin-user-created.tsx
  • packages/lib/constants/app.ts
  • scripts/patch-crove-branding.mjs
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⏱️ Code Review completed (8 files · 21,674 chars · 1 PR unit(s))

⏱️ Adversarial Review completed (Model: qwen3.8-27b)

🔍 Verified Adversarial Review Findings

📋 Findings Summary (1 inline finding)

  • 🟡 IMPORTANT apps/remix/app/routes/_share+/share.$slug.tsx:72: Missing fallback for NEXT_PUBLIC_WEBAPP_URL() in redirect (💡 1-click suggestion on diff)

💡 1-Click Suggestions Ready: Go to the Files changed tab to review and apply 1 suggestion directly with 1-click commit.

🛡️ Dismissed Claims

  • Email footer brand mismatch: The diff explicitly changes the alt text in template-branding-logo.tsx to "Crove Sign Logo" and updates the company details in template-footer.tsx to use APP_COMPANY_DETAILS(). The remaining "Documenso" text in the footer is a known branding inconsistency in the codebase (likely intended to be patched by the scripts/patch-crove-branding.mjs script or a future commit), but it does not constitute a functional bug, crash, or security vulnerability. The link destination is correctly updated to NEXT_PUBLIC_WEBAPP_URL(), which is the intended behavior for the enterprise deployment.


// Is hardcoded because this whole meta is hardcoded anyway for Documenso.
throw redirect('https://documenso.com');
// Non-share visitors (bots excluded above) land on the app home.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 IMPORTANT: Missing fallback for NEXT_PUBLIC_WEBAPP_URL() in redirect

Failure Trace:

  1. A user visits a share link that is not accessible (e.g., expired or private).
    2. The loader executes throw redirect(NEXT_PUBLIC_WEBAPP_URL());.
    3. If the NEXT_PUBLIC_WEBAPP_URL environment variable is not defined in the deployment environment, NEXT_PUBLIC_WEBAPP_URL() returns undefined (or an empty string, depending on the env implementation).
    4. redirect(undefined) results in an invalid redirect target, causing a 500 Internal Server Error or a broken redirect instead of landing on the app home.
Suggested change
// Non-share visitors (bots excluded above) land on the app home.
throw redirect(NEXT_PUBLIC_WEBAPP_URL() || '/');

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⏱️ Code Review completed (8 files · 21,743 chars · 1 PR unit(s))

⏱️ Adversarial Review completed (Model: qwen3.8-27b)

🔍 Verified Adversarial Review Findings

📋 Findings Summary (1 inline finding)

  • 🟡 IMPORTANT packages/email/template-components/template-footer.tsx:37: Brand/Contract Mismatch in Email Footer (💡 1-click suggestion on diff)

💡 1-Click Suggestions Ready: Go to the Files changed tab to review and apply 1 suggestion directly with 1-click commit.

🛡️ Dismissed Claims

  • None: No other candidate issues were provided for review.

<Trans>
This document was sent using{' '}
<Link className="text-primary" href="https://documen.so/mail-footer">
<Link className="text-primary" href={NEXT_PUBLIC_WEBAPP_URL()}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 IMPORTANT: Brand/Contract Mismatch in Email Footer

Failure Trace:

  1. The diff updates the href of the footer link to NEXT_PUBLIC_WEBAPP_URL() (which resolves to the Crove Sign domain, e.g., https://crove.com).
    2. However, the visible text content of the <Link> remains hardcoded as Documenso (line 37 in the new file context, corresponding to the line Documenso inside the <Link> tag).
    3. When an email is rendered, the user sees "This document was sent using Documenso" but clicking it navigates to the Crove Sign website.
    4. This contradicts the explicit branding intent of the PR (which renames the product to "Crove Sign" in metadata, logos, and other components) and creates a confusing user experience where the brand name in the email does not match the destination site.
Suggested change
<Link className="text-primary" href={NEXT_PUBLIC_WEBAPP_URL()}>
<Link className="text-primary" href={NEXT_PUBLIC_WEBAPP_URL()}>
Crove Sign
</Link>

…t text

The email asset-url and share OG composition serve from
apps/remix/public/static/, not packages/assets/static/ - add those
paths to the rasterizer targets so the live Documenso logo.png and
og-share-frame2.png actually get replaced. Also fix the remaining
alt="Documenso Logo" in the admin-user-created email template.

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⏱️ Code Review completed (9 files · 23,508 chars · 1 PR unit(s))

⏱️ Adversarial Review completed (Model: qwen3.8-27b)

🔍 Verified Adversarial Review Findings

📋 Findings Summary (1 inline finding)

  • 🟡 IMPORTANT packages/email/template-components/template-footer.tsx:37: Brand Mismatch in Email Footer Link Text (💡 1-click suggestion on diff)

💡 1-Click Suggestions Ready: Go to the Files changed tab to review and apply 1 suggestion directly with 1-click commit.

🛡️ Dismissed Claims

  • None: No other candidate issues were provided for review.

<Trans>
This document was sent using{' '}
<Link className="text-primary" href="https://documen.so/mail-footer">
<Link className="text-primary" href={NEXT_PUBLIC_WEBAPP_URL()}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 IMPORTANT: Brand Mismatch in Email Footer Link Text

Failure Trace:

  1. The diff modifies template-footer.tsx to change the href of the footer link from https://documen.so/mail-footer to NEXT_PUBLIC_WEBAPP_URL() (which resolves to the Crove Sign domain, e.g., https://crove.com).
    2. However, the text content inside the <Link> tag remains hardcoded as Documenso (line 37 in the new file context: Documenso).
    3. When an email is rendered, the user sees "This document was sent using Documenso" with a hyperlink pointing to the Crove Sign website.
    4. This contradicts the explicit branding intent of the PR (renaming to "Crove Sign" in metadata, logos, and other components) and creates a confusing user experience where the brand name in the text does not match the destination of the link.
Suggested change
<Link className="text-primary" href={NEXT_PUBLIC_WEBAPP_URL()}>
<Link className="text-primary" href={NEXT_PUBLIC_WEBAPP_URL()}>
Crove Sign
</Link>

JOY (JOY) added a commit that referenced this pull request Sep 24, 2026
…ies claim

Phase 7 items delivered by open PRs (#17, #18) stay unchecked until
they merge; the branding binaries claim is scoped to the served copies
in apps/remix/public/static/.
@JOY
JOY (JOY) merged commit de10a8e into main Sep 24, 2026
11 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant