feat(frontend): FrontX portal foundation — shell + five screenset MFEs on ui-kit - #9
Conversation
|
Important Review skippedToo many files! This PR contains 782 files, which is 682 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. Usage-priced reviews support at most 300 files. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (782)
You can disable this status message by setting the 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. Comment |
|
Note for reviewers: the red backend check is pre-existing — |
de89ac2 to
f4faec4
Compare
Applied via frontx CLI (identities and refs recorded in studio-frontend/.frontx/provenance.json): - @gears-frontx/frontx-template-shell 0.1.0-alpha.2 (@develop) - @gears-frontx/frontx-template-mfe 0.1.0-alpha.0 (@develop) Known fresh-seed gotcha: 'npm run dev:all' builds only MFEs and expects dist-lib/ and workspace packages to exist — run 'npm run build:package && npm run build:packages' once after cloning. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
cfs init + cfs kit install cyber-pilot-kit-frontx@develop (0.3.0-alpha.1, resolved bac818226596) + cfs generate-agents. Generated agent surfaces are gitignored by the cfs-managed block; committed are the .cf-studio config/registration and the root navigation block (CLAUDE.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
Removed demo-mfe and both widgets fixtures; _blank-mfe stays as the copy source for new screensets. Manifests regenerated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
…ctions, Kits
Scaffolded per the template's add-mfe-package procedure (cyber-pilot kit
routing -> .frontx/ai bundle): each is a copy of _blank-mfe with its own
port (3010-3050), MF name, and 5-token GTS ids under the
constructor_studio namespace. Placeholder screens keep the scaffold's
bridge wiring (theme/language, i18n, RTL) and render title/description;
the scaffold's demo data layer (api/slices/effects) is kept untouched as
reference for when each area grows real content.
Note for upstream: the gts-id-conventions guideline's '{app} e.g.
acme.crm' substituted into the documented patterns yields 6-token
instance segments, which @globaltypesystem/gts-ts rejects (grammar is
exactly vendor.package.namespace.type.vN).
Verified: workspace tests green (19-21 per MFE), type-check, arch:deps
(0 violations), dev:all - all five screens mount in light and dark
themes with zero console errors.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
- Menu is permanently collapsed: labels remain reachable as tooltips; the logo header is no longer a toggle. - Header and Footer removed from Layout (components kept on disk — the user chrome returns with OIDC). - _blank-mfe keeps building as the scaffold but contributes no menu extension anymore. Known pre-existing template gap, not addressed here: root eslint config imports 'typescript-eslint' which no package declares, so npm run lint fails at config load. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
…MFEs PR-553 recipe, applied to all five screensets: ui-kit 0.3.0-alpha.3 exact-pinned per package (kept out of sharedDeps — externalizing it would strand its CSS); theme.css travels ?inline and is re-anchored :root -> :host per shadow root; the screen root always carries data-theme (dark/dracula/dracula-large -> dark, else light) so prefers-color-scheme cannot leak. Screens are kit Card/Skeleton + CSS Modules over kit tokens; vendored shadcn copies, lib/utils and tailwind deps dropped from the five packages. vitest base inlines ui-kit (its ESM imports CSS chunks Node's loader cannot handle). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
Shell themes (default/light -> kit light, dark -> kit dark) now carry the exact color values of @gears-frontx/ui-kit theme.css, converted to the shell's HSL-triplet format; left-menu tokens map onto the kit's sidebar tokens, selected item onto kit primary. The chrome stays Tailwind-mechanical (no document-level kit CSS — that would break hsl(var(--x)) utilities shell-wide), but is now visually identical to the kit-rendered screens. SidebarHeader renders the logo as plain branding when no toggle handler is given — the permanently-compact menu no longer exposes a phantom "Expand menu" control. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
The logo block and its separator leave the sidebar; the Studio logo takes this slot later (re-add SidebarHeader with the new asset then). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
Set up studio-frontend/ for the FrontX templates applied via `frontx add` (templates own package.json, tsconfig, src/, README, .gitignore — foreign content on those paths makes the CLI refuse). main has already moved the walking-skeleton SPA aside to studio-frontend-prototype/, so only the deployment wrapper comes back: Dockerfile*, nginx template and runtime-env hook are not template-owned, carried over from the prototype's current copies with paths retargeted. Foundation decisions are recorded in ADR-0006: FrontX consumed through its CLI, npm (not pnpm), Node >= 24.14 (.nvmrc added), TypeScript from the template range (latest 5.x), AI tooling via Constructor Studio. CI gains a path-filtered frontx job for studio-frontend/ that detects the missing package.json and passes as a green no-op until the shell lands (setup-node would otherwise fail on the absent lock file); the prototype's frontend job is untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech> (cherry picked from commit fc9e04b)
The test suites resolve workspace packages (@gears-frontx/react et al.) through their dist/ entries, which only the build produces; on a fresh CI checkout Test-first fails with 'Failed to resolve entry'. Same root class as the dev:all fresh-clone gap: scripts assume prebuilt workspace artifacts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Andrey Sysoev <andrey.sysoev@constructor.tech>
181d861 to
c9646ce
Compare
What
The new portal application in
studio-frontend/, rebuilt on FrontX per ADR-0006 (included). The walking-skeleton prototype instudio-frontend-prototype/is untouched and keeps serving the compose stack.frontxCLI fromtemplate-shell@develop(0.1.0-alpha.2) andtemplate-mfe@develop(0.1.0-alpha.0); applied refs recorded in.frontx/provenance.json.add-mfe-packageprocedure with GTS ids under theconstructor_studionamespace. Screens are placeholders; the scaffold's demo data layer is kept per package as reference for real content.@gears-frontx/ui-kit@0.3.0-alpha.3(exact pin, kept out ofsharedDeps):theme.css?inlinere-anchored:root→:hostper shadow root, screen root always carriesdata-theme(dark/dracula* → dark), CSS Modules over kit tokens — zero Tailwind inside MFEs. This front-runs gears-frontx#553 for consumer screens.studio-frontend/.cf-studiowith the cyber-pilot-kit-frontx kit (generated agent surfaces are gitignored).frontxjob (cherry-picked from the ground-clearing commit) —npm ci→npm test→npm run buildon Node 24. Deployment wrapper (Dockerfile*, nginx template, runtime-env hook) is carried over but not yet wired into compose/Helm.Verification
npm cifrom scratch, full test suite (root + src-app + all six workspaces),npm run build,type-check,arch:deps(0 violations) — all green locally on Node 24.Known template gaps found on the way (upstream gears-frontx material, not addressed here)
dev:allbuilds only MFEs and fails on a fresh clone untilnpm run build:package && npm run build:packageshas run once.typescript-eslint, which no package declares —npm run lintfails at config load.gts-id-conventionsguideline's{app} = acme.crmexample substituted into its own patterns yields 6-token instance segments, which the GTS grammar (exactlyvendor.package.namespace.type.vN) rejects at runtime.🤖 Generated with Claude Code