Skip to content

Development Environment Setup

This guide walks you through setting up a local development environment for Arda on macOS. By the end you will have the workspace cloned, toolchains installed, secrets configured, and each repository building successfully.

Install the following tools before cloning any repositories. All commands assume macOS with Homebrew available.

If Homebrew is not installed:

Terminal window
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Install Node.js v20 or later. The recommended approach is nvm so you can switch versions per project:

Terminal window
brew install nvm
nvm install 20
nvm use 20
nvm alias default 20

Alternatively, install directly via Homebrew:

Terminal window
brew install node@20

Install Eclipse Temurin 21 (the distribution used in CI):

Terminal window
brew install --cask temurin@21

Verify:

Terminal window
java -version
# openjdk version "21.x.x" ...

Backend repositories include a Gradle wrapper (./gradlew) and do not require a system-level Gradle installation. If you want the gradle command available globally for convenience:

Terminal window
brew install gradle

Backend services use TestContainers for integration tests and can be deployed to a local Kubernetes cluster. Install one of the following:

Required for deploying backend services to local Kubernetes:

Terminal window
brew install kubectl helm

Secrets (API keys, database credentials, environment-specific configuration) are managed through 1Password. Install the CLI and authenticate:

Terminal window
brew install --cask 1password/tap/1password-cli
op signin

Verify:

Terminal window
op whoami

You must be a member of the Arda 1Password team and have access to the Arda Dev vault before secret-injected commands will work.

macOS ships with Git. Confirm the version is 2.35 or later (worktree commands require this):

Terminal window
git --version

If you need a newer version:

Terminal window
brew install git

Required for services that interact with AWS resources and for SSO-authenticated deployments:

Terminal window
brew install awscli
aws configure sso

Follow the prompts to configure your SSO profile. The profile name used in Makefile targets is arda-dev — match that name during setup.


The Arda workspace is a parent directory containing sibling repositories. A bootstrap script automates the setup.

1. Clone the workspace control plane:

Terminal window
mkdir -p ~/code/arda
cd ~/code/arda
git clone git@github.com:Arda-cards/workspace.git

2. Run the bootstrap script:

Terminal window
bash workspace/scripts/bootstrap-workspace.sh --role full --ssh

The --role flag controls which repositories are cloned:

RoleRepositories
fullAll repositories (default)
backendBackend services + shared libraries + infrastructure + API tests + docs
frontendFrontend apps + component library + docs
minimalWorkspace + documentation only

The script is idempotent — safe to re-run if you add repos later or switch roles.

  1. Creates symlinks at the workspace root:
    • CLAUDE.md → workspace/CLAUDE.md (AI agent instructions)
    • GEMINI.md → workspace/AGENTS.md (Gemini CLI instructions)
    • .claude → workspace/instructions/claude (agent configuration)
  2. Creates projects/ and scratch/ directories
  3. Clones repositories based on your role
  4. Installs pre-commit hooks for documentation and workspace repos (manifest auto-regeneration)

After setup, your workspace looks like:

arda/
├── CLAUDE.md → workspace/CLAUDE.md
├── GEMINI.md → workspace/AGENTS.md
├── .claude → workspace/instructions/claude
├── workspace/
├── documentation/
├── operations/
├── arda-frontend-app/
├── projects/
├── scratch/
└── ...

If you prefer to set things up manually or need to add a single repository:

Terminal window
# Clone a specific repo
git clone git@github.com:Arda-cards/<repo-name>.git
# Install hooks for repos that have them
cd documentation && make install-hooks && cd ..
cd workspace && make install-hooks && cd ..

Secrets are not stored in .env files in source control. Instead, each repository contains one or more 1Password*.env files that map environment variable names to 1Password secret references. The op run command injects the resolved secrets at process startup.

Backend repositories (operations, common-module, accounts-component) use a single 1Password.env file at the repository root:

Terminal window
# Build and deploy with secrets injected
op run --env-file=1Password.env -- ./gradlew build
op run --env-file=1Password.env -- ./gradlew helmInstallToLocal

The api-test repository has one file per environment under 1Password/:

api-test/
└── 1Password/
├── dev.env
├── stage.env
├── prod.env
└── local.env
Terminal window
# Run tests against dev
op run --env-file=1Password/dev.env -- make test-dev
# Run tests against local Kubernetes
op run --env-file=1Password/local.env -- make test-local
VaultContentsUsed By
Arda DevAPI keys, database credentials, JWT signing keysBackend repos, api-test
Arda InfrastructureAWS access credentials, Helm chart valuesinfrastructure, deployments

Contact a team lead to get vault access if op run fails with “item not found” errors.


IntelliJ IDEA is the recommended IDE for Kotlin backend repositories. After cloning:

  1. Open IntelliJ IDEA and choose File > Open.
  2. Navigate to the repository root (e.g., ~/code/arda/operations) and open the build.gradle.kts file as a project.
  3. Allow IntelliJ to import the Gradle project and download dependencies. This may take several minutes on first import.
  4. Confirm that the project SDK is set to JDK 21: File > Project Structure > Project > SDK.

For composite builds (changes spanning common-module and a consuming service), see Multi-Repository Gradle Development.

VS Code is recommended for frontend repositories and for working with Claude Code:

Terminal window
brew install --cask visual-studio-code

Recommended extensions:

  • ESLint — for TypeScript and React linting
  • Prettier — for code formatting
  • Tailwind CSS IntelliSense — for ux-prototype development
  • Claude Code (anthropics.claude-code) — for AI-assisted development

Both IntelliJ IDEA and VS Code can be open simultaneously on the same workspace without conflict. A common setup is IntelliJ for backend work and VS Code as the Claude Code terminal host.


Full-stack local development requires a running Kubernetes cluster. This is optional for frontend-only or documentation-only work.

1. Enable Kubernetes in Docker Desktop or Rancher Desktop:

  • Docker Desktop: Settings > Kubernetes > Enable Kubernetes
  • Rancher Desktop: Kubernetes is enabled by default

2. Verify kubectl can reach the cluster:

Terminal window
kubectl cluster-info

3. Deploy a backend service:

Terminal window
op run --env-file=1Password.env -- ./gradlew helmInstallToLocal

This builds the service, packages it as a Helm chart, and installs it into the local cluster. Helm values for local deployment live in helm/values-local.yaml within each backend repository.

4. Set up port forwarding as needed:

Terminal window
kubectl port-forward svc/operations 8080:8080

Run the following commands after setup to confirm each layer of the stack is working.

Backend:

Terminal window
cd ~/code/arda/operations
./gradlew build

A successful build produces no errors and runs all unit tests. Integration tests are excluded from the default build profile.

Frontend:

Terminal window
cd ~/code/arda/arda-frontend-app
npm install
npm run dev:mock

The development server starts on http://localhost:3000 with a mock API backend. No real backend services are required.

Documentation site:

Terminal window
cd ~/code/arda/documentation
npm install
make build

The site builds to dist/ without errors. Run make test-preview to catch link errors that are only visible under the production base path.

API tests:

Terminal window
cd ~/code/arda/api-test
npm install
op run --env-file=1Password/dev.env -- make test-dev

Claude Code is the primary AI coding assistant used at Arda. Install it as an npm global package:

Terminal window
npm install -g @anthropic/claude-code

Authenticate:

Terminal window
claude login

The .claude symlink at the workspace root points to workspace/instructions/claude/. This directory contains:

  • agents/ — persona definitions loaded by the team-lead skill
  • skills/ — on-demand skill files (coding conventions, release workflows, etc.)
  • rules/ — always-on behavior rules applied to every session

When you start Claude Code from ~/code/arda/, it automatically picks up the workspace-level configuration and project-level CLAUDE.md. You do not need to configure anything manually.

Key conventions that Claude Code follows in this workspace:

  • Consultative by default. Claude Code produces explanations and plans unless you explicitly ask for file changes.
  • Concrete artifacts. When changes are requested, output is files — not conversational summaries.
  • Absolute paths only. When working across sibling repositories, all file operations use absolute paths to avoid operating on the wrong directory.
  • Secrets never in source. Claude Code is configured not to commit 1Password*.env files or any file containing API keys or credentials.

For AI-assisted multi-agent team workflows, see Working with AI Agent Assistants.



Copyright: (c) Arda Systems 2025-2026, All rights reserved