How to Contribute
Development setup
Section titled “Development setup”git clone https://github.com/ea-toolkit/architecture-catalog.gitcd architecture-catalogcd catalog-uinpm installnpm run devOpen http://localhost:4321 and verify the catalog renders.
Types of contributions
Section titled “Types of contributions”Registry data
Section titled “Registry data”Add or improve architecture elements. No code changes needed.
Where: registry-v2/**/*.md
Schema changes
Section titled “Schema changes”Add new element types, fields, or relationship types.
Where: models/registry-mapping.yaml
UI changes
Section titled “UI changes”Modify the catalog interface, add pages, or update styles.
Where: catalog-ui/src/
Documentation
Section titled “Documentation”Improve the docs site or fix typos.
Where: docs-site/src/content/docs/
Workflow
Section titled “Workflow”Branch naming
Section titled “Branch naming”feat/description -- New featurefix/description -- Bug fixdocs/description -- Documentation onlyschema/description -- Schema changesdata/description -- Registry data additionsCommit messages
Section titled “Commit messages”feat: add dark mode toggle to catalog UIfix: resolve slug collision for cross-type duplicatesdocs: add deployment guide for Dockerschema: add domain_event element typedata: add 15 physical APIs for Order Management domainPull request process
Section titled “Pull request process”- Fork the repository
- Create a feature branch from
main - Make your changes
- Run validation:
Terminal window cd catalog-ui && npm run build - Commit and push
- Open a PR against
main
Code conventions
Section titled “Code conventions”TypeScript
Section titled “TypeScript”- Strict mode — no
anytypes - All type names, field names, and labels come from the mapping YAML — never hardcode them
- camelCase for functions/variables, PascalCase for types/interfaces
- kebab-case for page files, PascalCase for React components
- 2 spaces indentation
- snake_case keys
- Use
#comments to explain non-obvious decisions
Markdown
Section titled “Markdown”- YAML frontmatter between
---markers - kebab-case filenames
- Every type folder should have a
_template.md
Architecture rules
Section titled “Architecture rules”Schema-driven UI
Section titled “Schema-driven UI”The UI must never hardcode element type names, field names, or relationship labels. Everything comes from registry-mapping.yaml.
// Badif (element.type === 'software_system') { ... }
// Goodconst typeDef = mapping.elements[element.typeKey];const label = typeDef?.label ?? element.typeKey;Graceful degradation
Section titled “Graceful degradation”Missing data should never break the build:
const description = element.fields.description ?? 'No description';Three-layer separation
Section titled “Three-layer separation”- Schema changes should not require UI code changes
- Data additions should not require schema or UI changes
- UI changes should not require data format changes
Testing
Section titled “Testing”The primary test is a successful build:
cd catalog-ui && npm run buildFor UI changes, verify these pages render correctly:
- Dashboard (
/) - Domain overview (
/domains/<id>) - Element detail (
/catalog/<id>) - Context map (
/domains/<id>/context-map) - Discover (
/discover)