Skip to content

Monorepo Architecture Overview โ€‹

Architectural Foundation: Turborepo ยท pnpm ยท Vite ยท TypeScript

Description: Architectural overview of the monorepo, orchestrated by Turborepo with pnpm workspaces, housing React/Vite applications and shared TypeScript packages.

๐Ÿ“‚ Repository Structure โ€‹

The monorepo is organized into Apps (deployable applications) and Packages (shared libraries).

text
.
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ web/              # Main React Application (Vite + TypeScript)
โ”‚   โ”œโ”€โ”€ landing/          # Public Promotional SPA (Vite + TypeScript)
โ”‚   โ”œโ”€โ”€ desktop/          # Electron Desktop Wrapper (electron-vite)
โ”‚   โ””โ”€โ”€ docs-dev/         # Component Documentation & Playground (VitePress)
โ”‚
โ”œโ”€โ”€ packages/
โ”‚   โ”œโ”€โ”€ core-api/         # Shared HTTP Client, Observability & Data Services Engine
โ”‚   โ”œโ”€โ”€ core-storage/     # Enterprise Storage Engine (IndexedDB/localStorage + Encryption)
โ”‚   โ”œโ”€โ”€ core-i18n/        # Enterprise Internationalization Architecture
โ”‚   โ”œโ”€โ”€ ui/               # Shared UI Component Library
โ”‚   โ”œโ”€โ”€ utils/            # Shared Utilities (Date, Encryption, Core Logic, etc)
โ”‚   โ””โ”€โ”€ configs/          # Shared Tooling Configurations
โ”‚       โ”œโ”€โ”€ eslint/       # Shared ESLint rules
โ”‚       โ””โ”€โ”€ typescript/   # Shared TypeScript (tsconfig) bases
โ”‚
โ”œโ”€โ”€ package.json          # Root scripts and dependencies
โ”œโ”€โ”€ pnpm-workspace.yaml   # pnpm workspace definition
โ””โ”€โ”€ turbo.json            # Turborepo pipeline configuration

๐Ÿ“ฆ Packages Overview โ€‹

1. apps/web โ€‹

The main consumer-facing application.

  • Imports business logic from @repo/utils
  • Uses shared UI components from @repo/ui
  • End-user guide: Sales workflow

Tech Stack:

2. apps/desktop โ€‹

The Electron desktop wrapper that embeds apps/web for native desktop experiences.

  • In development: loads the Vite dev server with full hot reload
  • In production: serves the static web build via a secure custom app:// protocol
  • Configurable target app via .env (can wrap apps/web, apps/docs-dev, or any future app)

Tech Stack:

Key Capabilities:

FeatureDescription
๐Ÿ–จ๏ธ Native PrintingSilent and direct printing via secure IPC bridge
๐Ÿ”„ Auto-UpdatesBackground downloads via GitHub Releases (switchable to S3)
๐Ÿ”’ Secure IPC BridgecontextIsolation: true, nodeIntegration: false, sandbox: true
๐ŸŒ Custom Protocolapp:// serves static files with SPA routing fallback to index.html
๐Ÿ›ก๏ธ CORS BypassTransparent Origin header rewriting for cloud API calls

3. apps/landing โ€‹

The public promotional website โ€” a standalone SPA for the company profile and marketing pages.

  • Deployed independently to the web (e.g., Vercel) โ€” no interaction with Electron
  • Consumes shared UI components from @repo/ui and utilities from @repo/utils
  • Locked to port 3000 (strictPort: true) โ€” evacuated from the 517x range to avoid electron-vite port collisions

Tech Stack:

4. apps/docs-dev โ€‹

An isolated environment for developing and documenting UI components.

  • Ensures components in @repo/ui are built and tested independently
  • Acts as a living design system and playground
  • Built with VitePress

5. packages/core-api โ€‹

The platform-agnostic API engine for the monorepo. Provides an isolated HTTP client factory, a unified observability pipeline (Grafana Faro + OpenTelemetry), and a generic data services engine.

  • Consumed by apps/web, apps/landing, and any future workspace
  • Centralizes all @grafana/faro-* and @opentelemetry/* dependencies
  • Provides plug-and-play telemetry via initTelemetry() + faroAdapter

Tech Stack:

Key Capabilities:

FeatureDescription
๐Ÿญ HTTP Client FactorycreateHttpClient() โ€” per-app isolated Axios instances with interceptor hooks
๐Ÿ“ก Faro/Loki BaselineEvery request automatically pushes structured logs with module.key and module.action
๐ŸŽฏ Custom Spans (Opt-In)telemetryContext.customSpanName creates explicit OTel spans visible in Grafana Tempo
๐Ÿ›ก๏ธ Error NormalizationApiError.fromAxiosError() โ€” structured, serializable error codes for all failure modes
๐Ÿ“ฆ Data Services EngineCommonRemoteDataServices โ€” full CRUD + lifecycle operations with zero boilerplate

6. packages/core-storage โ€‹

The Enterprise-grade storage engine for the monorepo. Provides a unified, Promise-based interface for interacting with browser storage (localStorage and IndexedDB). Enforces strict type safety, prevents key collisions via a centralized registry, and automatically provides AES encryption at rest for sensitive payloads using @repo/utils.

7. packages/core-i18n โ€‹

The Enterprise Internationalization Architecture for the monorepo.

Provides a Hybrid Namespace Architecture combining a centralized i18n engine with decentralized, lazy-loaded feature dictionaries. Features strict TypeScript typings (including nested keys), optional backend synchronization with automatic error rollbacks, and a deep-merge mechanism for dynamic tenant-specific vocabulary overrides.

Key Capabilities:

FeatureDescription
๐ŸŒ Hybrid NamespacesCentralized common corpus + lazy-loaded feature dictionaries.
๐Ÿ›ก๏ธ Strict TypingsNative TS autocomplete for nested paths (e.g., header.title) via module augmentation.
๐Ÿ”„ Safe Backend SyncchangeLanguage accepts a syncCallback with built-in rollback if the API fails.
๐Ÿข Tenant OverridesapplyTenantOverrides performs a partial deep-merge to selectively override terminology.

8. packages/core-events โ€‹

The decoupled Nervous System for the monorepo.

Provides a highly performant, strictly typed Event Bus (Pub/Sub) powered by mitt. It allows independent modules to communicate seamlessly without tightly coupling their codebases or triggering expensive global React tree re-renders.

Key Capabilities:

FeatureDescription
๐Ÿงฉ Zero CouplingPublishers and subscribers interact via blind events, eliminating direct module imports and circular dependencies.
โšก Extreme PerformanceEnables targeted DOM updates for high-frequency data streams (e.g., WebSockets) without re-rendering parent components.
๐Ÿงน Memory SafetyNative useAppEvent hook automatically unsubscribes on component unmount, preventing SPA memory leaks.
๐Ÿ›ก๏ธ Strict ContractsCentralized events.registry.ts enforces payload shapes via TypeScript, ensuring cross-module data safety.

9. packages/utils โ€‹

Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest.

This package is intended to hold non-UI, cross-cutting logic such as date/time handling, security helpers, and other common utilities. It is designed to be framework-agnostic, predictable, and easy to extend as the system evolves.

10. packages/ui โ€‹

Shared UI component library (Buttons, Inputs, Cards, Layouts) with a comprehensive Form UI Library.

  • Ensures consistent design across all applications
  • Designed to be consumed by both web apps and Storybook
  • Form UI Library: 22 RHF-connected Mantine form components with Zod validation and i18n error translation, built via a withRHF() HOC factory with useController micro-subscriptions and React.memo optimization for ERP-scale forms

11. packages/configs โ€‹

Single source of truth for tooling configuration.

  • eslint-config: Shared ESLint rules
  • typescript-config: Shared tsconfig.json base configurations

โš™๏ธ Configuration & Environment โ€‹

Turborepo Caching โ€‹

This repository uses Turborepo caching for builds, tests, and other artifacts. To fully clean the workspace (dependencies, build outputs, and Turbo cache):

bash
rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release