# harris0519/hrlportal architecture

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

- Interactive diagram: https://gitdiagram.com/harris0519/hrlportal
- Repository: https://github.com/harris0519/hrlportal

## Overview

HRL Invoice Portal is a browser-based tool for preparing invoices, quotations, and transmittals, reviewing reports, exporting PDFs, and composing document emails. The visible client entry mounts the React app; its main component handles portal access and document workflows, while shared email formatting/validation and the server handle delivery. The server also supports a separate contact-inquiry email flow. Several UI details and the contact-form client are not shown, so their connections are omitted rather than inferred.

Main entry points: [`hrl-invoice-react/src/App.jsx`](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx) (Portal app), [`server/email.js`](https://github.com/harris0519/hrlportal/blob/main/server/email.js) (Document mail preparation), [`server/index.js`](https://github.com/harris0519/hrlportal/blob/main/server/index.js) (HTTP API), [`hrl-invoice-react/src/main.jsx`](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/main.jsx) (React entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Portal UI"]
  node_entry["React entry<br/>[main.jsx]"]
  node_app["Portal app<br/>[App.jsx]"]
  node_access["Portal access<br/>[App.jsx]"]
end

subgraph group_documents["Document workflows"]
  node_editor["Document editor<br/>[App.jsx]"]
  node_reports["Reports<br/>[App.jsx]"]
  node_preview["Document preview<br/>[App.jsx]"]
  node_pdf["PDF export<br/>[App.jsx]"]
end

subgraph group_mail["Email services"]
  node_emailcompose["Email composition<br/>[App.jsx]"]
  node_emailformat["Document email formatting<br/>[documentEmail.js]"]
  node_docmail["Document mail preparation<br/>[email.js]"]
  node_contactmail["Contact email builder<br/>[contactEmail.js]"]
end

subgraph group_api["API"]
  node_api["HTTP API<br/>[index.js]"]
  node_contactroute["Contact inquiry route<br/>[index.js]"]
end

node_user(("Portal user"))
node_provider{{"Brevo email service"}}

node_user -.->|"opens portal"| node_entry
node_entry -->|"renders"| node_app
node_app -->|"handles access"| node_access
node_app -->|"edits drafts"| node_editor
node_app -->|"shows reports"| node_reports
node_app -->|"previews drafts"| node_preview
node_app -->|"exports PDF"| node_pdf
node_app -->|"composes email"| node_emailcompose
node_app -->|"builds preview"| node_emailformat
node_app -->|"requests login"| node_api
node_api -->|"prepares document mail"| node_docmail
node_docmail -->|"validates and formats"| node_emailformat
node_docmail -->|"sends message"| node_provider
node_api -->|"routes inquiry"| node_contactroute
node_contactroute -->|"validates and builds"| node_contactmail
node_contactroute -->|"sends inquiry"| node_provider

click node_entry "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/main.jsx"
click node_app "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_access "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_editor "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_reports "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_preview "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_pdf "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_emailcompose "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx"
click node_emailformat "https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/documentEmail.js"
click node_api "https://github.com/harris0519/hrlportal/blob/main/server/index.js"
click node_docmail "https://github.com/harris0519/hrlportal/blob/main/server/email.js"
click node_contactroute "https://github.com/harris0519/hrlportal/blob/main/server/index.js"
click node_contactmail "https://github.com/harris0519/hrlportal/blob/main/server/contactEmail.js"

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_entry,node_app,node_access,node_user toneBlue
class node_editor,node_reports,node_preview,node_pdf toneAmber
class node_emailcompose,node_emailformat,node_docmail,node_contactmail toneMint
class node_api,node_contactroute toneRose
class node_provider toneIndigo
```

## Components

### Portal UI

- [React entry](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/main.jsx): `hrl-invoice-react/src/main.jsx`
- [Portal app](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`
- [Portal access](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`

### Document workflows

- [Document editor](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`
- [Reports](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`
- [Document preview](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`
- [PDF export](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`

### Email services

- [Email composition](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/App.jsx): `hrl-invoice-react/src/App.jsx`
- [Document email formatting](https://github.com/harris0519/hrlportal/blob/main/hrl-invoice-react/src/documentEmail.js): `hrl-invoice-react/src/documentEmail.js`
- [Document mail preparation](https://github.com/harris0519/hrlportal/blob/main/server/email.js): `server/email.js`
- [Contact email builder](https://github.com/harris0519/hrlportal/blob/main/server/contactEmail.js): `server/contactEmail.js`

### API

- [HTTP API](https://github.com/harris0519/hrlportal/blob/main/server/index.js): `server/index.js`
- [Contact inquiry route](https://github.com/harris0519/hrlportal/blob/main/server/index.js): `server/index.js`

### Other components

- **Portal user**
- **Brevo email service**

## Connections

- Portal user → React entry: opens portal
- React entry → Portal app: renders (evidence: `hrl-invoice-react/src/main.jsx`)
- Portal app → Portal access: handles access (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → Document editor: edits drafts (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → Reports: shows reports (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → Document preview: previews drafts (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → PDF export: exports PDF (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → Email composition: composes email (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → Document email formatting: builds preview (evidence: `hrl-invoice-react/src/App.jsx`)
- Portal app → HTTP API: requests login (evidence: `hrl-invoice-react/src/App.jsx`)
- HTTP API → Document mail preparation: prepares document mail (evidence: `server/index.js`)
- Document mail preparation → Document email formatting: validates and formats (evidence: `server/email.js`)
- Document mail preparation → Brevo email service: sends message (evidence: `server/email.js`)
- HTTP API → Contact inquiry route: routes inquiry (evidence: `server/index.js`)
- Contact inquiry route → Contact email builder: validates and builds (evidence: `server/index.js`)
- Contact inquiry route → Brevo email service: sends inquiry (evidence: `server/index.js`)
