# kancanvas/ownpizza architecture

> Architecture diagram of the GitHub repository kancanvas/ownpizza, 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/kancanvas/ownpizza
- Repository: https://github.com/kancanvas/ownpizza

## Overview

OWNpizza is a small pizza storefront built with Next.js and Express. Visitors can view a static pizza showcase, open an informational page, or visit a menu page that fetches pizza records from Express; the API reads PostgreSQL through Prisma and returns sample fallback pizzas when the database is empty or unavailable. The shared layout renders the header around the selected page. The sampled source confirms this menu flow, but does not establish working search, cart, login, or checkout behavior.

Main entry points: [`app/layout.js`](https://github.com/kancanvas/ownpizza/blob/main/app/layout.js) (Shared layout), [`server.js`](https://github.com/kancanvas/ownpizza/blob/main/server.js) (Pizza API), [`app/menu/page.js`](https://github.com/kancanvas/ownpizza/blob/main/app/menu/page.js) (Menu page), [`lib/prisma.js`](https://github.com/kancanvas/ownpizza/blob/main/lib/prisma.js) (Prisma client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Storefront"]
  node_layout["Shared layout<br/>[layout.js]"]
  node_header["Header<br/>[Header.jsx]"]
  node_home["Pizza showcase<br/>[page.js]"]
  node_menu["Menu page<br/>[page.js]"]
  node_about["About page<br/>[page.js]"]
end

subgraph group_api["API"]
  node_express["Express server<br/>[server.js]"]
  node_pizza_api["Pizza API<br/>[server.js]"]
end

subgraph group_data["Persistence"]
  node_prisma_client["Prisma client<br/>[prisma.js]"]
  node_pizza_db[("PostgreSQL pizzas<br/>[schema.prisma]")]
end

node_visitor(("Visitor"))

node_visitor -->|"opens site"| node_layout
node_layout -->|"renders"| node_header
node_layout -->|"renders"| node_home
node_layout -->|"renders"| node_menu
node_layout -->|"renders"| node_about
node_menu -->|"fetches menu"| node_pizza_api
node_express -->|"handles route"| node_pizza_api
node_pizza_api -->|"queries"| node_prisma_client
node_prisma_client -->|"reads pizzas"| node_pizza_db
node_pizza_api -->|"returns JSON"| node_menu

click node_layout "https://github.com/kancanvas/ownpizza/blob/main/app/layout.js"
click node_header "https://github.com/kancanvas/ownpizza/blob/main/components/Header.jsx"
click node_home "https://github.com/kancanvas/ownpizza/blob/main/app/page.js"
click node_menu "https://github.com/kancanvas/ownpizza/blob/main/app/menu/page.js"
click node_about "https://github.com/kancanvas/ownpizza/blob/main/app/about/page.js"
click node_express "https://github.com/kancanvas/ownpizza/blob/main/server.js"
click node_pizza_api "https://github.com/kancanvas/ownpizza/blob/main/server.js"
click node_prisma_client "https://github.com/kancanvas/ownpizza/blob/main/lib/prisma.js"
click node_pizza_db "https://github.com/kancanvas/ownpizza/blob/main/prisma/schema.prisma"

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_layout,node_header,node_home,node_menu,node_about toneBlue
class node_express,node_pizza_api toneAmber
class node_prisma_client,node_pizza_db toneMint
class node_visitor toneIndigo
```

## Components

### Storefront

- [Shared layout](https://github.com/kancanvas/ownpizza/blob/main/app/layout.js): `app/layout.js`
- [Header](https://github.com/kancanvas/ownpizza/blob/main/components/Header.jsx): `components/Header.jsx`
- [Pizza showcase](https://github.com/kancanvas/ownpizza/blob/main/app/page.js): `app/page.js`
- [Menu page](https://github.com/kancanvas/ownpizza/blob/main/app/menu/page.js): `app/menu/page.js`
- [About page](https://github.com/kancanvas/ownpizza/blob/main/app/about/page.js): `app/about/page.js`

### API

- [Express server](https://github.com/kancanvas/ownpizza/blob/main/server.js): `server.js`
- [Pizza API](https://github.com/kancanvas/ownpizza/blob/main/server.js): `server.js`

### Persistence

- [Prisma client](https://github.com/kancanvas/ownpizza/blob/main/lib/prisma.js): `lib/prisma.js`
- [PostgreSQL pizzas](https://github.com/kancanvas/ownpizza/blob/main/prisma/schema.prisma): `prisma/schema.prisma`

### Other components

- **Visitor**

## Connections

- Visitor → Shared layout: opens site
- Shared layout → Header: renders
- Shared layout → Pizza showcase: renders
- Shared layout → Menu page: renders
- Shared layout → About page: renders
- Menu page → Pizza API: fetches menu
- Express server → Pizza API: handles route
- Pizza API → Prisma client: queries
- Prisma client → PostgreSQL pizzas: reads pizzas
- Pizza API → Menu page: returns JSON
