Skip to content

💄(frontend) redesign error pages with Figma layout#2528

Open
Ovgodd wants to merge 11 commits into
mainfrom
feat/error-pages-redesign
Open

💄(frontend) redesign error pages with Figma layout#2528
Ovgodd wants to merge 11 commits into
mainfrom
feat/error-pages-redesign

Conversation

@Ovgodd

@Ovgodd Ovgodd commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

Purpose

This PR redesigns error and access-related pages (404, 500, 503, 401, 403, email confirmation) to match the new Figma specs, with consistent layout, typography, icons, and action links.

Figma : here
issue : 1561

newerrorpage.mp4

Proposal

  • Add new SVG illustrations for 404, 500, 503, access denied, and email confirmation
  • Refactor shared ErrorPage component (102×72 icon, 12px description, text-link actions)
  • Update 404, 500, and generic _error pages to use ErrorPage
  • Update 401 and 403 access denied pages to the new UI
  • Update offline/503 and email confirmation pages to the new UI
  • Extract shared styles (errorActionStyles, errorDescriptionStyles) and reuse ErrorPage on offline page

Add SVGs for 404, 500, 503, access denied, and email confirmation pages.
<ErrorActionLink
onClick={() =>
safeTarget
? window.location.assign(safeTarget)
@Ovgodd Ovgodd self-assigned this Jul 15, 2026
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Size Change: +11.3 kB (+0.26%)

Total Size: 4.38 MB

📦 View Changed
Filename Size Change
apps/impress/out/_next/static/7a4350c6/_buildManifest.js 696 B +696 B (new file) 🆕
apps/impress/out/_next/static/chunks/2014.js 2.93 kB +2.93 kB (new file) 🆕
apps/impress/out/_next/static/chunks/4749.js 51.7 kB -7.68 kB (-12.93%) 👏
apps/impress/out/_next/static/chunks/6954.js 8.51 kB +8.51 kB (new file) 🆕
apps/impress/out/_next/static/chunks/pages/_app.js 534 kB +8.38 kB (+1.59%)
apps/impress/out/_next/static/chunks/pages/404.js 3.21 kB +2.05 kB (+176.9%) 🆘
apps/impress/out/_next/static/chunks/pages/home.js 9.14 kB -675 B (-6.88%)
apps/impress/out/_next/static/chunks/pages/offline.js 3.29 kB -2.27 kB (-40.87%) 🎉
apps/impress/out/_next/static/ee74455e/_buildManifest.js 0 B -696 B (removed) 🏆

compressed-size-action

@Ovgodd Ovgodd changed the title Feat/error pages redesign 💄(frontend) redesign error pages with Figma layout Jul 16, 2026
@Ovgodd
Ovgodd force-pushed the feat/error-pages-redesign branch from 857da66 to 4421482 Compare July 16, 2026 14:13
@Ovgodd Ovgodd moved this to In Progress in LaSuite Docs Jul 17, 2026
Ovgodd added 9 commits July 17, 2026 14:30
Use SVG icons, 102x72 layout, 12px description and text-link actions.
Wire new SVG icons and show Home plus Refresh actions on error pages.
Apply new illustration, typography and text-link actions for access errors.
Align 503 offline page and user reconciliation screen with Figma design.
Apply consistent flex centering and replace Material home icon in ErrorPage.
Use Cunningham button on 401 and ui-kit icons with brand tertiary on 403.
Align e2e assertions with redesigned access denied pages.
Export action and description styles from ErrorPage and simplify offline page.
Use Docs logo header and bottom actions without sidebar on error pages.
@Ovgodd
Ovgodd force-pushed the feat/error-pages-redesign branch from 1b44ae9 to 22638bb Compare July 17, 2026 12:38
@Ovgodd
Ovgodd requested a review from AntoLC July 17, 2026 12:48
@Ovgodd
Ovgodd marked this pull request as ready for review July 17, 2026 13:26
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 14c42f41-05fc-4bf4-8e55-1d06e9fd923b

📥 Commits

Reviewing files that changed from the base of the PR and between 51b0d03 and 93bf4d8.

📒 Files selected for processing (1)
  • src/frontend/apps/impress/src/features/docs/doc-management/components/DocPage403.tsx

Walkthrough

The PR redesigns frontend error pages around shared ErrorPage, header, footer, and layout-slot components. The 401, 403, 404, 500, framework error, offline, and reconciliation routes adopt new SVG visuals, text, actions, metadata, and layout composition. Access requests retain conditional request behavior. End-to-end tests now expect “Sign in” copy and “Access denied” titles, and the changelog records the redesign.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers: antolc

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

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.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: redesigning frontend error pages using the Figma layout.
Description check ✅ Passed The description matches the changeset and accurately describes the redesigned error and access-related pages.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ 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 feat/error-pages-redesign

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.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx`:
- Line 65: Update the useUserReconciliationsQuery call to destructure its
refetch function, then replace the ErrorActionLink window.location.reload
callback with refetch so resending the email re-triggers the managed query
without a full page reload.

In
`@src/frontend/apps/impress/src/features/docs/doc-management/components/DocPage403.tsx`:
- Around line 69-71: Update the title element in DocPage403 so its translated
“Access denied” and “Docs” values are combined into one interpolated string
rather than separate JSX children, preserving the existing title text and
separator.
- Around line 130-133: Update the useCreateDocAccessRequest destructuring to
capture its mutation-in-progress state, then combine that state with
hasRequested in RequestAccessButton’s disabled condition so rapid clicks cannot
dispatch duplicate requests.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 3fa7b2ba-4097-4894-b3be-b3a177af0064

📥 Commits

Reviewing files that changed from the base of the PR and between 8d2dd5b and 51b0d03.

⛔ Files ignored due to path filters (8)
  • src/frontend/apps/impress/src/assets/icons/404.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/500.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/503.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/DOCS.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/Docs Locked.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/Mail.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/bubble-text.svg is excluded by !**/*.svg
  • src/frontend/apps/impress/src/assets/icons/retry.svg is excluded by !**/*.svg
📒 Files selected for processing (18)
  • CHANGELOG.md
  • src/frontend/apps/e2e/__tests__/app-impress/doc-routing.spec.ts
  • src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts
  • src/frontend/apps/e2e/__tests__/app-impress/utils-share.ts
  • src/frontend/apps/impress/src/components/ErrorPage.tsx
  • src/frontend/apps/impress/src/components/ErrorPageFooter.tsx
  • src/frontend/apps/impress/src/components/ErrorPageHeader.tsx
  • src/frontend/apps/impress/src/components/index.ts
  • src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx
  • src/frontend/apps/impress/src/features/docs/doc-management/components/DocPage403.tsx
  • src/frontend/apps/impress/src/layouts/PageLayout.tsx
  • src/frontend/apps/impress/src/pages/401.tsx
  • src/frontend/apps/impress/src/pages/404.tsx
  • src/frontend/apps/impress/src/pages/500.tsx
  • src/frontend/apps/impress/src/pages/_error.tsx
  • src/frontend/apps/impress/src/pages/offline/index.tsx
  • src/frontend/apps/impress/src/pages/user-reconciliations/active/[id]/index.tsx
  • src/frontend/apps/impress/src/pages/user-reconciliations/inactive/[id]/index.tsx

$gap="0.5rem"
$css="margin-top: 20px;"
>
<ErrorActionLink onClick={() => window.location.reload()}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Avoid a full page reload for resending the email.

Calling window.location.reload() forces a hard browser refresh, which disrupts the SPA experience. Since useUserReconciliationsQuery is managing the data fetch (and likely triggering the email), you can extract its refetch function to gracefully re-trigger the API request.

♻️ Proposed fix

First, extract refetch from your query on line 26:

const { data: userReconciliations, isError, refetch } = useUserReconciliationsQuery({
  type,
  reconciliationId,
});

Then, replace the hard reload with refetch:

-        <ErrorActionLink onClick={() => window.location.reload()}>
+        <ErrorActionLink onClick={() => void refetch()}>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx`
at line 65, Update the useUserReconciliationsQuery call to destructure its
refetch function, then replace the ErrorActionLink window.location.reload
callback with refetch so resending the email re-triggers the managed query
without a full page reload.

Comment on lines 69 to 71
<title>
{t('Access Denied - Error 403')} - {t('Docs')}
{t('Access denied')} - {t('Docs')}
</title>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Format the <title> content as a single string.

next/head can issue warnings or format text incorrectly when <title> contains multiple children spread across lines. It's safer to use template literals to guarantee a single text string.

♻️ Proposed fix
-        <title>
-          {t('Access denied')} - {t('Docs')}
-        </title>
+        <title>{`${t('Access denied')} - ${t('Docs')}`}</title>
📝 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
<title>
{t('Access Denied - Error 403')} - {t('Docs')}
{t('Access denied')} - {t('Docs')}
</title>
<title>{`${t('Access denied')} - ${t('Docs')}`}</title>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/frontend/apps/impress/src/features/docs/doc-management/components/DocPage403.tsx`
around lines 69 - 71, Update the title element in DocPage403 so its translated
“Access denied” and “Docs” values are combined into one interpolated string
rather than separate JSX children, preserving the existing title text and
separator.

Comment on lines +130 to +133
<RequestAccessButton
onClick={() => createRequest({ docId: id, role: Role.EDITOR })}
disabled={hasRequested}
>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Disable the button while the request mutation is in progress.

Currently, the button is only disabled once hasRequested becomes true (which happens after the query refetch completes). If a user clicks rapidly, multiple API requests could be dispatched. Destructuring the mutation's loading state and adding it to the disabled condition will prevent this.

♻️ Proposed fix

First, extract the pending state from useCreateDocAccessRequest (line 55):

// Note: Depending on your React Query version, use `isLoading` (v4) or `isPending` (v5).
const { mutate: createRequest, isPending } = useCreateDocAccessRequest();

Then, include it in the disabled prop:

             <RequestAccessButton
               onClick={() => createRequest({ docId: id, role: Role.EDITOR })}
-              disabled={hasRequested}
+              disabled={hasRequested || isPending}
             >
📝 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
<RequestAccessButton
onClick={() => createRequest({ docId: id, role: Role.EDITOR })}
disabled={hasRequested}
>
<RequestAccessButton
onClick={() => createRequest({ docId: id, role: Role.EDITOR })}
disabled={hasRequested || isPending}
>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/frontend/apps/impress/src/features/docs/doc-management/components/DocPage403.tsx`
around lines 130 - 133, Update the useCreateDocAccessRequest destructuring to
capture its mutation-in-progress state, then combine that state with
hasRequested in RequestAccessButton’s disabled condition so rapid clicks cannot
dispatch duplicate requests.

@Ovgodd
Ovgodd force-pushed the feat/error-pages-redesign branch from 51b0d03 to 93bf4d8 Compare July 17, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants