Skip to content

refactor(ui): Add Architecture Builder with AWS component palette and UI cleanup#14

Merged
crypticsaiyan merged 2 commits into
devfrom
refactor/ui
Dec 14, 2025
Merged

refactor(ui): Add Architecture Builder with AWS component palette and UI cleanup#14
crypticsaiyan merged 2 commits into
devfrom
refactor/ui

Conversation

@crypticsaiyan

@crypticsaiyan crypticsaiyan commented Dec 14, 2025

Copy link
Copy Markdown
Owner

Pull Request

Description

Major UI improvements including a new Architecture Builder with drag-and-drop component palette, full AWS service name mapping, and streamlined navigation.

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to change)
  • 📚 Documentation update
  • 🔧 Configuration change
  • ♻️ Refactor (no functional changes)
  • 🏗️ Infrastructure/IaC change

Changes Made

  • Remove text prompt input box from homepage hero section
  • Remove placeholder navigation links from header (Solutions, Use Cases, Developers)
  • Simplify footer with only essential links (Pipeline, Dashboard, GitHub)
  • Add component palette sidebar with 21 AWS services in 6 categories
  • Add click-to-place workflow for building architectures manually
  • Add full AWS service name mapping (e.g., "Rds" → "Amazon RDS")
  • Add AWS brand colors for service categories
  • Add "Download" and "Open in Dashboard" buttons to GraphViewer
  • Implement localStorage transfer for graph data between pipeline and dashboard
  • Add suppressHydrationWarning to prevent browser extension errors

Infrastructure Changes (if applicable)

  • Terraform files modified
  • New cloud resources added
  • Security groups/IAM policies changed
  • Cost impact assessed

Testing

  • Unit tests pass
  • Integration tests pass
  • Manual testing completed
  • IaC validation (terraform validate) passes

Test Evidence

  • Component palette displays all 6 categories (Compute, Database, Network, Storage, Messaging, Security)
  • Click-to-place adds nodes correctly to canvas
  • Import/Export graph.json works
  • "Open in Dashboard" transfers graph via localStorage successfully
  • Full AWS service names display correctly in nodes

Checklist

  • My code follows the project's coding standards
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings or errors
  • I have added tests that prove my fix/feature works
  • New and existing unit tests pass locally
  • Any dependent changes have been merged and published

CodeRabbit Review

  • I have addressed all CodeRabbit suggestions
  • Critical security/performance issues resolved
  • IaC best practices followed (for infrastructure changes)

Screenshots (if applicable)

image

Additional Notes

This PR focuses on improving the user experience by:

  1. Making the dashboard a full-featured architecture builder
  2. Providing seamless graph transfer from pipeline to dashboard
  3. Using proper AWS service branding (names and colors)

This PR will be automatically reviewed by CodeRabbit 🐰

Summary by CodeRabbit

  • New Features

    • Redesigned dashboard with interactive component palette for creating infrastructure graphs
    • Drag-and-drop node placement on canvas with category-based components (compute, database, network, storage, messaging, security)
    • Graph persistence via local storage with automatic loading on page return
    • Export graphs as JSON and import existing graphs
  • UI/UX Improvements

    • Modernized dashboard layout with top header and organized palette
    • Streamlined navigation with Pipeline and Dashboard links
    • Enhanced graph viewer with download and open-in-dashboard functionality
    • Improved overall visual design and responsive behavior
  • Bug Fixes

    • Resolved hydration mismatch warnings

✏️ Tip: You can customize this high-level summary in your review settings.

Add component palette, AWS service names, and graph transfer to dashboard
- Add component palette with 21 AWS services for drag-and-drop architecture building
- Add full AWS service name mapping (Rds → Amazon RDS, etc.)
- Add 'Open in Dashboard' button in pipeline graph viewer with localStorage transfer
- Remove prompt input and placeholder links from homepage
- Simplify header/footer with only functional links
- Add suppressHydrationWarning to fix browser extension errors
@coderabbitai

coderabbitai Bot commented Dec 14, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This PR overhauls the application's interface from a prompt-input workflow to a pipeline-centric design. The dashboard layout shifts from a sidebar to a header-based structure with a dynamic component palette, introduces service-to-icon/color mappings for infrastructure nodes, adds localStorage persistence for graph state, and enables node creation via canvas clicks. Navigation and footer links are simplified to focus on core features.

Changes

Cohort / File(s) Summary
Dashboard Core
ui/app/dashboard/page.jsx, ui/app/dashboard/page.module.css
Introduces PALETTE_ITEMS with compute/database/network/storage/messaging/security components; adds SERVICE_NAME_MAP, SERVICE_COLORS, ICON_MAP helpers; reworks InfrastructureNode rendering to use dynamic icons/colors/labels; replaces sidebar layout with header + collapsible palette; implements localStorage graph loading on mount; adds canvas click interaction for node placement; replaces Kestra-specific import/export with generalized graph handling; adds Clear Canvas and metadata panel features.
Home Page Updates
ui/app/page.jsx, ui/app/page.module.css
Removes prompt input UI and state management; replaces signup CTA with pipeline-focused CTA linking to /pipeline; updates secondary CTA label from "View Demo" to "View Dashboard"; adds new Pipeline CTA block with Zap icon and hint text.
Navigation & Footer
ui/components/Header.jsx, ui/components/Footer.jsx, ui/components/Footer.module.css
Removes three header nav items (Solutions, Use Cases, Developers); simplifies footer links to Pipeline, Dashboard, and GitHub; renames footer container class from .top to .content; redesigns footer styling with adjusted padding, typography, and responsive behavior.
Layout Configuration
ui/app/layout.jsx
Adds suppressHydrationWarning attributes to html and body elements for hydration mismatch suppression.
Graph Viewer
ui/components/viewers/GraphViewer.jsx, ui/components/viewers/GraphViewer.module.css
Adds SERVICE_NAME_MAP and getFullServiceName helper for display-friendly node names; replaces graph icon with Layers icon; expands header with stats (node/edge counts) and right-aligned action buttons (Download as JSON, Open in Dashboard); implements localStorage-based graph export and new tab dashboard navigation.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Areas requiring extra attention:

  • Dashboard page logic — The new palette system, localStorage graph loading, canvas node placement, and dynamic mapping logic all interact with React Flow and need careful validation for edge cases (malformed localStorage data, coordinate calculations on different screen sizes).
  • Extensive CSS restructuring — The shift from sidebar to header layout spans multiple breakpoints; verify responsive behavior at various viewport widths, particularly the collapsible palette and header wrapping.
  • Service mapping consistency — The SERVICE_NAME_MAP, SERVICE_COLORS, and ICON_MAP are duplicated across dashboard/page.jsx and viewers/GraphViewer.jsx; consider whether these should be centralized to avoid drift.
  • localStorage persistence — The graph loading logic uses JSON.parse with error handling, but verify the data structure contracts between what's saved and what's loaded.

Possibly related PRs

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main changes: a UI refactor introducing an Architecture Builder with AWS component palette and general UI cleanup across multiple pages and components.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/ui

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

@github-actions

Copy link
Copy Markdown

🐰 CodeRabbit Review Reminder

This PR will be automatically reviewed by CodeRabbit. Please ensure:

  • All CodeRabbit suggestions have been addressed
  • Critical issues are resolved before requesting human review
  • IaC changes follow security best practices

Tip: Reply to CodeRabbit comments with @coderabbitai to get clarifications or request re-reviews.


Maintainer approval is required after addressing CodeRabbit feedback.

@coderabbitai

coderabbitai Bot commented Dec 14, 2025

Copy link
Copy Markdown
Contributor

Hey there! 👋 I see this is the automated reminder to review this PR. I'm on it!

I'll start reviewing the Architecture Builder changes, including:

  • The new component palette with AWS services
  • UI cleanup (removed text prompt, simplified navigation)
  • Graph data transfer between pipeline and dashboard
  • AWS service name mapping and branding

Let me dive into the code and provide you with a comprehensive review! 🔍

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ui/app/layout.jsx (1)

11-21: Be careful: global suppressHydrationWarning can hide real hydration bugs
I get why you added it (extensions love to mutate the DOM), but putting it on html + body means you won’t see legit mismatches your app causes. If possible, scope it to the smallest subtree that’s actually noisy.

🧹 Nitpick comments (5)
ui/components/viewers/GraphViewer.module.css (1)

58-104: Header action buttons: good structure; double-check contrast + focus states
The layout/classes are clean. Just make sure the “white gradient” dashboard button still has strong contrast on all themes and that keyboard focus is visible (outline/ring), not just hover.

ui/components/viewers/GraphViewer.jsx (1)

17-35: Service-name mapping is helpful, but it’s duplicated elsewhere (easy to drift)
Since SERVICE_NAME_MAP now exists in multiple files, consider moving it to a shared module so you don’t fix a name in one place and forget the other.

ui/app/dashboard/page.jsx (2)

48-170: Palette + mapping approach is solid, but you’ve now got duplicated maps across the app
Same note as GraphViewer: consider sharing these constants/helpers so the dashboard + viewer don’t slowly diverge.


311-320: Export is functional, but it drops a lot of graph fidelity
You only export edge {id, source, target} (and node data without node style). If users expect “export then import gives me the same diagram,” you’ll want to include edge type/style/animated + node style/viewport.

ui/components/Footer.jsx (1)

29-33: Consider extracting the GitHub URL to a constant.

Hey! The footer simplification looks solid – using Next.js Link for internal routes and a proper <a> tag for the external GitHub link with correct security attributes (rel="noopener noreferrer").

For slightly better maintainability, you could extract the GitHub URL to a constant at the top of the file, especially if you reference this repo URL elsewhere in the codebase:

+const GITHUB_REPO_URL = "https://github.com/crypticsaiyan/infoundry";

 export default function Footer() {
   const currentYear = new Date().getFullYear();

Then use it in the link:

-            <a href="https://github.com/crypticsaiyan/infoundry" target="_blank" rel="noopener noreferrer" className={styles.link}>
+            <a href={GITHUB_REPO_URL} target="_blank" rel="noopener noreferrer" className={styles.link}>

But honestly, for just one reference, hardcoding it here is totally fine too!

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between df9a096 and 31f891f.

📒 Files selected for processing (10)
  • ui/app/dashboard/page.jsx (4 hunks)
  • ui/app/dashboard/page.module.css (5 hunks)
  • ui/app/layout.jsx (2 hunks)
  • ui/app/page.jsx (3 hunks)
  • ui/app/page.module.css (2 hunks)
  • ui/components/Footer.jsx (2 hunks)
  • ui/components/Footer.module.css (1 hunks)
  • ui/components/Header.jsx (0 hunks)
  • ui/components/viewers/GraphViewer.jsx (5 hunks)
  • ui/components/viewers/GraphViewer.module.css (1 hunks)
💤 Files with no reviewable changes (1)
  • ui/components/Header.jsx
🔇 Additional comments (15)
ui/components/viewers/GraphViewer.module.css (1)

46-56: Typography tweaks look fine
The smaller stats read well and match the “header controls” vibe.

ui/app/page.jsx (2)

4-4: Icon import update is fine
Swapping to Zap fits the new pipeline CTA direction.


137-143: CTA buttons match the new “pipeline-first” flow
Linking primary → /pipeline and renaming secondary → “View Dashboard” is consistent and clearer.

ui/app/page.module.css (2)

160-191: Pipeline CTA styling is clean and matches the new hero block
Button + hint spacing reads well.


300-313: Nice: ctaPrimary inline-flex makes icon+text alignment “just work”
This is the right move for consistent button layout.

ui/components/viewers/GraphViewer.jsx (1)

82-99: Displaying fullName is a solid UX upgrade
Just note: if upstream graph nodes ever include data.type, you’ll get more accurate naming than relying on labels.

ui/app/dashboard/page.module.css (1)

8-104: Header-first layout styles look consistent
Spacing/typography feels aligned with the rest of the app and the responsive wrap rules make sense.

ui/app/dashboard/page.jsx (1)

221-254: localStorage load flow is good (and you clean up after yourself)
The try/catch + removeItem is the right pattern for “handoff” state.

ui/components/Footer.jsx (1)

10-10: Nice! Container naming aligns with CSS refactor.

The rename from styles.top to styles.content is more semantic and matches the updated CSS module. Clean coordination between the component and styles.

ui/components/Footer.module.css (6)

1-7: Footer base styles look clean!

Using CSS custom properties (var(--spacing-2xl), var(--color-bg-primary)) for theming is the right approach. Makes it easy to maintain consistent spacing and colors across your app.


14-20: Content layout is solid.

The flexbox setup with space-between and centered alignment creates a nice balanced footer layout. The rename to .content is more semantic than .top – good call!


29-41: Love the logo hover effect!

Adding the opacity transition on hover (lines 36, 39-41) is a subtle but nice touch for user interaction. The reduced font-weight (600 instead of 700) also gives it a more modern, less heavy feel. Clean work!


57-73: Links section styling is on point.

The horizontal layout with proper spacing and hover states works well for your simplified 3-link footer. Font-weight 500 strikes a nice balance – not too bold, not too light.


82-82: Heads up: Copyright text is at the accessibility minimum.

The copyright font-size of 0.75rem (12px) is technically at the minimum threshold recommended by WCAG. While it's acceptable for secondary footer content, some users might find it a bit small, especially on lower-resolution displays.

If you want to be extra safe for accessibility, consider bumping it to 0.875rem (14px):

 .copyright {
-  font-size: 0.75rem;
+  font-size: 0.875rem;
   color: var(--color-text-muted);
   text-align: center;
 }

But since this is copyright text (which is typically small in most footers), the current size is a reasonable choice if you're optimizing for design consistency.


87-103: Responsive design handles mobile nicely.

The breakpoint at 640px switches to a centered column layout, which is perfect for mobile. The links get flex-wrap and centered justification, so they'll stack naturally on smaller screens. This will look good on phones!

Comment thread ui/app/dashboard/page.jsx
Comment thread ui/app/dashboard/page.jsx
Comment thread ui/app/dashboard/page.jsx
Comment thread ui/app/dashboard/page.module.css
Comment thread ui/app/page.jsx
Comment thread ui/components/viewers/GraphViewer.jsx
@crypticsaiyan crypticsaiyan merged commit 37e138a into dev Dec 14, 2025
16 checks passed
@crypticsaiyan crypticsaiyan deleted the refactor/ui branch December 14, 2025 11:39
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