domain-modeling

Structure BIM domain logic with hexagonal architecture entities and value objects.

6|2|Updated Apr 12, 2026
One-click install
npx skills add https://github.com/bitcoin-is-money/bim-app --skill domain-modeling-bitcoin-is-money
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: domain-modeling
Source: https://github.com/bitcoin-is-money/bim-app/tree/main/.claude/skills/domain-modeling
Command: npx skills add https://github.com/bitcoin-is-money/bim-app --skill domain-modeling-bitcoin-is-money

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

BIM domain modeling is a structured approach to defining entities, branded types, value objects, domain services, error classes, and state machines within a hexagonal architecture, enabling clean separation between domain logic and infrastructure across BIM applications.

Core Features & Use Cases

  • Organizes domain code under packages/domain/src/<context>/ with entities, services, and index barrels.
  • Defines contexts such as account, auth, payment, swap, user, and shared, promoting consistent boundaries and reuse.
  • Standardizes branded types, domain errors, ports, and adapters to support robust, testable domain logic.

Quick Start

Create a new domain entity by defining its ID type, entity class, domain service, and repository port following the hexagonal pattern in packages/domain.

Frequently Asked Questions about domain-modeling

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I structure domain logic using hexagonal architecture for BIM applications?

Structure BIM domain logic using hexagonal architecture by organizing code under packages/domain/src/<context>/ with entities, value objects, and domain services. This separates domain logic from infrastructure, defining ports and adapters to ensure testable, platform-agnostic code.

What is domain modeling and when do I need branded types and domain errors?

Domain modeling defines entities, branded types, value objects, and domain errors within a hexagonal architecture. You need branded types and domain errors to enforce consistent domain boundaries, robust type safety, and standardized error handling across application contexts.

How do I create a new domain entity following the hexagonal pattern?

Create a new domain entity by defining its ID type, entity class, domain service, and repository port within packages/domain. Follow the hexagonal pattern to specify exports and adapters, ensuring the domain logic remains isolated and testable.

Does domain-driven design work for managing multiple bounded contexts like auth and payment?

Domain-driven design works for managing multiple bounded contexts by defining separate boundaries such as account, auth, payment, swap, user, and shared. This promotes consistent domain modeling, reuse, and standardized state machines across distinct application contexts.

What's the best way to separate domain logic from infrastructure in a testable codebase?

The best way to separate domain logic from infrastructure is applying hexagonal architecture with domain-branded types, ports, and adapters. This pattern isolates domain services and entities, yielding platform-agnostic code that supports robust and independent testing.

Why do I need domain services and repository ports in domain-driven design?

You need domain services and repository ports in domain-driven design to abstract infrastructure dependencies and define clear boundaries. Ports specify required operations while adapters implement them, ensuring domain entities and value objects remain testable and platform-agnostic.