Skip to content

Architecture Decision Records ​

This section documents significant architectural decisions made in this project, why they were made, and their consequences. Each ADR reflects a decision actually visible in the codebase today — see the linked source files and comments for the evidence behind each one.

The records are grouped in two tiers:

  • Foundational decisions (0001–0011) are the strategic technology/architecture/process choices that shape everything else in the project — e.g. "no backend," "OpenUI5," "XML views," "no custom controls," "JSON over OData," "the user supplies their own PAM data," "a separate MCP server," "TypeScript everywhere," "UI tests as the primary test strategy," "a multi-tool quality toolchain," "how the site is laid out on GitHub Pages." They're largely independent of each other and could each have gone a different way without requiring the others to change.
  • Implementation decisions (0012–0014) are narrower choices made within that foundation — direct, almost unavoidable consequences of a foundational decision (e.g. 0014's class-binding workaround only exists because of 0003's choice of XML views). Each one cross-links back to the foundational decision(s) that triggered it.

Foundational decisions ​

#TitleStatus
0001Client-only app, no backendAccepted
0002OpenUI5 as the application frameworkAccepted
0003XML views for UI declarationAccepted
0004Standard sap.m controls only, no custom or third-party controlsAccepted
0005JSON data binding instead of ODataAccepted
0006User-supplied PAM data, never bundled or auto-fetchedAccepted
0007A separate MCP server as a second, LLM-facing access surfaceAccepted
0008TypeScript for every componentAccepted
0009End-to-end UI tests as the primary testing strategyAccepted
0010A dedicated, multi-tool toolchain for code qualityAccepted
0011GitHub Pages hosts VitePress at the root, the app and quality reports under subpathsAccepted

Implementation decisions ​

#TitleTriggered byStatus
0012Address product detail by array index, not a synthetic ID0005Accepted
0013Product identity as a field tuple, not an explicit ID0005Accepted
0014Use reactive control properties instead of dynamic class bindings0003Accepted

Format ​

Each ADR follows a short form: Context (the problem/forces), Decision (what was chosen), Consequences (what this buys you and what it costs).