Skip to content

Conversation

@johnny-quesada-developer
Copy link
Contributor

What is this PR doing?

  • This PR migrates the project from a Yarn workspaces setup into a formal monorepo architecture.

  • The goal is to establish the foundational structure required for future no-code and low-code capabilities by enabling better modularity, component isolation, and long-term scalability.

  • The migration introduces centralized dependency management, improved cross-package collaboration, and a more maintainable structure without changing the existing app layout or behavior.

How should this be manually tested?

  • Verify that all existing build, lint, and test commands still work as expected.
  • Confirm that CI/CD pipelines run successfully under the new monorepo configuration.
  • Ensure there are no regressions in application behavior or build outputs.
  • Validate that the repository structure loads correctly in local development (IDE, imports, scripts, tooling).

What are the relevant tickets?

A maintainer will add this ticket number.

Resolves VIDSOL-

Checklist

[ ] Branch is based on develop (not main).
[ ] Resolves a Known Issue.
[ ] If yes, did you remove the item from the docs/KNOWN_ISSUES.md?
[ ] Resolves an item reported in Issues.
If yes, which issue? Issue Number?

if: steps.check-skip-ci.outputs.result == 'false'
run: |
yarn test
NX_DAEMON=false yarn test
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Disable Nx caching for CI/CD. The pipelines always run in fully isolated, fresh installations of the app, so caching provides no benefit.

# Exit on error and unset variables
set -eu

# skip on CI or if deps aren't installed yet
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This change prevents Husky from running in CI or when dependencies are not installed.

@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch from 0900c9a to 0d1b262 Compare November 18, 2025 01:59
"description": "Express-based backend with authenticated routes.",
"main": "index.js",
"type": "module",
"scripts": {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

scripts are moved to project.json

},
"author": "",
"license": "MIT",
"dependencies": {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

dependencies are now centralize... only one version of each package for the whole project.

{
"extends": "../tsconfig.base.json",
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
Copy link
Contributor Author

Choose a reason for hiding this comment

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

all comments where removed along with redundant keys which are already present on the tsconfig.base.json

@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch 3 times, most recently from c2b25a4 to 1cee957 Compare November 18, 2025 03:24
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR migrates the project from a Yarn workspaces structure to a formal Nx monorepo architecture to support future modularity and scalability. The migration consolidates dependency management, introduces Nx tooling for build orchestration, and establishes a library structure (libs/ui) while preserving existing application behavior.

Key Changes:

  • Replaces workspace-based scripts with Nx executors and targets across backend, frontend, and integration-tests
  • Introduces centralized configuration (nx.json, tsconfig.base.json, eslint.config.mjs)
  • Adds a new libs/ui library scaffolded for shared UI components

Reviewed Changes

Copilot reviewed 107 out of 116 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
package.json Migrates scripts to Nx commands; hoists all dependencies to root; removes workspace declarations
nx.json Defines Nx workspace configuration with plugins, target defaults, and build orchestration
tsconfig.base.json Establishes shared TypeScript compiler options for all projects
eslint.config.mjs Replaces .eslintrc with flat ESLint config supporting Nx and TypeScript type-checked rules
frontend/, backend/, integration-tests/ Adds project.json for Nx targets; updates tsconfig.json to extend base config; migrates ESLint to flat config
libs/ui/ Scaffolds new shared UI library with Vite, Vitest, and React configuration
vitest.workspace.ts Configures Vitest workspace to discover test configurations across projects
Various source files Removes obsolete ESLint disable comments; improves type annotations; fixes minor linting issues


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch 8 times, most recently from 01a2789 to 70d3f55 Compare November 20, 2025 13:33
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

Copilot reviewed 111 out of 124 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

docs/DEPENDENCIES.md:1

  • The dependency changed from '@mui/base' to '@base-ui-components/react' but the description still refers to 'MUI Base'. The description should be updated to accurately reflect the new package, or if this is an intentional migration from MUI Base, it should be noted.
# Frontend Dependencies

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch 6 times, most recently from cbcf650 to a6e0e67 Compare November 20, 2025 19:49
@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch 4 times, most recently from 7dfce0f to f264925 Compare November 24, 2025 16:40
OscarFava
OscarFava previously approved these changes Nov 24, 2025
Copy link
Contributor

@OscarFava OscarFava left a comment

Choose a reason for hiding this comment

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

LGTM! Good to have NX working!

- [@emotion/react](https://www.npmjs.com/package/@emotion/react) > Simple styling in React.
- [@emotion/styled](https://www.npmjs.com/package/@emotion/styled) styled API for emotion
- [@mui/base](https://www.npmjs.com/package/@mui/base) MUI Base is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
- [@base-ui-components/react](https://www.npmjs.com/package/@base-ui-components/react) MUI Base is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

mui/base is deprecated we changed to base-ui-components/react]

// #endregion

// React
'react/react-in-jsx-scope': 'off',
Copy link
Contributor Author

Choose a reason for hiding this comment

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

react 19 doesn't need react on the scope


// test will fail without the await act
// eslint-disable-next-line @typescript-eslint/await-thenable
await act(() => {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

this await is basically a await Promise.resolve() or... wait until next tick

behei-vonage
behei-vonage previously approved these changes Nov 24, 2025
Copy link
Contributor

@behei-vonage behei-vonage left a comment

Choose a reason for hiding this comment

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

LGTM! can you please make sure that README.md is up-to-date in a follow up PR? thanks 🙏

@behei-vonage
Copy link
Contributor

sorry, just noticed there is lots of conflicts

@OscarFava
Copy link
Contributor

LGTM! can you please make sure that README.md is up-to-date in a follow up PR? thanks 🙏

We better fix README now! Good catch!

@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch 2 times, most recently from c22dfd3 to 5d78639 Compare November 25, 2025 09:29
VZaphod
VZaphod previously approved these changes Nov 25, 2025
Copy link
Contributor

@VZaphod VZaphod left a comment

Choose a reason for hiding this comment

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

LGTM

@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch 2 times, most recently from 56ee9e4 to 21304cd Compare November 25, 2025 12:17
@johnny-quesada-developer johnny-quesada-developer force-pushed the johnny/VIDSOL-296-migrating-to-nx branch from 21304cd to e3c904b Compare November 25, 2025 12:41
@sonarqubecloud
Copy link

@johnny-quesada-developer
Copy link
Contributor Author

LGTM! can you please make sure that README.md is up-to-date in a follow up PR? thanks 🙏

Hi I added a note that the project uses NX... but for the rest, scripts are the same, project structure is the same, and final dependencies are the same too.

Copy link
Contributor

@VZaphod VZaphod left a comment

Choose a reason for hiding this comment

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

LGTM

* @returns {GetLayout} getLayout
*/
const useLayoutManager = (): GetLayout => {
const layoutManager = useRef(new LayoutManager());
Copy link
Contributor Author

Choose a reason for hiding this comment

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

useRef(new LayoutManager())

The old code was creating in ever render a new instance of the LayoutManager, the subsequent instances were just discarded because of how useRef actually works but still was a bad implementation.

The new version crease an unique instance, only once and exports only the bounded getLayout function

Copy link
Contributor

@OscarFava OscarFava left a comment

Choose a reason for hiding this comment

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

Great job!!

Copy link

@rserebrennykov rserebrennykov left a comment

Choose a reason for hiding this comment

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

LGTM

@johnny-quesada-developer johnny-quesada-developer merged commit ebb7a48 into develop Nov 25, 2025
7 checks passed
@johnny-quesada-developer johnny-quesada-developer deleted the johnny/VIDSOL-296-migrating-to-nx branch November 25, 2025 17:23
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.

6 participants