Dark Light
System
Default LBBW Jira Confluence Source Code
Share
Playground

Contributing #

This document describes how to contribute to the adesso financial platform (aFP) Design System.
It is intended for internal developers working on the platform to ensure consistent quality, maintainability, and usability of all design system packages.


Monorepo Overview #

This repository uses npm workspaces and is organized as follows:

Key tooling: Eleventy (11ty) for docs, PostCSS for CSS pipeline, Custom Elements Manifest (CEM) generation, Bootstrap Icons, Floating UI, Plop for scaffolding, Vitest for tests, Vite test runner config, and Prettier for formatting.

Internal links: GitLab Repo, Confluence Space, Jira Board


Overview #

The aFP Design System provides reusable UI assets, tokens, and tools that serve as the foundation for all applications within the adesso financial platform.

Each contribution improves design consistency, accessibility, and developer experience across projects.


Workspace Setup #

It is recommended to use Node.js v22.12.0 and npm v10.9.0 or higher.

To initialize the project, you need to set the required values for the NPM configuration.
To do this, follow the steps on the installation page.


Clone & Install repository #

Clone the repository and install dependencies:

git clone git@gitlab.adesso-group.com:2a9cafcf/afp-design-system.git
cd afp-design-system
npm install

Workspace Commands #

Command Description
npm run dev Launches the integrated build and starts Eleventy dev server with watch (via packages/design-system/scripts/build.js --develop).
npm run build Full production build (components, CEM, PostCSS, docs site).
npm run test Run Vitest headless test suite (jsdom).
npm run test:ui Run Vitest with the interactive UI.
npm run format:check Check formatting with Prettier.
npm run format:write Fix formatting with Prettier.
npm run create Start Plop CLI (scaffold new component or event) using packages/design-system/scripts/plop/plopfile.js.
npm run generate:angular Build Angular wrapper library from generators.
npm run generate:angular:dev Same as above, keeps temp output for inspection.
npm run generate:react Build React wrapper library from generators.
npm run generate:react:dev Same as above, keeps temp output for inspection.
npm run generate:vue Build Vue wrapper library from generators.
npm run generate:vue:dev Same as above, keeps temp output for inspection.
npm run check:updates Interactively check dependency updates across workspaces.
npm run update-verion Updated the package versions across the project (e.g. npm run update-version -- 1.4.0).
npm run mcp:build Build the http and local mcp server

Creating with Plop #

Use the internal Plop generator to create new entities.

npm run create

You’ll be prompted to choose what to scaffold:

? What do you want to create?
> component
  event

Create a new component #

  1. Run npm run create and select component.
  2. Enter the name (e.g. card).
  3. Plop will generate a new folder with starter files under packages/design-system/src/components/card/
  4. Implement logic, styles, and docs.
  5. Validate formatting and build.

Create a new event #

  1. Run npm run create and select event.
  2. Provide a descriptive name (e.g. hide).
  3. The script will create a boilerplate under the correct package directory.
  4. Implement the handler logic and ensure it’s referenced where required.

The create script uses Plop templates defined in packages/design-system/scripts/plop/plopfile.js.
You can extend or customize generators there if new entity types are needed.


Code Standards #

Language & Framework #


Formatting #

Use Prettier for consistent formatting:

npm run format:check
npm run format:write

Avoid manual style overrides; rely on shared tokens and utilities.


Icons & Overlays #


Custom Elements Manifest #


Testing #

Guidelines

Run

npm run test
# or
npm run test:ui

Implementation Guidelines #


QA #

Before opening a Pull Request:

npm run format:check
npm run build
npm run generate:angular
npm run generate:react
npm run generate:vue

Documentation Requirements #

Each new component, event, or theme must include:

Keep documentation concise and code-oriented — developers should understand usage from examples alone.


Commit & Branch Naming #

Always include the Jira ticket ID in your branch name and/or commit message:
Follow Conventional Commits:

feat(JIRA_ID): add tooltip component
fix(JIRA_ID): correct button hover state
docs(JIRA_ID): update usage examples
chore(JIRA_ID): update dependencies

Branches should follow this structure:

feature/JIRA_ID
fix/JIRA_ID
chore/JIRA_ID
docs/JIRA_ID

Pull Request Workflow #

  1. Branch from main and implement your change.
  2. Update or add docs and CEM JSDoc.
  3. Run local checks:
    npm run format:check
    npm run test
    npm run build
  4. Open a PR, link the Jira issue, add screenshots (if UI) and a test plan.
  5. Request at least one reviewer from the DS team.
  6. Merge only after CI green, review approval, and docs deployed locally via npm run dev without issues.

See also: Definition of Done.


Review Criteria #

During review, maintainers will check:


Support & References #


Collaboration #

This Design System is a core asset of the adesso financial platform (aFP).
Our goal is to provide a consistent, accessible, and maintainable UI foundation for all aFP applications.

If you’re unsure about a pattern or need guidance:


Thanks for helping make the aFP Design System better! ❤️

Share
Create a link with a predefined theme that is automatically applied when the generated link is opened. Default LBBW Presentation Mode
Abort Copy Link