/

Developer Guide

Contributing

📦 The Lerna Monorepo

CrowdVision is structured as a Lerna Monorepo using npm workspaces.

{
    "workspaces": [
        "client",
        "server/*"
    ]
}

What this means for you:


🚀 Commits & Semantic Release

We use Semantic Release to fully automate our versioning, package publishing, and CHANGELOG.md generation. For this pipeline to work, you must use Conventional Commits. When you write a commit message, the prefix dictates how the version number will bump in the next release:

Commit prefixExampleImpact on release
feat:feat: add support for private domainsMinor release (e.g., 1.1.0 → 1.2.0).
fix:fix: resolve issue with user authenticationPatch release (e.g., 1.1.0 → 1.1.1).
docs:,chore:, refactor:docs: update API documentationNo version bump. Safe internal changes.
BREAKING CHANGE:BREAKING CHANGE: remove deprecated user profile fieldsMajor release (e.g., 1.1.0 → 2.0.0 ).

Note

⚙️ The Release Pipeline: When a pull request is merged into the main branch, the GitHub Action triggers npm run release. Semantic Release reads your commit history since the last tag, calculates the new version, updates the CHANGELOG.md, tags the repository, and publishes the release automatically


🏷️ Naming Conventions

Because CrowdVision spans both frontend Vue applications and backend Express/Fastify services, we follow strict naming conventions to differentiate architectural layers at a glance.

Backend Conventions (Express / Node.js)

Frontend Conventions (Vue 3 / TresJS)


🏗️ Architectural Golden Rules

When adding new features, please respect the architectural boundaries we have put in place: