- explicitly use /gatekeeper/ prefix for basePath routing - make image unoptimized so it bypasses _next/image which can fail under traefik
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@mintelnamespace.@mintel/tsconfig: Centralized TypeScript configurations.@mintel/eslint-config: Shared linting rules and best practices.@mintel/next-config: A powerful Next.js configuration wrapper with built-in i18n and Sentry support.@mintel/next-utils: Reusable logic for i18n, environment validation, and rate limiting.@mintel/infra: Production-ready Docker and Gitea Actions templates.@mintel/cli: Automation tool for scaffolding new projects.
🚀 Getting Started
Prerequisites
- pnpm (v10+)
- Node.js (v20+)
- Access to the private registry:
https://npm.infra.mintel.me
Installation
pnpm install
Development
To run development mode for all shared packages:
pnpm dev
Building
To build all shared packages:
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:
pnpm --filter @mintel/cli start init apps/client-name.com
This command automatically:
- Sets up the directory structure.
- Links all
@mintelshared packages. - Configures
next-intl(i18n) and Sentry. - Injects Docker and Gitea Actions deployment workflows.
🔄 Release Cycle (Monorepo)
We use Changesets to manage the versioning and publishing of shared packages.
1. Documenting Changes
When you modify a package in packages/*, create a changeset:
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:
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 thetestingenvironment. - Git Tag
v*.*.*-rc.*: Deploys to thestagingenvironment. - Git Tag
v*.*.*: Deploys to theproductionenvironment.
See the @mintel/infra package for detailed template documentation.
Trigger rebuilding for x86 architecture.