Thank you for your interest in contributing to LingoTracker! This guide will help you get started.
-
Fork and clone the repository:
git clone https://github.com/<your-username>/lingo-tracker.git cd lingo-tracker
-
Install dependencies:
pnpm install
-
Build the project:
pnpm run build
-
Run the tests:
pnpm run test
This is an Nx monorepo with three applications sharing core business logic:
- CLI (
apps/cli) — Command-line interface - API (
apps/api) — NestJS REST API - Tracker (
apps/tracker) — Angular web UI - Domain (
libs/domain) — Pure business logic (browser-safe, no Node.js deps) - Core (
libs/core) — Node.js business logic (file I/O, checksums, bundles) - Data Transfer (
libs/data-transfer) — Shared DTOs
pnpm run serve:api # API server on port 3030
pnpm run serve:tracker # Angular dev serverpnpm run test # All tests
pnpm run test:cli # CLI tests only
pnpm run test:api # API tests only
pnpm run test:core # Core library tests only
pnpm run test:tracker # Tracker UI tests onlypnpm run lint # Lint with Biome
pnpm run format:check # Check formatting
pnpm run format # Auto-format-
Create a feature branch from
develop:git checkout -b feat/my-feature develop
-
Make your changes and write tests as needed.
-
Commit using conventional commits:
pnpm run commit
This launches an interactive prompt that guides you through writing a properly formatted commit message.
-
Push your branch and open a pull request against
develop.
This project uses Conventional Commits. Commit messages are validated by commitlint. Common prefixes:
feat:— A new featurefix:— A bug fixdocs:— Documentation changesrefactor:— Code changes that neither fix a bug nor add a featuretest:— Adding or updating testschore:— Maintenance tasks
- Angular components: Use signals, standalone components, OnPush change detection, and
inject()for DI. - Domain logic: Pure, platform-agnostic business logic belongs in
libs/domain. This includes key validation/parsing, translation status helpers, ICU/Transloco format conversion, and shared types. Domain has zero Node.js dependencies so it can be imported by all apps, including the browser-based Tracker UI. - Core logic: Node.js-dependent business logic belongs in
libs/core— file I/O, checksums, directory traversal, bundle generation. Core depends on domain; domain must never depend on core. - DTOs: API contracts are defined in
libs/data-transfer. - Testing: Vitest for unit tests.
The docs site lives in docs-site/ and is built with Docusaurus. To run it locally:
pnpm run docs:devDocumentation source files are located under docs-site/src/pages/. Add or edit pages there and open a pull request as you would for any other change.
Open an issue and we'll be happy to help.