# saadmansakib47/electronics-calculator architecture

> Architecture diagram of the GitHub repository saadmansakib47/electronics-calculator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-07). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/saadmansakib47/electronics-calculator
- Repository: https://github.com/saadmansakib47/electronics-calculator

## Overview

#### Purpose and Entry Points
Calculator Suite is a multi-page, static browser application with three calculator modes: basic, advanced, and electronics-specific. `index.html` is the landing/navigation page; `basic.html`, `advanced.html`, and `custom.html` host the respective calculator UIs. Local serving starts at port 8080 via the npm start script defined in `package.json`.

#### Presentation and Page Boundaries
Each calculator is a separate HTML page rather than a single routed application. Shared visual styling is centralized in `styles.css`; each page loads its dedicated controller/calculation module.
- `basic.html`
- `advanced.html`
- `custom.html`
- `styles.css`

#### Basic Calculator Stage
The basic calculator implements the repaired core arithmetic behavior and is independently consumable in both browser and Node test contexts. Its script owns basic-operation state/interaction logic for `basic.html`, while CommonJS export guards permit Jest to import the same implementation.
- `Scripts/basic.js`
- `basic.html`
- `Tests/basic.test.js`

#### Advanced Calculator Stage
The advanced calculator extends the core calculator offering with advanced operations while retaining the dual-runtime model: browser globals for page execution and Node exports for automated tests. Its page and test suite form an isolated feature boundary.
- `Scripts/advanced.js`
- `advanced.html`
- `Tests/advanced.test.js`

#### Electronics Calculator Domain
The custom calculator is an electronics-domain calculator rather than generic arithmetic. `Scripts/custom.js` translates UI input into formula-based results defined by the project’s electronics reference. Input validation is shared through `requireAtLeastOne`, reducing duplicated validation behavior and establishing `utils.js` as a common domain-support dependency.
- `Scripts/custom.js`
- `Scripts/utils.js`
- `ELECTRONICS_CALCULATOR.md`

#### Test and Execution Flow
Browser users load an HTML page, interact with DOM controls, and invoke the corresponding script’s calculator behavior. Tests import those same scripts under Node/Jest, exercising calculation and integration behavior without a separate backend or API layer. Reusable test construction is centralized to keep calculator suites consistent.
- `Tests/basic.test.js`
- `Tests/advanced.test.js`
- `Tests/custom.test.js`
- `Tests/testHelpers.js`

#### Runtime, Automation, and Infrastructure
The repository has no server-side application, database, or external service dependency indicated; it is served locally as static web content and tested in the Node/npm ecosystem. GitHub Actions runs the Node CI workflow, making automated test execution the primary delivery gate.
- `package.json`
- `.github/workflows/node.yml`
- `package-lock.json`

Main entry points: [`Scripts/custom.js`](https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/custom.js) (Electronics calculator), [`index.html`](https://github.com/saadmansakib47/electronics-calculator/blob/main/index.html) (Landing page), [`basic.html`](https://github.com/saadmansakib47/electronics-calculator/blob/main/basic.html) (Basic calculator page), [`advanced.html`](https://github.com/saadmansakib47/electronics-calculator/blob/main/advanced.html) (Advanced calculator page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_pages["Static Pages"]
  node_landing["Landing page<br/>HTML entry<br/>[index.html]"]
  node_basic_page["Basic calculator page<br/>HTML page<br/>[basic.html]"]
  node_advanced_page["Advanced calculator page<br/>HTML page<br/>[advanced.html]"]
  node_custom_page["Electronics calculator page<br/>HTML page<br/>[custom.html]"]
  node_styles["Shared styles<br/>CSS<br/>[styles.css]"]
end

subgraph group_calculators["Calculator Modules"]
  node_basic_module["Basic calculator<br/>browser/Node module<br/>[basic.js]"]
  node_advanced_module["Advanced calculator<br/>browser/Node module<br/>[advanced.js]"]
  node_custom_module["Electronics calculator<br/>browser module<br/>[custom.js]"]
  node_utils["Validation utility<br/>shared module<br/>[utils.js]"]
  node_electronics_reference["Electronics reference<br/>domain specification"]
end

subgraph group_testing["Test &amp; CI"]
  node_basic_tests["Basic tests<br/>Jest suite<br/>[basic.test.js]"]
  node_advanced_tests["Advanced tests<br/>Jest suite<br/>[advanced.test.js]"]
  node_custom_tests["Electronics tests<br/>Jest suite<br/>[custom.test.js]"]
  node_test_helpers["Test helpers<br/>test utility<br/>[testHelpers.js]"]
  node_ci{{"Node CI<br/>GitHub Actions workflow<br/>[node.yml]"}}
end

node_package["npm scripts<br/>Node package<br/>[package.json]"]

node_landing -->|"navigates to"| node_basic_page
node_landing -->|"navigates to"| node_advanced_page
node_landing -->|"navigates to"| node_custom_page
node_basic_page -->|"loads"| node_styles
node_advanced_page -->|"loads"| node_styles
node_custom_page -->|"loads"| node_styles
node_basic_page -->|"loads"| node_basic_module
node_advanced_page -->|"loads"| node_advanced_module
node_custom_page -->|"loads"| node_custom_module
node_custom_module -->|"validates with"| node_utils
node_custom_module -.->|"implements formulas from"| node_electronics_reference
node_basic_tests -->|"imports"| node_basic_module
node_advanced_tests -->|"imports"| node_advanced_module
node_custom_tests -->|"tests"| node_custom_module
node_basic_tests -->|"uses"| node_test_helpers
node_advanced_tests -->|"uses"| node_test_helpers
node_custom_tests -->|"uses"| node_test_helpers
node_ci -->|"runs test script"| node_package

click node_package "https://github.com/saadmansakib47/electronics-calculator/blob/main/package.json"
click node_landing "https://github.com/saadmansakib47/electronics-calculator/blob/main/index.html"
click node_basic_page "https://github.com/saadmansakib47/electronics-calculator/blob/main/basic.html"
click node_advanced_page "https://github.com/saadmansakib47/electronics-calculator/blob/main/advanced.html"
click node_custom_page "https://github.com/saadmansakib47/electronics-calculator/blob/main/custom.html"
click node_styles "https://github.com/saadmansakib47/electronics-calculator/blob/main/styles.css"
click node_basic_module "https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/basic.js"
click node_advanced_module "https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/advanced.js"
click node_custom_module "https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/custom.js"
click node_utils "https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/utils.js"
click node_electronics_reference "https://github.com/saadmansakib47/electronics-calculator/blob/main/ELECTRONICS_CALCULATOR.md"
click node_basic_tests "https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/basic.test.js"
click node_advanced_tests "https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/advanced.test.js"
click node_custom_tests "https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/custom.test.js"
click node_test_helpers "https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/testHelpers.js"
click node_ci "https://github.com/saadmansakib47/electronics-calculator/blob/main/.github/workflows/node.yml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_landing,node_basic_page,node_advanced_page,node_custom_page,node_styles toneBlue
class node_basic_module,node_advanced_module,node_custom_module,node_utils,node_electronics_reference toneAmber
class node_basic_tests,node_advanced_tests,node_custom_tests,node_test_helpers,node_ci toneMint
class node_package toneNeutral
```

## Components

### Static Pages

Independent browser entry points.

- [Landing page](https://github.com/saadmansakib47/electronics-calculator/blob/main/index.html): HTML entry · Navigation entry point for calculator modes. · `index.html`
- [Basic calculator page](https://github.com/saadmansakib47/electronics-calculator/blob/main/basic.html): HTML page · `basic.html`
- [Advanced calculator page](https://github.com/saadmansakib47/electronics-calculator/blob/main/advanced.html): HTML page · `advanced.html`
- [Electronics calculator page](https://github.com/saadmansakib47/electronics-calculator/blob/main/custom.html): HTML page · `custom.html`
- [Shared styles](https://github.com/saadmansakib47/electronics-calculator/blob/main/styles.css): CSS · `styles.css`

### Calculator Modules

Browser controllers also exported for Node tests.

- [Basic calculator](https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/basic.js): browser/Node module · Core arithmetic state, interaction, and calculation behavior. · `Scripts/basic.js`
- [Advanced calculator](https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/advanced.js): browser/Node module · Advanced operations and page behavior. · `Scripts/advanced.js`
- [Electronics calculator](https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/custom.js): browser module · Maps UI inputs to electronics formula results. · `Scripts/custom.js`
- [Validation utility](https://github.com/saadmansakib47/electronics-calculator/blob/main/Scripts/utils.js): shared module · Provides requireAtLeastOne input validation. · `Scripts/utils.js`
- [Electronics reference](https://github.com/saadmansakib47/electronics-calculator/blob/main/ELECTRONICS_CALCULATOR.md): domain specification · Defines the electronics formulas and behavior. · `ELECTRONICS_CALCULATOR.md`

### Test & CI

Node/Jest verification and delivery gate.

- [Basic tests](https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/basic.test.js): Jest suite · `Tests/basic.test.js`
- [Advanced tests](https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/advanced.test.js): Jest suite · `Tests/advanced.test.js`
- [Electronics tests](https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/custom.test.js): Jest suite · `Tests/custom.test.js`
- [Test helpers](https://github.com/saadmansakib47/electronics-calculator/blob/main/Tests/testHelpers.js): test utility · Reusable test construction shared by calculator suites. · `Tests/testHelpers.js`
- [Node CI](https://github.com/saadmansakib47/electronics-calculator/blob/main/.github/workflows/node.yml): GitHub Actions workflow · Runs automated Node tests as the delivery gate. · `.github/workflows/node.yml`

### Other components

- [npm scripts](https://github.com/saadmansakib47/electronics-calculator/blob/main/package.json): Node package · Starts local static serving and test tooling. · `package.json`

## Connections

- Landing page → Basic calculator page: navigates to
- Landing page → Advanced calculator page: navigates to
- Landing page → Electronics calculator page: navigates to
- Basic calculator page → Shared styles: loads
- Advanced calculator page → Shared styles: loads
- Electronics calculator page → Shared styles: loads
- Basic calculator page → Basic calculator: loads
- Advanced calculator page → Advanced calculator: loads
- Electronics calculator page → Electronics calculator: loads
- Electronics calculator → Validation utility: validates with
- Electronics calculator → Electronics reference: implements formulas from
- Basic tests → Basic calculator: imports
- Advanced tests → Advanced calculator: imports
- Electronics tests → Electronics calculator: tests
- Basic tests → Test helpers: uses
- Advanced tests → Test helpers: uses
- Electronics tests → Test helpers: uses
- Node CI → npm scripts: runs test script
