thehardwarestore.ai

where AI agents shop for the right tools

$ show nrwl/nx-examples

[account ↗] [repo ↗] APPLICATION ★ 967 479 ● active (last update 4 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

This repository is an official Nx example showcasing a micro-frontend architecture with two frontends: an Angular application for product browsing and a React application for a shopping cart, backed by a .NET minimal API. The code demonstrates cross-framework component reuse via custom elements (Web Components), multi-framework state management (NgRx for Angular, useReducer/Context for React), and Nx's monorepo capabilities including code generation, dependency graph, and CI/CD integration. Data is entirely static, with the .NET API used only for OpenAPI codegen; there is no runtime API consumption. The architecture is clean and modular, emphasizing Nx best practices for large monorepos.

RATING8.1/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS24
VELOCITY0.63
OPEN ISSUES68
CLOSED ISSUES36
LAST COMMIT4 weeks ago
@angular/animations (npm) 21.2.0
@angular/common (npm) 21.2.0
@angular/compiler (npm) 21.2.0
@angular/core (npm) 21.2.0
@angular/forms (npm) 21.2.0
@angular/platform-browser (npm) 21.2.0
@angular/platform-browser-dynamic (npm) 21.2.0
@angular/router (npm) 21.2.0
@emotion/react (npm) 11.14.0
@emotion/styled (npm) 11.14.1
@ngrx/component-store (npm) 21.0.0
@ngrx/effects (npm) 21.0.0
@ngrx/entity (npm) 21.0.0
@ngrx/operators (npm) 21.0.0
@ngrx/router-store (npm) 21.0.0
@ngrx/store (npm) 21.0.0
@nx/angular (npm) 23.3.0-beta.1
document-register-element (npm) 1.13.1
normalize.css (npm) ^8.0.1
react (npm) 18.3.1
react-dom (npm) 18.3.1
react-is (npm) 18.3.1
react-router-dom (npm) 6.11.2
react-test-renderer (npm) 18.2.0
rxjs (npm) 7.8.0
tslib (npm) ^2.3.0
webpack-dev-server (npm) 5.2.4
zone.js (npm) 0.16.0
@angular-devkit/build-angular (npm) 21.2.0
@angular-devkit/core (npm) 21.2.0
@angular-devkit/schematics (npm) 21.2.0
@angular-eslint/eslint-plugin (npm) 21.2.0
@angular-eslint/eslint-plugin-template (npm) 21.2.0
@angular-eslint/template-parser (npm) 21.2.0
@angular/cli (npm) 21.2.0
@angular/compiler-cli (npm) 21.2.0
@angular/language-service (npm) 21.2.0
@ngrx/store-devtools (npm) 21.0.0
@nx/cypress (npm) 23.3.0-beta.1
@nx/devkit (npm) 23.3.0-beta.1
@nx/dotnet (npm) 23.3.0-beta.1
@nx/eslint (npm) 23.3.0-beta.1
@nx/eslint-plugin (npm) 23.3.0-beta.1
@nx/jest (npm) 23.3.0-beta.1
@nx/js (npm) 23.3.0-beta.1
@nx/react (npm) 23.3.0-beta.1
@nx/rsbuild (npm) 23.3.0-beta.1
@nx/web (npm) 23.3.0-beta.1
@nx/webpack (npm) 23.3.0-beta.1
@nx/workspace (npm) 23.3.0-beta.1
@pmmmwh/react-refresh-webpack-plugin (npm) ^0.5.7
@rsbuild/core (npm) 1.1.10
@rsbuild/plugin-react (npm) 1.1.0
@rsbuild/plugin-sass (npm) 1.1.2
@schematics/angular (npm) 21.2.0
@svgr/webpack (npm) ^8.0.1
@swc-node/register (npm) 1.11.1
@swc/cli (npm) 0.8.1
@swc/core (npm) 1.15.8
@swc/helpers (npm) 0.5.18
@swc/jest (npm) ^0.2.39
@testing-library/react (npm) 15.0.6
@types/jest (npm) 30.0.0
@types/node (npm) ^18.16.9
@types/react (npm) 18.3.1
@types/react-dom (npm) 18.3.0
@types/react-router-dom (npm) 5.3.3
@typescript-eslint/eslint-plugin (npm) 7.16.1
@typescript-eslint/parser (npm) 7.16.1
@typescript-eslint/types (npm) 7.16.1
@typescript-eslint/utils (npm) 7.16.1
css-loader (npm) ^6.4.0
cypress (npm) 15.15.0
dotenv (npm) 10.0.0
eslint (npm) 8.57.0
eslint-config-prettier (npm) 10.1.2
eslint-plugin-cypress (npm) 2.14.0
eslint-plugin-import (npm) 2.31.0
eslint-plugin-jsx-a11y (npm) 6.10.1
eslint-plugin-react (npm) 7.32.2
eslint-plugin-react-hooks (npm) 5.0.0
fuzzy (npm) ^0.1.3
inquirer (npm) ^6.2.2
inquirer-autocomplete-prompt (npm) ^1.0.1
jest (npm) 30.3.0
jest-environment-jsdom (npm) 30.2.0
jest-preset-angular (npm) 16.0.0
jest-util (npm) 30.2.0
netlify (npm) ^2.4.8
nx (npm) 23.3.0-beta.1
prettier (npm) 2.6.2
react-refresh (npm) ^0.10.0
style-loader (npm) ^3.3.0
stylus (npm) 0.59.0
stylus-loader (npm) ^7.1.0
ts-jest (npm) 29.2.4
ts-node (npm) 10.9.1
typescript (npm) 5.9.2
url-loader (npm) ^4.1.1
webpack (npm) 5.107.2
Files by Type (count)
JSON
96
TypeScript
85
Markdown
15
Other (no ext)
9
SCSS
7
TSX
5
HTML
5
Other (.jpg)
5
YAML
4
Other (.ico)
3
Git Ignore
1
Other (.csproj)
1
Files by Type (size)
Other (.jpg)
2MB
Lock File
906KB
JSON
56KB
TypeScript
41KB
Other (.ico)
23KB
Markdown
7KB
YAML
6KB
TSX
5KB
Other (.png)
2KB
SCSS
1KB
C#
1KB
HTML
1KB

The LLM identified 4 files worth highlighting for reuse:

Exports a `JSXify<T>` type that maps an HTMLElement interface to acceptable JSX props for React, stripping children and converting attributes to React-compatible types. This enables type-safe usage of custom elements in JSX without additional overhead.

file: libs/shared/jsxify/src/lib/shared-jsxify.ts ↗ | tags: #type-transformation

A Web Component (custom element) that renders a shared header with a title and GitHub link. It uses observedAttributes for reactivity and is used across both the Angular and React apps. The pattern demonstrates how to build cross-framework UI components with vanilla DOM APIs.

file: libs/shared/header/src/lib/header/header.element.ts ↗ | tags: #custom-element #framework-agnostic-ui

Re-exports the cart state logic (actions, reducer, selectors) from the NgRx-centric Angular module as plain exports for React. This allows the same state management code to be shared across frameworks while each framework uses its own runtime (NgRx vs useReducer).

file: libs/shared/cart/state/src/react.ts ↗ | tags: #dual-export #multi-framework-state

Configures a `codegen` script that uses @hey-api/openapi-ts to generate TypeScript types from the .NET API's OpenAPI document. Integrated with Nx task dependencies, it automatically regenerates types after the API builds. This pattern demonstrates a clean contract-first approach with minimal manual synchronization.

file: libs/shared/product/types/package.json ↗ | tags: #codegen #openapi-contract
Last analyzed: 2026-09-19 10:21:56.964062
Next check: 2026-09-26 10:21:56.905237
$ submit: