# davidakerlind/harpaviljongen-admin-service architecture

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

- Interactive diagram: https://gitdiagram.com/davidakerlind/harpaviljongen-admin-service
- Repository: https://github.com/davidakerlind/harpaviljongen-admin-service

## Overview

Harpaviljongen Admin is a staff-facing React app for managing restaurant content and accounts on the public website. Staff sign in, then use routed admin pages to read or change menus and PDFs, opening hours, page visibility, homepage photos, users, and profile settings; they can also review activity and analytics. Pages call the shared API layer, which sends requests to the Harpaviljongen API; authentication supplies and refreshes the login token. The README documents the major capabilities, while sampled page code is incomplete, so uncertain page-to-API wiring is omitted.

Main entry points: [`src/api/index.js`](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/api/index.js) (API operations), [`src/App.jsx`](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/App.jsx) (Routes and access), [`src/components/AppLayout.jsx`](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/components/AppLayout.jsx) (Navigation layout), [`src/auth/AuthContext.jsx`](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/auth/AuthContext.jsx) (Auth context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and access"]
  node_app["Routes and access<br/>[App.jsx]"]
  node_layout["Navigation layout<br/>[AppLayout.jsx]"]
  node_auth["Auth context<br/>[AuthContext.jsx]"]
  node_login["Login<br/>[LoginPage.jsx]"]
end

subgraph group_content["Website content"]
  node_menus["Menus and PDFs<br/>[MenusPage.jsx]"]
  node_menucontext["Shared menu lists"]
  node_hours["Opening hours"]
  node_pages["Site page settings<br/>[PagesPage.jsx]"]
  node_hero["Homepage photos<br/>[HeroPage.jsx]"]
  node_heroimage["Image preparation<br/>[hero.js]"]
end

subgraph group_insight["Insights and overview"]
  node_overview["Overview widgets<br/>[OverviewPage.jsx]"]
  node_registry["Widget registry<br/>[registry.js]"]
  node_statistics["Statistics<br/>[StatisticsPage.jsx]"]
end

subgraph group_identity["Accounts and activity"]
  node_activity["Change log<br/>[ActivityPage.jsx]"]
  node_users["User administration<br/>[UsersPage.jsx]"]
  node_profile["Profile settings<br/>[ProfilePage.jsx]"]
end

subgraph group_integration["API integration"]
  node_api["API operations<br/>[index.js]"]
  node_client["HTTP client and token<br/>[client.js]"]
  node_service["Harpaviljongen API"]
  node_website["Restaurant website"]
  node_cloudflare["Cloudflare traffic data"]
end

node_staff(("Restaurant staff"))

node_staff -->|"opens admin"| node_app
node_app -->|"checks access"| node_auth
node_app -->|"routes signed-in"| node_layout
node_layout -->|"presents navigation"| node_staff
node_layout -->|"provides shared lists"| node_menucontext
node_overview -->|"uses widget definitions"| node_registry
node_menus -->|"reads and reloads"| node_menucontext
node_login -->|"submits credentials"| node_auth
node_auth -->|"verifies and updates session"| node_api
node_overview -->|"loads and saves widgets"| node_api
node_statistics -->|"requests analytics"| node_api
node_activity -->|"loads and clears log"| node_api
node_menus -->|"manages menus and PDFs"| node_api
node_menucontext -->|"loads menu lists"| node_api
node_hours -->|"reads and saves hours"| node_api
node_pages -->|"reads and saves settings"| node_api
node_hero -->|"prepares uploads"| node_heroimage
node_hero -->|"manages photos and settings"| node_api
node_users -->|"manages user accounts"| node_api
node_profile -->|"updates account"| node_api
node_api -->|"issues requests"| node_client
node_client -->|"sends authenticated requests"| node_service
node_api -->|"checks site response"| node_website
node_cloudflare -.->|"provides traffic data"| node_service

click node_app "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/App.jsx"
click node_layout "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/components/AppLayout.jsx"
click node_auth "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/auth/AuthContext.jsx"
click node_overview "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/OverviewPage.jsx"
click node_registry "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/components/dashboard/registry.js"
click node_statistics "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/StatisticsPage.jsx"
click node_activity "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/ActivityPage.jsx"
click node_menus "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/MenusPage.jsx"
click node_menucontext "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/menus/MenuListsContext.jsx"
click node_hours "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/OpeningHoursPage.jsx"
click node_pages "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/PagesPage.jsx"
click node_hero "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/HeroPage.jsx"
click node_heroimage "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/utils/hero.js"
click node_users "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/UsersPage.jsx"
click node_profile "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/ProfilePage.jsx"
click node_login "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/LoginPage.jsx"
click node_api "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/api/index.js"
click node_client "https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/api/client.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_app,node_layout,node_auth,node_login toneBlue
class node_menus,node_menucontext,node_hours,node_pages,node_hero,node_heroimage toneAmber
class node_overview,node_registry,node_statistics toneMint
class node_activity,node_users,node_profile toneRose
class node_api,node_client,node_service,node_website,node_cloudflare,node_staff toneIndigo
```

## Components

### App and access

- [Routes and access](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/App.jsx): `src/App.jsx`
- [Navigation layout](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/components/AppLayout.jsx): `src/components/AppLayout.jsx`
- [Auth context](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/auth/AuthContext.jsx): `src/auth/AuthContext.jsx`
- [Login](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/LoginPage.jsx): `src/pages/LoginPage.jsx`

### Website content

- [Menus and PDFs](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/MenusPage.jsx): `src/pages/MenusPage.jsx`
- [Shared menu lists](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/menus/MenuListsContext.jsx): `src/menus/MenuListsContext.jsx`
- [Opening hours](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/OpeningHoursPage.jsx): `src/pages/OpeningHoursPage.jsx`
- [Site page settings](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/PagesPage.jsx): `src/pages/PagesPage.jsx`
- [Homepage photos](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/HeroPage.jsx): `src/pages/HeroPage.jsx`
- [Image preparation](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/utils/hero.js): `src/utils/hero.js`

### Insights and overview

- [Overview widgets](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/OverviewPage.jsx): `src/pages/OverviewPage.jsx`
- [Widget registry](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/components/dashboard/registry.js): `src/components/dashboard/registry.js`
- [Statistics](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/StatisticsPage.jsx): `src/pages/StatisticsPage.jsx`

### Accounts and activity

- [Change log](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/ActivityPage.jsx): `src/pages/ActivityPage.jsx`
- [User administration](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/UsersPage.jsx): `src/pages/UsersPage.jsx`
- [Profile settings](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/pages/ProfilePage.jsx): `src/pages/ProfilePage.jsx`

### API integration

- [API operations](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/api/index.js): `src/api/index.js`
- [HTTP client and token](https://github.com/davidakerlind/harpaviljongen-admin-service/blob/main/src/api/client.js): `src/api/client.js`
- **Harpaviljongen API**
- **Restaurant website**
- **Cloudflare traffic data**

### Other components

- **Restaurant staff**

## Connections

- Restaurant staff → Routes and access: opens admin
- Routes and access → Auth context: checks access
- Routes and access → Navigation layout: routes signed-in
- Navigation layout → Restaurant staff: presents navigation
- Navigation layout → Shared menu lists: provides shared lists
- Overview widgets → Widget registry: uses widget definitions
- Menus and PDFs → Shared menu lists: reads and reloads
- Login → Auth context: submits credentials
- Auth context → API operations: verifies and updates session
- Overview widgets → API operations: loads and saves widgets
- Statistics → API operations: requests analytics
- Change log → API operations: loads and clears log
- Menus and PDFs → API operations: manages menus and PDFs
- Shared menu lists → API operations: loads menu lists
- Opening hours → API operations: reads and saves hours
- Site page settings → API operations: reads and saves settings
- Homepage photos → Image preparation: prepares uploads
- Homepage photos → API operations: manages photos and settings
- User administration → API operations: manages user accounts
- Profile settings → API operations: updates account
- API operations → HTTP client and token: issues requests
- HTTP client and token → Harpaviljongen API: sends authenticated requests
- API operations → Restaurant website: checks site response
- Cloudflare traffic data → Harpaviljongen API: provides traffic data
