Skip to content
Authoring Blueprints
AutoXXS (320px)XS (375px)SM (640px)MD (768px)LG (1024px)XL (1280px)XXL (1536px)
SketchMaterialiOSTamagui
DataInjectionKeyPatternsServiceTransactionProcessResearchProductQualityPerformanceSpecDomainFunctionTechnologyArchitectureConfigMiddlewareDataDatabaseDrizzleMigrationModelop-sqliteSchemaSQLState ManagementDraftKeystoneMergePatchPatchesPersistenceReactiveRedoStoreUndoTestingDeviceFactoryIsolationTypeScriptZodTopicsCommunicationBidsNVCDesignDesign ImplicationsEducationPedagogyFoundationsPsychologyAttachmentFloodingRelatingAuthentic RelatingUIEditorReact Native

Authoring Blueprints

Fragment reference Authoring Blueprints
tags
guideblueprint

The mental model

A blueprint is an architectural design document β€” it captures how a feature or system concern is implemented. While domains define what the system knows and features define what users can do, blueprints answer: β€œWhat is the structure of the solution, and what rules govern its construction?”

Blueprints bridge the gap between specification (what) and implementation (how). They are the place where technology choices, component topology, and wiring decisions are recorded.

Two archetypes

Blueprints come in two forms:

  1. Feature blueprints β€” implement specific features. They declare implements="feature/add-bookmark" and describe how that capability is realized in code.
  2. System blueprints β€” describe cross-cutting architectural concerns (layering, infrastructure, security posture). They omit implements and apply broadly.

The type attribute further classifies: infrastructure, architecture, module, or plan.

When to create a blueprint

Create a blueprint when:

  • A feature requires non-trivial architectural decisions (not just CRUD)
  • You need to communicate component relationships and boundaries to the team
  • Implementation rules or constraints need to be explicit and enforceable
  • Multiple developers will work on interconnected components

Do not create a blueprint for straightforward features where the architecture is obvious from the domain and feature specs.

Core sections

Approach

Every blueprint must have exactly one {% approach %} β€” a concise statement of the chosen strategy and rationale. This is the β€œthesis statement” of the design.

Components

Components are the building blocks. Each has an id, optional layer and tech attributes, and can declare {% uses %} relationships to other components.

Rules

Blueprint rules are implementation constraints that state what must or should hold during development. Rules can reference manifest NFRs for traceability via the ref attribute.

Use {% link %} for external references and {% diagram %} for Mermaid diagrams that visualize component relationships.

Relationship to domains and features

Domains define the business model and API β€” blueprints do not redefine them. Features define requirements β€” blueprints explain how to satisfy them. Blueprints reference both: they implement features and their rules may ref manifest constraints. The flow of information is top-down: manifest constraints become blueprint rules, domain APIs become component contracts, and feature requirements define what the blueprint must achieve.

Common mistakes

MistakeWhy it hurts
Too detailedA blueprint is not implementation code. Describe topology and rules, not every function signature.
Duplicating the domain modelIf you rewrite the DBML from the domain, you have two sources of truth. Reference, do not repeat.
No approach statementWithout a clear β€œwhy this architecture,” the blueprint is just a parts list with no rationale.
Orphaned blueprintA blueprint that does not implement a feature and is not a system blueprint serves no purpose.
Premature creationWriting a blueprint before the feature requirements are stable leads to rework. Specify first, design second.
Missing rulesComponents without governing rules leave architectural decisions implicit and unenforced.

Evolution

Blueprints evolve as implementation reveals new constraints. Add components as they emerge, tighten rules as invariants become clear, and update diagrams to reflect current architecture. When a blueprint grows beyond a single concern, extract a sub-blueprint for the new concern.