Skip to content

feat(ui): add Service Configuration Generator#15

Merged
crypticsaiyan merged 1 commit into
devfrom
feat/ingest-options
Dec 14, 2025
Merged

feat(ui): add Service Configuration Generator#15
crypticsaiyan merged 1 commit into
devfrom
feat/ingest-options

Conversation

@crypticsaiyan

@crypticsaiyan crypticsaiyan commented Dec 14, 2025

Copy link
Copy Markdown
Owner

Description

Adds a new /configure page with an interactive Service Configuration Generator that allows users to manually configure their project's service profile. Users can specify languages, frameworks, databases, and message queues, then download a JSON configuration file to place in their repository. The ingest-repo pipeline now checks for this user-provided config before falling back to auto-detection.

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

  • Added ServiceConfigGenerator.jsx component with interactive checkbox selection for languages, frameworks, databases, and message queues
  • Created /configure page to host the configuration generator
  • Added JSON preview, copy, and download functionality
  • Updated 01-ingest-repo.yaml to check for .infoundry/service_profile.json before auto-detection
  • Added "Configure" link to header navigation
  • Added configure promo section on homepage

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

  • Verified page loads at /configure without hydration errors
  • Tested language selection triggers context-aware framework options
  • Confirmed JSON preview updates in real-time
  • Verified copy and download functionality works
  • Tested expand/collapse and delete service buttons

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)

This PR will be automatically reviewed by CodeRabbit 🐰

Summary by CodeRabbit

  • New Features

    • Added a Service Configuration Generator tool for manually building and configuring service profiles.
    • Introduced a new "Configure" section accessible from the main navigation.
    • Added a promotional link on the home page directing users to the configuration tool.
  • Backend Improvements

    • Simplified the service ingestion pipeline with support for user-provided service profile overrides.

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

@coderabbitai

coderabbitai Bot commented Dec 14, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This PR adds a new service configuration generator feature to the UI and refactors the backend ingest pipeline. Users can now manually configure services through an interactive page at /configure, overriding auto-detection. The pipeline is simplified to prioritize user-provided profiles stored in .infoundry/service_profile.json.

Changes

Cohort / File(s) Summary
Backend Pipeline Refactoring
orchestrator/kestra_pipelines/01-ingest-repo.yaml
Removes complex marker-based language/framework/database detection logic. Replaces extensive in-script analysis with streamlined flow that prefers user-provided service profiles; falls back to simplified auto-detection. Maintains consistent service_profile.json output.
Configuration Page
ui/app/configure/page.jsx, ui/app/configure/page.module.css
New Next.js page component with header, footer, and service config generator. Includes hero section with title/description and responsive styling with gradient title and centered layout.
Navigation Updates
ui/components/Header.jsx
Adds "Configure" navigation link pointing to /configure route in both desktop and mobile menu.
Service Configuration Generator
ui/components/ServiceConfigGenerator.jsx, ui/components/ServiceConfigGenerator.module.css
New interactive component for building and managing multiple services with per-service configuration (name, path, language, framework, ports, databases, queues). Features real-time JSON generation, clipboard copy, file download, and responsive styling.
Home Page Promotional Content
ui/app/page.jsx, ui/app/page.module.css
Adds promotional block in Features section linking to /configure. Includes new .configurePromo and .configureLink styles (note: duplicate style definitions appear in CSS file).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • ServiceConfigGenerator.jsx: Complex component with state management across multiple services, dynamic framework selection, port validation, and clipboard operations—review the logic flow and edge cases carefully.
  • Pipeline refactoring in 01-ingest-repo.yaml: Significant restructuring from analysis-heavy to profile-priority flow; verify that error handling and fallback logic work correctly when user profiles are missing.
  • CSS duplicates in page.module.css: The .configurePromo, .configurePromo p, .configureLink, and .configureLink:hover styles are defined twice in the file—one appears to be redundant and should be removed.

Possibly related PRs

  • PR #7: Also modifies orchestrator/kestra_pipelines/01-ingest-repo.yaml—this PR simplifies the detection logic that PR #7 introduced, so check for conflicts or integration issues.
  • PR #14: Updates ui/components/Header.jsx navigation structure; verify the "Configure" link integrates cleanly with any other nav changes.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% 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 'feat(ui): add Service Configuration Generator' directly describes the main change—adding a new UI component for service configuration, which is the primary focus of this PR.
✨ 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 feat/ingest-options

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
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Get PR details including changed files
echo "=== PR Details ==="
gh pr view 15 --json title,body,files,additions,deletions,state,author

echo -e "\n=== Changed Files List ==="
gh pr diff 15 --name-only

echo -e "\n=== PR Diff Stats ==="
gh pr diff 15 --stat

Length of output: 4463


🏁 Script executed:

#!/bin/bash

# Get the actual diff for key files
echo "=== ServiceConfigGenerator.jsx ==="
gh pr diff 15 --patch | grep -A 500 "diff --git a/ui/components/ServiceConfigGenerator.jsx" | head -200

echo -e "\n=== configure page.jsx ==="
gh pr diff 15 --patch | grep -A 50 "diff --git a/ui/app/configure/page.jsx"

echo -e "\n=== ingest-repo.yaml changes ==="
gh pr diff 15 --patch | grep -A 100 "diff --git a/orchestrator/kestra_pipelines/01-ingest-repo.yaml" | head -150

Length of output: 11352


@github-actions Hey there! 👋 I see this PR is ready for review. Let me dive into the changes and provide you with a comprehensive analysis of your Service Configuration Generator feature.

I'll be looking at:

  • The new ServiceConfigGenerator.jsx component (~454 lines)
  • The /configure page implementation
  • Updates to the ingest-repo.yaml pipeline for user-provided config support
  • Code quality, security, and best practices

Give me a moment to analyze all the changes!

✅ 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

🧹 Nitpick comments (5)
orchestrator/kestra_pipelines/01-ingest-repo.yaml (2)

84-111: Schema “normalization” is a good start, but type-check services.

You only check presence of "services", not that it’s the expected object shape. If it’s a list/string by accident, downstream logic might explode in weird ways.


60-65: Branch defaulting to main might bite you on older repos.

Not required, but you may want a fallback to master (or allow empty branch to use repo default if the plugin supports it).

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

1-7: Consider removing "use client" here to avoid client↔server boundary issues.

This page doesn’t use hooks; making it a Server Component by default reduces bundle size and avoids the “Client Component importing Server Component” footgun if Footer ever becomes server-only.

-"use client";
-
 import Header from "@/components/Header";
 import Footer from "@/components/Footer";
 import ServiceConfigGenerator from "@/components/ServiceConfigGenerator";
 import styles from "./page.module.css";
ui/components/ServiceConfigGenerator.jsx (2)

239-241: Using key={index} will make form state “hop” after deletions.

Classic React list issue: delete service 0 and suddenly service 1’s inputs appear under service 0. Add a stable id per service and use that as the key.


241-270: A11y polish: prefer real buttons + label icon-only buttons.

  • The expandable header is a div role="button"; using a <button type="button"> is simpler + more accessible.
  • Add aria-expanded / aria-controls for the collapsible region.
  • Icon-only delete button + the port “×” button should get aria-label (screen readers otherwise just get “button”).

Also applies to: 369-374

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 37e138a and f84dd2e.

📒 Files selected for processing (8)
  • orchestrator/kestra_pipelines/01-ingest-repo.yaml (1 hunks)
  • ui/app/configure/page.jsx (1 hunks)
  • ui/app/configure/page.module.css (1 hunks)
  • ui/app/page.jsx (1 hunks)
  • ui/app/page.module.css (1 hunks)
  • ui/components/Header.jsx (1 hunks)
  • ui/components/ServiceConfigGenerator.jsx (1 hunks)
  • ui/components/ServiceConfigGenerator.module.css (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
ui/app/configure/page.jsx (3)
ui/components/Header.jsx (1)
  • Header (17-90)
ui/components/ServiceConfigGenerator.jsx (1)
  • ServiceConfigGenerator (94-454)
ui/components/Footer.jsx (1)
  • Footer (4-45)
🔇 Additional comments (4)
ui/components/Header.jsx (1)

20-24: Nice and clean nav addition.

Adding "Configure" to navLinks automatically hooks into both desktop + mobile menus with no extra logic.

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

1-48: Looks good for a page-level layout module.

Tokens + responsive tweaks are straightforward; nothing sketchy here.

ui/app/page.jsx (1)

87-135: Promo block is simple and does the job.

Clear CTA + direct link to the new flow; nothing concerning.

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

273-301: Styling for the new promo CTA looks consistent.

Comment thread orchestrator/kestra_pipelines/01-ingest-repo.yaml
Comment thread orchestrator/kestra_pipelines/01-ingest-repo.yaml
Comment thread orchestrator/kestra_pipelines/01-ingest-repo.yaml
Comment thread ui/components/ServiceConfigGenerator.jsx
Comment thread ui/components/ServiceConfigGenerator.jsx
Comment thread ui/components/ServiceConfigGenerator.module.css
@crypticsaiyan crypticsaiyan merged commit 009bc86 into dev Dec 14, 2025
16 checks passed
@crypticsaiyan crypticsaiyan deleted the feat/ingest-options branch December 14, 2025 12:26
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