# sell-mango/uin_eksamen2025_billettlyst architecture

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

- Interactive diagram: https://gitdiagram.com/sell-mango/uin_eksamen2025_billettlyst
- Repository: https://github.com/sell-mango/uin_eksamen2025_billettlyst

## Overview

Billettlyst is a React event-discovery site: users browse Ticketmaster events, filter categories, view attraction details, and optionally log in to see a Sanity-backed dashboard and wishlists. The graph separates navigation and views, discovery, and account/event data access, with Sanity schemas as an internal modeling layer. Source evidence is incomplete for several views; those components are included based on the source index, but only documented or indexed relationships are shown.

Main entry points: [`src/App.jsx`](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/App.jsx) (App and routes), [`src/fetchers/fetchTicketmaster.js`](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/fetchTicketmaster.js) (Ticketmaster fetchers), [`src/components/EventPage.jsx`](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventPage.jsx) (Attraction details), [`src/components/SanityEventDetails.jsx`](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/SanityEventDetails.jsx) (Saved event details)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and navigation"]
  node_app["App and routes<br/>[App.jsx]"]
  node_layout["Shared layout<br/>[Layout.jsx]"]
  node_header["Header<br/>[Header.jsx]"]
end

subgraph group_discovery["Event discovery"]
  node_home["Home<br/>[Home.jsx]"]
  node_category["Category results<br/>[CategoryPage.jsx]"]
  node_filter["Search filters<br/>[Filter.jsx]"]
  node_eventpage["Attraction details<br/>[EventPage.jsx]"]
  node_eventcard["Event card<br/>[EventCard.jsx]"]
  node_artistcard["Artist card<br/>[ArtistCard.jsx]"]
  node_eventheader["Event header<br/>[EventHeader.jsx]"]
end

subgraph group_accounts["Accounts and saved events"]
  node_dashboard["Dashboard and login<br/>[Dashboard.jsx]"]
  node_userview["User dashboard view"]
  node_sanitydetails["Saved event details"]
end

subgraph group_data["Data integrations"]
  node_ticketfetch["Ticketmaster fetchers"]
  node_userservices["User data services<br/>[brukerServices.js]"]
  node_eventservices["Event data services<br/>[eventServices.js]"]
  node_sanityclient["Sanity client<br/>[client.js]"]
  node_sanityschemas["Sanity document schemas<br/>[bruker.js]"]
end

node_visitor(("Visitor"))
node_ticketmaster{{"Ticketmaster API"}}
node_sanity[("Sanity datastore")]

node_visitor -->|"opens"| node_app
node_app -->|"renders routes in"| node_layout
node_layout -->|"renders"| node_header
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_category
node_app -->|"routes to"| node_eventpage
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_sanitydetails
node_app -->|"fetches classifications"| node_ticketfetch
node_app -->|"loads user"| node_userservices
node_home -->|"fetches events"| node_ticketfetch
node_category -->|"renders"| node_filter
node_category -->|"fetches suggestions"| node_ticketfetch
node_category -->|"renders results as"| node_eventcard
node_eventpage -->|"fetches attraction events"| node_ticketfetch
node_eventpage -->|"renders"| node_eventheader
node_eventpage -->|"renders events as"| node_eventcard
node_eventpage -->|"renders artists as"| node_artistcard
node_dashboard -->|"loads user"| node_userservices
node_dashboard -->|"renders"| node_userview
node_userview -->|"fetches event details"| node_ticketfetch
node_userview -->|"renders saved events as"| node_eventcard
node_sanitydetails -->|"loads saved event"| node_eventservices
node_sanitydetails -->|"loads event details"| node_ticketfetch
node_sanitydetails -->|"renders"| node_eventheader
node_sanitydetails -->|"renders wishlist users as"| node_artistcard
node_ticketfetch -->|"requests data"| node_ticketmaster
node_userservices -->|"queries through"| node_sanityclient
node_eventservices -->|"queries through"| node_sanityclient
node_sanityclient -->|"connects to"| node_sanity
node_sanity -.->|"stores schema-defined documents"| node_sanityschemas

click node_app "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/App.jsx"
click node_layout "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Layout.jsx"
click node_header "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Header.jsx"
click node_home "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Home.jsx"
click node_category "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/CategoryPage.jsx"
click node_filter "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Filter.jsx"
click node_eventpage "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventPage.jsx"
click node_eventcard "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventCard.jsx"
click node_artistcard "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/ArtistCard.jsx"
click node_eventheader "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventHeader.jsx"
click node_dashboard "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Dashboard.jsx"
click node_userview "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/UserDashboardView.jsx"
click node_sanitydetails "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/SanityEventDetails.jsx"
click node_ticketfetch "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/fetchTicketmaster.js"
click node_userservices "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/brukerServices.js"
click node_eventservices "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/eventServices.js"
click node_sanityclient "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/client.js"
click node_sanityschemas "https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/exambackend/schemaTypes/bruker.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_header toneBlue
class node_home,node_category,node_filter,node_eventpage,node_eventcard,node_artistcard,node_eventheader,node_sanity toneAmber
class node_dashboard,node_userview,node_sanitydetails,node_ticketmaster toneMint
class node_ticketfetch,node_userservices,node_eventservices,node_sanityclient,node_sanityschemas toneRose
class node_visitor toneIndigo
```

## Components

### Application and navigation

- [App and routes](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/App.jsx): `src/App.jsx`
- [Shared layout](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Layout.jsx): `src/components/Layout.jsx`
- [Header](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Header.jsx): `src/components/Header.jsx`

### Event discovery

- [Home](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Home.jsx): `src/components/Home.jsx`
- [Category results](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/CategoryPage.jsx): `src/components/CategoryPage.jsx`
- [Search filters](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Filter.jsx): `src/components/Filter.jsx`
- [Attraction details](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventPage.jsx): `src/components/EventPage.jsx`
- [Event card](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventCard.jsx): `src/components/EventCard.jsx`
- [Artist card](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/ArtistCard.jsx): `src/components/ArtistCard.jsx`
- [Event header](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/EventHeader.jsx): `src/components/EventHeader.jsx`

### Accounts and saved events

- [Dashboard and login](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/Dashboard.jsx): `src/components/Dashboard.jsx`
- [User dashboard view](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/UserDashboardView.jsx): `src/components/UserDashboardView.jsx`
- [Saved event details](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/components/SanityEventDetails.jsx): `src/components/SanityEventDetails.jsx`

### Data integrations

- [Ticketmaster fetchers](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/fetchTicketmaster.js): `src/fetchers/fetchTicketmaster.js`
- [User data services](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/brukerServices.js): `src/fetchers/brukerServices.js`
- [Event data services](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/eventServices.js): `src/fetchers/eventServices.js`
- [Sanity client](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/src/fetchers/client.js): `src/fetchers/client.js`
- [Sanity document schemas](https://github.com/sell-mango/uin_eksamen2025_billettlyst/blob/main/exambackend/schemaTypes/bruker.js): `exambackend/schemaTypes/bruker.js`

### Other components

- **Visitor**
- **Ticketmaster API**
- **Sanity datastore**

## Connections

- Visitor → App and routes: opens (evidence: `src/App.jsx`)
- App and routes → Shared layout: renders routes in (evidence: `src/App.jsx`)
- Shared layout → Header: renders (evidence: `src/components/Layout.jsx`)
- App and routes → Home: routes to (evidence: `src/App.jsx`)
- App and routes → Category results: routes to (evidence: `src/App.jsx`)
- App and routes → Attraction details: routes to (evidence: `src/App.jsx`)
- App and routes → Dashboard and login: routes to (evidence: `src/App.jsx`)
- App and routes → Saved event details: routes to (evidence: `src/App.jsx`)
- App and routes → Ticketmaster fetchers: fetches classifications (evidence: `src/App.jsx`)
- App and routes → User data services: loads user (evidence: `src/App.jsx`)
- Home → Ticketmaster fetchers: fetches events (evidence: `src/components/Home.jsx`)
- Category results → Search filters: renders (evidence: `src/components/CategoryPage.jsx`)
- Category results → Ticketmaster fetchers: fetches suggestions (evidence: `src/components/CategoryPage.jsx`)
- Category results → Event card: renders results as (evidence: `src/components/CategoryPage.jsx`)
- Attraction details → Ticketmaster fetchers: fetches attraction events (evidence: `src/components/EventPage.jsx`)
- Attraction details → Event header: renders (evidence: `src/components/EventPage.jsx`)
- Attraction details → Event card: renders events as (evidence: `src/components/EventPage.jsx`)
- Attraction details → Artist card: renders artists as (evidence: `src/components/EventPage.jsx`)
- Dashboard and login → User data services: loads user (evidence: `src/components/Dashboard.jsx`)
- Dashboard and login → User dashboard view: renders (evidence: `src/components/Dashboard.jsx`)
- User dashboard view → Ticketmaster fetchers: fetches event details (evidence: `src/components/UserDashboardView.jsx`)
- User dashboard view → Event card: renders saved events as (evidence: `src/components/UserDashboardView.jsx`)
- Saved event details → Event data services: loads saved event (evidence: `src/components/SanityEventDetails.jsx`)
- Saved event details → Ticketmaster fetchers: loads event details (evidence: `src/components/SanityEventDetails.jsx`)
- Saved event details → Event header: renders (evidence: `src/components/SanityEventDetails.jsx`)
- Saved event details → Artist card: renders wishlist users as (evidence: `src/components/SanityEventDetails.jsx`)
- Ticketmaster fetchers → Ticketmaster API: requests data (evidence: `src/fetchers/fetchTicketmaster.js`)
- User data services → Sanity client: queries through (evidence: `src/fetchers/brukerServices.js`)
- Event data services → Sanity client: queries through (evidence: `src/fetchers/eventServices.js`)
- Sanity client → Sanity datastore: connects to (evidence: `src/fetchers/client.js`)
- Sanity datastore → Sanity document schemas: stores schema-defined documents (evidence: `README.md`)
