Skip to content

OWOX Data Marts Monorepo Structure

This document describes the structure of the OWOX Data Marts monorepo, which is organized to separate deployable applications from shared packages.

The monorepo is divided into two main sections:

  • apps/ - Contains deployable applications and runtimes
  • packages/ - Contains shared libraries and configurations
owox-data-marts/
β”œβ”€β”€ apps/ # Deployable applications
β”‚ β”œβ”€β”€ web/ # Frontend web application
β”‚ β”‚ β”œβ”€β”€ src/ # Source code
β”‚ β”‚ └── dist/ # Build artifacts
β”‚ β”‚
β”‚ β”œβ”€β”€ backend/ # Backend API and platform runtime
β”‚ β”‚ └── src/ # Source code
β”‚ β”‚
β”‚ └── cli/ # Command-line interface tool
β”‚ └── src/ # Source code
β”‚
β”œβ”€β”€ packages/ # Shared libraries and configurations
β”‚ β”œβ”€β”€ ui/ # Shared UI components and design system
β”‚ β”‚ └── src/ # Source code
β”‚ β”‚
β”‚ β”œβ”€β”€ connectors/ # Data connectors and API integrations
β”‚ β”‚ └── src/ # Source code
β”‚ β”‚
β”‚ β”œβ”€β”€ connector-runner/ # Core connector execution logic
β”‚ β”‚ └── src/ # Source code
β”‚ β”‚
β”‚ β”œβ”€β”€ eslint-config/ # Shared ESLint configurations
β”‚ β”‚
β”‚ β”œβ”€β”€ prettier-config/ # Shared Prettier configurations
β”‚ β”‚
β”‚ └── typescript-config/ # Shared TypeScript configurations
β”‚
β”œβ”€β”€ tools/ # Additinal scripts for project
└── docs/ # Project documentation
  • React-based frontend application
  • Serves the main user interface
  • Consumes shared UI components from packages/ui
  • Build artifacts are served by the backend
  • NestJS-based backend API
  • Serves the web application’s build artifacts
  • Implements platform runtime
  • Uses shared packages for data connectors execution
  • Command-line interface for platform management
  • Published as global npm package (owox)
  • Reuses backend logic and connectors
  • Designed for global installation: npm i -g owox
  • Shared React components
  • Implements shadcn/ui-based design system
  • Tailwind CSS styling
  • Used by the web application and other frontends outside of this monorepo
  • Data Source integrations
  • Shared across backend and CLI
  • Core logic for connector execution
  • Used by backend and CLI
  1. Each app and package has its own package.json
  2. Dependencies between packages are managed using workspace references
  3. Shared configurations (linting, TypeScript) are maintained in respective packages
  4. Build artifacts are generated in respective dist/ directories
  • Root package.json defines workspaces for both apps/* and packages/*
  • Each package can be developed and tested independently
  • Dependencies between packages use workspace:* syntax
  • Shared packages are not published to npm but used internally
  1. Keep shared code in appropriate packages
  2. Maintain clear boundaries between apps and packages
  3. Use TypeScript for type safety across the monorepo
  4. Follow consistent coding standards using shared linter config
  5. Document public APIs and interfaces