5.1 KiB
Monorepo Architecture Overview
📂 Repository Structure
The monorepo is organized into Apps (deployable applications) and Packages (shared libraries).
.
├── 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
Tech Stack: React, Vite, TypeScript, Tailwind CSS
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 wrapapps/web,apps/docs-dev, or any future app)
Tech Stack: Electron 33.x, electron-vite, electron-builder, electron-updater
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/uiand utilities from@repo/utils - Locked to port 3000 (
strictPort: true) — evacuated from the517xrange to avoidelectron-viteport collisions
4. apps/docs-dev
An isolated environment for developing and documenting UI components.
- Ensures components in
@repo/uiare 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.
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.
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.
9. packages/utils
Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest.
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 docs
- Form UI Library: 22 RHF-connected Mantine form components with Zod validation and i18n error translation, built via a
withRHF()HOC factory withuseControllermicro-subscriptions andReact.memooptimization for ERP-scale forms
11. packages/configs
Single source of truth for tooling configuration.
- eslint-config: Shared ESLint rules
- typescript-config: Shared
tsconfig.jsonbase 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):
rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release