Skip to content

feat(frontend): app shell, start screen, run console and YAML view - #78

Open
maan-iitd2 wants to merge 1 commit into
blackrock:mainfrom
maan-iitd2:pr/frontend-shell-run
Open

feat(frontend): app shell, start screen, run console and YAML view#78
maan-iitd2 wants to merge 1 commit into
blackrock:mainfrom
maan-iitd2:pr/frontend-shell-run

Conversation

@maan-iitd2

@maan-iitd2 maan-iitd2 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds the application shell for InGen Studio — the Next.js App Router routes, the start screen, the
run console, and the live YAML preview panel.

This is part 3 of the frontend series. All new files under frontend/src/ — nothing existing is
modified.

Area What it does
src/app/ App Router routes: pipeline list /, config workspace, /run, /history, per-interface editor route, plus BootGate and not-found.
src/components/layout/ AppShell — header, tab bar, YAML-panel toggle.
src/components/start/ Start screen: pipeline list, create, import-YAML.
src/components/run/ Run console — stage timeline, streaming logs, validation results, history view.
src/components/yaml/ Live YAML preview, regenerated from the model on every edit, with copy/download.
src/components/common/ Shared primitives (buttons, dialogs, MiniMarkdown).
src/index.css, src/App.css, src/assets/ Global styling and static assets.

Screenshots

Start screen — pipeline list, empty state:

Start screen

Run console — stage timeline, logs and validation results:

Run console

Live YAML view — re-serialized from the model on every edit, so the config handed to the CLI is never hidden from the user:

Live YAML view

Images are hosted on a pr-assets branch of the fork, so they add nothing to this diff.

⚠️ Please read before reviewing

This builds on #76 and the services PR, and CI will fail here until those merge. These
components import @/models/*, @/serializers/* and @/services/*. That is expected — not a
defect in this branch.

The diff is conflict-free and independent: no file here is touched by any other open PR, so it
can be merged in any order once its prerequisites land.

Design notes for reviewers

  • The YAML panel is the trust mechanism. It re-serialises from the model on every edit, so the
    user always sees exactly the config that will be handed to the CLI — the UI never becomes a
    black box over the YAML.
  • The run console mirrors the CLI's real stages (read → pre_process → format → validate →
    write) rather than inventing its own vocabulary, so the UI and CLI logs line up.
  • Routes are App Router server components where possible, with client boundaries pushed down to the
    interactive leaves.

Testing

Verified on a local integration branch (main + #76 + services PR + this PR + the editor PR):

  • npm run build — full next build compiles clean; all 6 routes generated (/, /_not-found,
    /configs/[configId], /configs/[configId]/history,
    /configs/[configId]/interfaces/[interfaceName], /configs/[configId]/run)
  • npm run test — 57/57 pass
  • npm run dev in mock mode — browser smoke pass: start screen → create pipeline → editor → run
    console, 0 console errors
  • Re-verified alongside the Python side: pytest test/ and pytest backend/tests/ (42 passed), no
    new failures; a real python -m ingen run and a real HTTP run through the backend both completed
    with all five stages ok

Quality gates

All green on the integration branch:

Gate Result
npm run lint 0 errors, 0 warnings
npm run test 57 / 57
npm run build compiles, all 6 routes generated
pytest test/ no new failures vs. baseline
pytest backend/tests/ 42 passed

🤖 Generated with Claude Code

Copilot AI 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.

🟡 Changes recommended

Persistence races, orphaned source data, responsive layout failures, and accessibility issues remain unresolved.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds the Next.js application shell, pipeline start flow, run/history views, navigation palette, YAML preview, and shared UI primitives.

Changes:

  • Adds App Router routes and persistent workspace layout.
  • Adds pipeline creation/import, source setup, execution, and history interfaces.
  • Adds live YAML rendering and shared dialogs/utilities.
File summaries
File Description
frontend/src/index.css Global application styling
frontend/src/components/yaml/YamlPreviewPanel.jsx Live YAML preview and export
frontend/src/components/start/Start.jsx Source-first onboarding
frontend/src/components/start/SourceLoader.jsx Source configuration and upload
frontend/src/components/start/EntryOverlay.jsx Editor mode selection
frontend/src/components/run/ValidationResults.jsx Validation report table
frontend/src/components/run/StageTimeline.jsx Run-stage visualization
frontend/src/components/run/RunConsole.jsx Execution console composition
frontend/src/components/run/OverridesForm.jsx Runtime override controls
frontend/src/components/run/LogStream.jsx Streaming log display
frontend/src/components/run/HistoryView.jsx Execution history
frontend/src/components/layout/WorkspaceLayout.jsx Three-pane workspace
frontend/src/components/layout/NavRail.jsx Graph/chat navigation rail
frontend/src/components/layout/navPaths.test.js Parent-route tests
frontend/src/components/layout/navPaths.js Parent-route resolution
frontend/src/components/layout/navPalette.test.js Palette configuration tests
frontend/src/components/layout/navPalette.js Graph node palette
frontend/src/components/layout/AppShell.jsx Persistent application shell
frontend/src/components/common/SourceActionDialog.jsx Source connection dialog
frontend/src/components/common/MiniMarkdown.jsx Safe minimal Markdown renderer
frontend/src/components/common/ListControls.jsx List ordering controls
frontend/src/components/common/ErrorBoundary.jsx UI error fallback
frontend/src/components/common/ConfirmDialog.jsx Confirmation modal
frontend/src/app/page.jsx Pipeline ledger route
frontend/src/app/not-found.jsx Not-found route
frontend/src/app/layout.jsx Root document layout
frontend/src/app/configs/[configId]/run/page.jsx Run route
frontend/src/app/configs/[configId]/page.jsx Config entry route
frontend/src/app/configs/[configId]/layout.jsx Config providers and layout
frontend/src/app/configs/[configId]/interfaces/[interfaceName]/page.jsx Interface editor route
frontend/src/app/configs/[configId]/history/page.jsx History route
frontend/src/app/BootGate.jsx Storage migration gate
Review details
  • Files reviewed: 32/32 changed files
  • Comments generated: 11
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread frontend/src/app/page.jsx
Comment on lines +55 to +64
const createPipeline = () => {
if (busy) return;
setBusy(true);
const id = makeId('cfg');
let model = createEmptyConfig({ id, name: 'Untitled pipeline' });
model = upsertInterface(model, 'interface_1', createEmptyInterface());
// Navigate optimistically, persist in the background.
getServices().config.create(model).catch(() => {}).finally(() => setBusy(false));
router.push(`/configs/${id}`);
};
Comment thread frontend/src/app/page.jsx
Comment on lines +232 to +236
<button
className="plx__icon-btn"
onClick={(e) => startRename(e, it.id, it.name)}
aria-label={`Rename ${it.name}`}
title="Rename"
Comment on lines +41 to +45
role="alertdialog"
aria-modal="true"
aria-labelledby="cdialog-title"
aria-describedby="cdialog-msg"
onClick={(e) => e.stopPropagation()}
Comment on lines +38 to +41
role="dialog"
aria-modal="true"
aria-labelledby="srcaction-title"
onClick={(e) => e.stopPropagation()}
Comment on lines +103 to +104
updateModel((m) => upsertSource(m, SOURCE_DEFAULTS[subtype](id)));
setColumns(id, []);
Comment on lines +84 to +92
const copy = async () => {
try {
await navigator.clipboard?.writeText(yaml);
setCopied(true);
setTimeout(() => setCopied(false), 1400);
} catch {
/* clipboard blocked — no-op */
}
};
Comment thread frontend/src/index.css
is used where those are installed, and fall back to solid system faces everywhere else.
This keeps the app working in air-gapped and CSP-restricted deployments. */

:root {
Comment thread frontend/src/index.css
Comment on lines +240 to +244
.navrail--collapsed .navrail__item span,
.navrail--collapsed .navrail__soon,
.navrail--collapsed .navrail__empty,
.navrail--collapsed .navrail-chat__title,
.navrail--collapsed .navrail-chat__session-text { display: none; }
Comment thread frontend/src/index.css
Comment on lines +614 to +617
@media (max-width: 1100px) {
.workspace__panes, .workspace__panes--noyaml { grid-template-columns: var(--rail-w) minmax(0, 1fr); }
.yamlpanel { display: none; }
}
Comment thread frontend/src/index.css
cursor: pointer; flex-shrink: 0; opacity: 0;
transition: opacity 0.12s, background 0.12s, color 0.12s;
}
.plx__row:hover .plx__icon-btn { opacity: 1; }
Signed-off-by: maan-iitd2 <maan.iitd.ac.in@gmail.com>
@Jatin-8898
Jatin-8898 force-pushed the pr/frontend-shell-run branch from 6b09fda to e501600 Compare September 9, 2026 18:53
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.

2 participants