# snowdondigital/priceplanner architecture

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

- Interactive diagram: https://gitdiagram.com/snowdondigital/priceplanner
- Repository: https://github.com/snowdondigital/priceplanner

## Overview

PricePlan is a PHP product-pricing planner: users maintain product cost and pricing inputs, calculate suggested and realized prices and margins, and use those records in product lists or client-specific price lists. The wider application also supports role-based access, CSV import/export, audit history, configurable pricing defaults and groups, and administrator-managed updates. The graph follows documented capabilities and sampled call sites; several unsampled page implementations are represented by their exact paths, with uncertain internal wiring omitted.

Main entry points: [`public/product.php`](https://github.com/snowdondigital/priceplanner/blob/main/public/product.php) (Product pages), [`app/products.php`](https://github.com/snowdondigital/priceplanner/blob/main/app/products.php) (Product records), [`public/pricelist.php`](https://github.com/snowdondigital/priceplanner/blob/main/public/pricelist.php) (Price-list editor), [`public/index.php`](https://github.com/snowdondigital/priceplanner/blob/main/public/index.php) (Application entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_product["Product planning"]
  node_product_pages["Product pages<br/>[product.php]"]
  node_product_list["Product catalogue<br/>[products.php]"]
  node_product_rules["Product records<br/>[products.php]"]
  node_pricing["Pricing calculations<br/>[pricing.php]"]
  node_dashboard["Dashboard<br/>[dashboard.php]"]
  node_import["CSV import<br/>[import.php]"]
  node_export["Product export<br/>[export.php]"]
end

subgraph group_lists["Price lists"]
  node_lists_page["Price-list management<br/>[pricelists.php]"]
  node_list_editor["Price-list editor<br/>[pricelist.php]"]
  node_list_rules["Price-list rules<br/>[pricelists.php]"]
  node_list_export["Price-list export"]
end

subgraph group_admin["Access and administration"]
  node_auth["Authentication and roles<br/>[auth.php]"]
  node_settings["Pricing settings and groups<br/>[settings.php]"]
  node_users["User administration<br/>[users.php]"]
  node_audit_page["Audit history<br/>[audit.php]"]
  node_audit_rules["Audit recording<br/>[audit.php]"]
  node_updates_page["Update management<br/>[updates.php]"]
  node_updates_rules["Release installation<br/>[updates.php]"]
end

subgraph group_platform["Application services"]
  node_entry["Application entry<br/>[index.php]"]
  node_database[("MariaDB / MySQL")]
end

node_user(("User"))
node_github["GitHub releases"]

node_user -->|"opens app"| node_entry
node_entry -->|"checks session"| node_auth
node_entry -->|"redirects"| node_dashboard
node_product_pages -->|"checks access"| node_auth
node_product_pages -->|"saves product"| node_product_rules
node_product_pages -->|"calculates prices"| node_pricing
node_product_rules -->|"uses calculations"| node_pricing
node_product_rules -->|"records changes"| node_audit_rules
node_product_pages -->|"reads and writes"| node_database
node_product_list -->|"queries products"| node_database
node_import -->|"creates records"| node_database
node_export -->|"reads products"| node_database
node_lists_page -->|"opens lists"| node_list_editor
node_list_editor -->|"uses list logic"| node_list_rules
node_list_editor -->|"reads products"| node_database
node_list_rules -->|"calculates line prices"| node_pricing
node_list_export -->|"formats list values"| node_list_rules
node_list_export -->|"reads list data"| node_database
node_settings -->|"stores defaults"| node_database
node_users -->|"manages accounts"| node_database
node_auth -->|"loads accounts"| node_database
node_audit_page -->|"reads history"| node_database
node_audit_rules -->|"writes history"| node_database
node_updates_page -->|"installs release"| node_updates_rules
node_updates_rules -.->|"fetches releases"| node_github

click node_entry "https://github.com/snowdondigital/priceplanner/blob/main/public/index.php"
click node_auth "https://github.com/snowdondigital/priceplanner/blob/main/app/auth.php"
click node_product_pages "https://github.com/snowdondigital/priceplanner/blob/main/public/product.php"
click node_product_list "https://github.com/snowdondigital/priceplanner/blob/main/public/products.php"
click node_product_rules "https://github.com/snowdondigital/priceplanner/blob/main/app/products.php"
click node_pricing "https://github.com/snowdondigital/priceplanner/blob/main/app/pricing.php"
click node_dashboard "https://github.com/snowdondigital/priceplanner/blob/main/public/dashboard.php"
click node_import "https://github.com/snowdondigital/priceplanner/blob/main/public/import.php"
click node_export "https://github.com/snowdondigital/priceplanner/blob/main/public/export.php"
click node_lists_page "https://github.com/snowdondigital/priceplanner/blob/main/public/pricelists.php"
click node_list_editor "https://github.com/snowdondigital/priceplanner/blob/main/public/pricelist.php"
click node_list_rules "https://github.com/snowdondigital/priceplanner/blob/main/app/pricelists.php"
click node_list_export "https://github.com/snowdondigital/priceplanner/blob/main/public/pricelist_export.php"
click node_settings "https://github.com/snowdondigital/priceplanner/blob/main/public/settings.php"
click node_users "https://github.com/snowdondigital/priceplanner/blob/main/public/users.php"
click node_audit_page "https://github.com/snowdondigital/priceplanner/blob/main/public/audit.php"
click node_audit_rules "https://github.com/snowdondigital/priceplanner/blob/main/app/audit.php"
click node_updates_page "https://github.com/snowdondigital/priceplanner/blob/main/public/updates.php"
click node_updates_rules "https://github.com/snowdondigital/priceplanner/blob/main/app/updates.php"

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_product_pages,node_product_list,node_product_rules,node_pricing,node_dashboard,node_import,node_export,node_user toneBlue
class node_lists_page,node_list_editor,node_list_rules,node_list_export toneAmber
class node_auth,node_settings,node_users,node_audit_page,node_audit_rules,node_updates_page,node_updates_rules toneMint
class node_entry,node_database toneRose
class node_github toneIndigo
```

## Components

### Product planning

- [Product pages](https://github.com/snowdondigital/priceplanner/blob/main/public/product.php): `public/product.php`
- [Product catalogue](https://github.com/snowdondigital/priceplanner/blob/main/public/products.php): `public/products.php`
- [Product records](https://github.com/snowdondigital/priceplanner/blob/main/app/products.php): `app/products.php`
- [Pricing calculations](https://github.com/snowdondigital/priceplanner/blob/main/app/pricing.php): `app/pricing.php`
- [Dashboard](https://github.com/snowdondigital/priceplanner/blob/main/public/dashboard.php): `public/dashboard.php`
- [CSV import](https://github.com/snowdondigital/priceplanner/blob/main/public/import.php): `public/import.php`
- [Product export](https://github.com/snowdondigital/priceplanner/blob/main/public/export.php): `public/export.php`

### Price lists

- [Price-list management](https://github.com/snowdondigital/priceplanner/blob/main/public/pricelists.php): `public/pricelists.php`
- [Price-list editor](https://github.com/snowdondigital/priceplanner/blob/main/public/pricelist.php): `public/pricelist.php`
- [Price-list rules](https://github.com/snowdondigital/priceplanner/blob/main/app/pricelists.php): `app/pricelists.php`
- [Price-list export](https://github.com/snowdondigital/priceplanner/blob/main/public/pricelist_export.php): `public/pricelist_export.php`

### Access and administration

- [Authentication and roles](https://github.com/snowdondigital/priceplanner/blob/main/app/auth.php): `app/auth.php`
- [Pricing settings and groups](https://github.com/snowdondigital/priceplanner/blob/main/public/settings.php): `public/settings.php`
- [User administration](https://github.com/snowdondigital/priceplanner/blob/main/public/users.php): `public/users.php`
- [Audit history](https://github.com/snowdondigital/priceplanner/blob/main/public/audit.php): `public/audit.php`
- [Audit recording](https://github.com/snowdondigital/priceplanner/blob/main/app/audit.php): `app/audit.php`
- [Update management](https://github.com/snowdondigital/priceplanner/blob/main/public/updates.php): `public/updates.php`
- [Release installation](https://github.com/snowdondigital/priceplanner/blob/main/app/updates.php): `app/updates.php`

### Application services

- [Application entry](https://github.com/snowdondigital/priceplanner/blob/main/public/index.php): `public/index.php`
- **MariaDB / MySQL**

### Other components

- **User**
- **GitHub releases**

## Connections

- User → Application entry: opens app
- Application entry → Authentication and roles: checks session
- Application entry → Dashboard: redirects
- Product pages → Authentication and roles: checks access
- Product pages → Product records: saves product
- Product pages → Pricing calculations: calculates prices
- Product records → Pricing calculations: uses calculations
- Product records → Audit recording: records changes
- Product pages → MariaDB / MySQL: reads and writes
- Product catalogue → MariaDB / MySQL: queries products
- CSV import → MariaDB / MySQL: creates records
- Product export → MariaDB / MySQL: reads products
- Price-list management → Price-list editor: opens lists
- Price-list editor → Price-list rules: uses list logic
- Price-list editor → MariaDB / MySQL: reads products
- Price-list rules → Pricing calculations: calculates line prices
- Price-list export → Price-list rules: formats list values
- Price-list export → MariaDB / MySQL: reads list data
- Pricing settings and groups → MariaDB / MySQL: stores defaults
- User administration → MariaDB / MySQL: manages accounts
- Authentication and roles → MariaDB / MySQL: loads accounts
- Audit history → MariaDB / MySQL: reads history
- Audit recording → MariaDB / MySQL: writes history
- Update management → Release installation: installs release
- Release installation → GitHub releases: fetches releases
