# Mintel Monorepo This monorepo is the central "factory" for all Mintel client websites. It provides a standardized, versioned core of configurations, utilities, and infrastructure templates to ensure consistency, security, and rapid deployment across the entire portfolio. ## 🏗 Project Structure - **`apps/`**: Client website implementations (e.g., `sample-website`). These are consumers of the shared packages. - **`packages/`**: Shared, versioned npm packages under the `@mintel` namespace. - [`@mintel/tsconfig`](packages/tsconfig/README.md): Centralized TypeScript configurations. - [`@mintel/eslint-config`](packages/eslint-config/README.md): Shared linting rules and best practices. - [`@mintel/next-config`](packages/next-config/README.md): A powerful Next.js configuration wrapper with built-in i18n and Sentry support. - [`@mintel/next-utils`](packages/next-utils/README.md): Reusable logic for i18n, environment validation, and rate limiting. - [`@mintel/infra`](packages/infra/README.md): Production-ready Docker and Gitea Actions templates. - [`@mintel/cli`](packages/cli/README.md): Automation tool for scaffolding new projects. ## 🚀 Getting Started ### Prerequisites - [pnpm](https://pnpm.io/) (v10+) - Node.js (v20+) - Access to the private registry: `https://npm.infra.mintel.me` ### Installation ```bash pnpm install ``` ### Development To run development mode for all shared packages: ```bash pnpm dev ``` ### Building To build all shared packages: ```bash pnpm build ``` ## 🛠 Creating a New Client Project Never copy-paste files manually. Use the Mintel CLI to scaffold a new project with all best practices pre-configured: ```bash pnpm --filter @mintel/cli start init apps/client-name.com ``` This command automatically: 1. Sets up the directory structure. 2. Links all `@mintel` shared packages. 3. Configures `next-intl` (i18n) and Sentry. 4. Injects Docker and Gitea Actions deployment workflows. ## 🔄 Release Cycle (Monorepo) We use [Changesets](https://github.com/changesets/changesets) to manage the versioning and publishing of shared packages. ### 1. Documenting Changes When you modify a package in `packages/*`, create a changeset: ```bash pnpm changeset ``` Follow the prompts to select the package and the version bump type (patch, minor, major). ### 2. Versioning When ready to release, bump the versions: ```bash pnpm version-packages ``` This updates `package.json` files and generates `CHANGELOG.md` entries. ### 3. Publishing The release to the private registry is automated via Gitea Actions. On every push to `main`, the `release.yml` workflow runs `pnpm release`. If new versions are detected, they are published to `https://npm.infra.mintel.me`. ## 🌐 Infrastructure & Deployment Client websites scaffolded via the CLI use a **tag-based deployment** strategy: - **Push to `main`**: Deploys to the `testing` environment. - **Git Tag `v*.*.*-rc.*`**: Deploys to the `staging` environment. - **Git Tag `v*.*.*`**: Deploys to the `production` environment. See the [`@mintel/infra`](packages/infra/README.md) package for detailed template documentation.