Skip to content

redesign: editorial broadsheet layout for authenticated app - #19

Merged
holkexyz merged 2 commits into
mainfrom
redesign/editorial-broadsheet
Mar 26, 2026
Merged

redesign: editorial broadsheet layout for authenticated app#19
holkexyz merged 2 commits into
mainfrom
redesign/editorial-broadsheet

Conversation

@holkexyz

@holkexyz holkexyz commented Mar 26, 2026

Copy link
Copy Markdown
Member

Summary

  • Replace dark sidebar with light horizontal top navbar (same component as landing page, renders nav links + avatar when authenticated)
  • Convert boxed cards to ruled sections with uppercase eyebrow-style titles
  • Center all content in a ~720px column on off-white background with generous serif typography
  • Add faint guilloche watermark behind page titles
  • Restyle buttons to solid navy primary / subtle border secondary
  • Underline-only form inputs matching editorial minimalism
  • Footer now visible for authenticated users
  • Mobile: hamburger dropdown replaces slide-in sidebar

Files changed

  • globals.css — Major CSS overhaul (deleted sidebar/mobile-header, rewrote dashboard/dash-card/app-shell)
  • navbar.tsx — Renders for authenticated users with nav links + avatar
  • app-shell.tsx — Simplified to thin content wrapper
  • footer.tsx — Removed auth guard
  • home-client.tsx — Removed aside column and SignInPreviewCard
  • button.tsx — Restyled primary/secondary variants
  • Settings/wallet/my-data pages — Removed mt-4 spacing

Test plan

  • Landing page unchanged (hero, sections, footer)
  • Sign in flow works
  • Top nav shows PROFILE / APPS / SETTINGS with active state
  • Profile page: banner, avatar, serif name, ruled sections
  • Settings page: eyebrow titles, underline inputs
  • Connected Apps page renders correctly
  • Mobile: hamburger menu with dropdown nav
  • Footer visible on authenticated pages
  • Sign out works from top nav

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Authenticated top navigation with active-link highlighting, user avatar, sign-out, and mobile hamburger dropdown
  • Style

    • Redesigned dashboard to a centered, single-column layout (removed sidebar layout)
    • Cards restyled with border/divider visuals and adjusted spacing/typography
    • Inputs switched to bottom-border-only focus styles
    • Buttons updated to a navy color theme
    • Footer visibility refined for authenticated/landing states
  • Content

    • Shortened unauthenticated landing hero subtitle and removed sidebar preview card

Replace the dark sidebar with a light horizontal top navbar that matches
the landing page. Cards become ruled sections with eyebrow-style titles.
Content flows in a centered ~720px column with generous serif typography,
faint guilloche watermarks, and underline-only form inputs.

- Navbar now renders for authenticated users (nav links + avatar)
- AppShell simplified to a thin content wrapper (no sidebar/overlay)
- Footer visible for authenticated users
- dash-card: transparent bg, bottom rules, uppercase eyebrow titles
- profile-card: larger serif name, full-width banner
- Buttons restyled to solid navy primary / subtle border secondary
- Mobile: hamburger dropdown replaces slide-in sidebar

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Mar 26, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
certified-app Ready Ready Preview, Comment Mar 26, 2026 6:12am

Request Review

@coderabbitai

coderabbitai Bot commented Mar 26, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6ce56be4-e8c6-4665-825f-0f419a149f96

📥 Commits

Reviewing files that changed from the base of the PR and between d80afa6 and d793d72.

📒 Files selected for processing (1)
  • src/components/layout/footer.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/components/layout/footer.tsx

📝 Walkthrough

Walkthrough

Removed the left sidebar layout and related state/UI, introduced an authenticated top navigation and responsive dropdown, refactored dashboard/card/profile/button styles in CSS, and removed sidebar-related markup and mobile header from the shell.

Changes

Cohort / File(s) Summary
Global styles
src/app/globals.css
Major CSS refactor: removed sidebar layout/overlay styles, added authenticated top-nav styles (links, user area, hamburger, dropdown via --open), single-column dashboard layout, updated dash-card/profile/banner/button styling and responsive breakpoints.
Shell, Navbar & Footer
src/components/layout/app-shell.tsx, src/components/layout/navbar.tsx, src/components/layout/footer.tsx
Removed sidebar state, effects, mobile header, overlay and Sidebar component from AppShell. Navbar now renders full authenticated navigation with route-aware active links, avatar, sign-out and mobile dropdown state. Footer hide logic refined to only hide on unauthenticated landing.
Landing / Authenticated preview
src/components/landing/home-client.tsx
Removed dynamic SignInPreviewCard sidebar usage, removed authenticated sidebar rendering, shortened hero subtitle, and removed mt-4 from Account Details card wrapper.
Settings pages (minor layout tweaks)
src/app/settings/my-data/page.tsx, src/app/settings/page.tsx, src/app/settings/wallet/page.tsx
Removed mt-4 utility from several dash-card containers; no functional logic changes.
UI Button
src/components/ui/button.tsx
Adjusted base typography (removed font-mono), reworked primary and secondary variants to use navy-themed CSS variables and updated hover/border behavior; ghost/destructive unchanged.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 The sidebar hopped away with cheer,
A top-nav sprang where users steer,
Navy buttons, cards reborn,
Single column greets the morn,
I nibble changes — bright and clear! 🥕✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately reflects the main design change from a dark sidebar layout to an editorial broadsheet layout with horizontal navigation for authenticated users.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ 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 redesign/editorial-broadsheet

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.

The footer was hidden on pathname "/" to avoid duplicating the landing
page's inline footer. Now it checks auth state — only hides when
unauthenticated (landing page), shows when authenticated (profile page).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@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: 1

🧹 Nitpick comments (2)
src/app/globals.css (1)

2803-2806: Minor: Empty CSS rule.

The .dashboard__body--single class is now a no-op comment. Consider removing this class from the codebase entirely if it's no longer needed, or document why it's kept for future use.

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

In `@src/app/globals.css` around lines 2803 - 2806, The .dashboard__body--single
CSS rule is an empty no-op and should be removed or documented; either delete
the .dashboard__body--single block from globals.css to clean up dead CSS, or add
a brief comment above the selector explaining why it must remain for
compatibility (e.g., retained for legacy markup or third-party integrations) so
future readers know its intent; locate the selector ".dashboard__body--single"
in globals.css and apply one of these fixes.
src/components/layout/navbar.tsx (1)

49-55: Minor: Redundant ternary in navClasses.

Line 51 can be simplified since isAuthenticated ? "navbar--default" : (isTransparent ? "navbar--transparent" : "navbar--default") always results in "navbar--default" when authenticated.

♻️ Optional simplification
   const navClasses = [
     "navbar",
-    isAuthenticated ? "navbar--default" : (isTransparent ? "navbar--transparent" : "navbar--default"),
+    isTransparent ? "navbar--transparent" : "navbar--default",
     scrolled ? "navbar--scrolled" : "",
   ]

Since isTransparent is already false when authenticated (line 47), this produces the same result with cleaner logic.

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

In `@src/components/layout/navbar.tsx` around lines 49 - 55, The navClasses
construction uses a redundant nested ternary; replace the nested expression in
the array with a single check on isTransparent (e.g., use isTransparent ?
"navbar--transparent" : "navbar--default") since isTransparent is false when
isAuthenticated, and keep the existing scrolled entry and .filter(Boolean).
Update the expression referenced as navClasses (which currently reads the
ternary using isAuthenticated and isTransparent) to the simplified form to
improve readability.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/app/globals.css`:
- Around line 2579-2591: The CSS rule .dashboard__topbar::before references a
missing asset '/assets/guilloche_02.svg' causing 404s; fix by either adding the
missing SVG file named guilloche_02.svg into the public/assets (or assets)
directory so the background URL resolves, or remove/replace the background
property in the .dashboard__topbar::before rule to a valid asset or none (e.g.,
delete the background/background-size lines or point to an existing SVG) so the
pseudo-element no longer requests the non-existent file.

---

Nitpick comments:
In `@src/app/globals.css`:
- Around line 2803-2806: The .dashboard__body--single CSS rule is an empty no-op
and should be removed or documented; either delete the .dashboard__body--single
block from globals.css to clean up dead CSS, or add a brief comment above the
selector explaining why it must remain for compatibility (e.g., retained for
legacy markup or third-party integrations) so future readers know its intent;
locate the selector ".dashboard__body--single" in globals.css and apply one of
these fixes.

In `@src/components/layout/navbar.tsx`:
- Around line 49-55: The navClasses construction uses a redundant nested
ternary; replace the nested expression in the array with a single check on
isTransparent (e.g., use isTransparent ? "navbar--transparent" :
"navbar--default") since isTransparent is false when isAuthenticated, and keep
the existing scrolled entry and .filter(Boolean). Update the expression
referenced as navClasses (which currently reads the ternary using
isAuthenticated and isTransparent) to the simplified form to improve
readability.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6b330237-bf59-480d-a678-afc7ad394f6d

📥 Commits

Reviewing files that changed from the base of the PR and between 1d6e6c1 and d80afa6.

📒 Files selected for processing (9)
  • src/app/globals.css
  • src/app/settings/my-data/page.tsx
  • src/app/settings/page.tsx
  • src/app/settings/wallet/page.tsx
  • src/components/landing/home-client.tsx
  • src/components/layout/app-shell.tsx
  • src/components/layout/footer.tsx
  • src/components/layout/navbar.tsx
  • src/components/ui/button.tsx
💤 Files with no reviewable changes (2)
  • src/components/layout/footer.tsx
  • src/components/layout/app-shell.tsx

Comment thread src/app/globals.css
Comment on lines +2579 to 2591
.dashboard__topbar::before {
content: '';
position: absolute;
top: 50%;
right: -40px;
transform: translateY(-50%);
width: 200px;
height: 200px;
background: url('/assets/guilloche_02.svg') no-repeat center;
background-size: contain;
opacity: 0.04;
pointer-events: none;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if the guilloche SVG asset exists
fd "guilloche" public/assets 2>/dev/null || fd "guilloche" public 2>/dev/null || echo "Asset not found in public directory"

# Also check if any guilloche assets exist anywhere
fd -e svg "guilloche" .

Repository: hypercerts-org/certified-app

Length of output: 54


The guilloche SVG asset referenced in the CSS does not exist.

The .dashboard__topbar::before pseudo-element references /assets/guilloche_02.svg (line 2588), but this asset is not present in the repository. The browser will encounter a 404 error and the watermark visual effect will not display. Either add the missing guilloche_02.svg file to the public/assets/ directory or remove the background URL reference from the CSS.

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

In `@src/app/globals.css` around lines 2579 - 2591, The CSS rule
.dashboard__topbar::before references a missing asset '/assets/guilloche_02.svg'
causing 404s; fix by either adding the missing SVG file named guilloche_02.svg
into the public/assets (or assets) directory so the background URL resolves, or
remove/replace the background property in the .dashboard__topbar::before rule to
a valid asset or none (e.g., delete the background/background-size lines or
point to an existing SVG) so the pseudo-element no longer requests the
non-existent file.

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