# stiansame/fed2_pe2_holidaze architecture

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

- Interactive diagram: https://gitdiagram.com/stiansame/fed2_pe2_holidaze
- Repository: https://github.com/stiansame/fed2_pe2_holidaze

## Overview

Holidaze is a React accommodation-booking frontend. Travelers browse and filter venues, inspect availability, review and manage stays; venue managers create listings and oversee venues and bookings. The map also includes account/authentication, profiles, and manager workflows. API modules connect these screens to the Noroff service, with shared date and booking utilities supporting availability and summaries. Edges follow the excerpts and SOURCE INDEX references; unsampled features are included where the README or route table establishes them, but uncertain internal calls are omitted.

Main entry points: [`src/App.jsx`](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/App.jsx) (Route application), [`src/api/venues.js`](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/venues.js) (Venue API), [`src/pages/BookingReview.jsx`](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/BookingReview.jsx) (Booking review), [`src/api/bookings.js`](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/bookings.js) (Booking API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App and access"]
  node_app["Route application<br/>[App.jsx]"]
  node_auth["Authentication<br/>[AuthProvider.jsx]"]
  node_authguard["Access guard<br/>[RequireAuth.jsx]"]
  node_authform["Sign in / register<br/>[AuthForm.jsx]"]
end

subgraph group_travel["Traveler booking"]
  node_browse["Venue discovery<br/>[Venues.jsx]"]
  node_details["Venue details<br/>[VenueDetails.jsx]"]
  node_availability["Stay availability"]
  node_bookingreview["Booking review<br/>[BookingReview.jsx]"]
  node_bookingflow["Booking lifecycle"]
  node_mybookings["My bookings<br/>[BookingsList.jsx]"]
  node_profiles["Profiles and account<br/>[Profile.jsx]"]
end

subgraph group_manage["Venue management"]
  node_managerdash["Manager overview"]
  node_managervenues["Venue listings<br/>[MyVenues.jsx]"]
  node_venueedit["Listing editor<br/>[VenueForm.jsx]"]
  node_managerbookings["Venue bookings<br/>[VenueBookings.jsx]"]
  node_managerdetail["Booking details"]
end

subgraph group_services["API and domain"]
  node_venueapi["Venue API<br/>[venues.js]"]
  node_bookingapi["Booking API<br/>[bookings.js]"]
  node_profileapi["Profile API<br/>[profiles.js]"]
  node_http["Noroff API client<br/>[client.js]"]
  node_dateutils["Availability rules<br/>[availability.js]"]
  node_bookingutils["Booking calculations<br/>[bookings.js]"]
  node_managerutils["Manager summaries<br/>[manager.js]"]
end

subgraph group_shared["Shared interface"]
  node_layout["Site layout<br/>[Layout.jsx]"]
end

node_traveler(("Traveler"))
node_manager(("Venue manager"))

node_traveler -->|"opens routes"| node_app
node_manager -->|"opens routes"| node_app
node_app -->|"guards routes"| node_authguard
node_authguard -->|"checks session"| node_auth
node_authform -->|"uses session"| node_auth
node_app -->|"routes to"| node_browse
node_app -->|"routes to"| node_details
node_app -->|"routes to"| node_bookingreview
node_app -->|"routes to"| node_bookingflow
node_app -->|"routes to"| node_mybookings
node_app -->|"routes to"| node_profiles
node_app -->|"routes to"| node_managerdash
node_app -->|"routes to"| node_managervenues
node_app -->|"routes to"| node_venueedit
node_app -->|"routes to"| node_managerbookings
node_app -->|"routes to"| node_managerdetail
node_app -->|"wraps routes"| node_layout
node_browse -->|"loads listings"| node_venueapi
node_details -->|"loads venue"| node_venueapi
node_details -->|"shows booking"| node_availability
node_availability -->|"validates stay"| node_dateutils
node_bookingreview -->|"loads venue"| node_venueapi
node_bookingreview -->|"submits booking"| node_bookingapi
node_bookingreview -->|"checks stay"| node_dateutils
node_bookingreview -->|"summarizes stay"| node_bookingutils
node_bookingflow -.->|"manages booking"| node_bookingapi
node_mybookings -->|"loads bookings"| node_bookingapi
node_managerdash -->|"loads venues"| node_profileapi
node_managerdash -->|"summarizes data"| node_managerutils
node_managerdash -.->|"links to"| node_managerbookings
node_managerdetail -->|"loads booking"| node_bookingapi
node_managerdetail -->|"loads venue"| node_venueapi
node_managerdetail -->|"shows dates"| node_availability
node_venueedit -.->|"saves listing"| node_venueapi
node_venueapi -->|"sends requests"| node_http
node_bookingapi -->|"sends requests"| node_http
node_profileapi -.->|"sends requests"| node_http
node_venueapi -->|"filters dates"| node_dateutils
node_bookingutils -->|"uses date rules"| node_dateutils
node_managerutils -->|"groups bookings"| node_bookingutils
node_managerutils -->|"checks dates"| node_dateutils

click node_app "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/App.jsx"
click node_auth "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/auth/AuthProvider.jsx"
click node_authguard "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/auth/RequireAuth.jsx"
click node_authform "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/AuthForm.jsx"
click node_browse "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/Venues.jsx"
click node_details "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/VenueDetails.jsx"
click node_availability "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/venues/AvailabilityCalendar.jsx"
click node_bookingreview "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/BookingReview.jsx"
click node_bookingflow "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/BookingConfirmation.jsx"
click node_mybookings "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/bookings/BookingsList.jsx"
click node_profiles "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/Profile.jsx"
click node_managerdash "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/ManagerDashboard.jsx"
click node_managervenues "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/MyVenues.jsx"
click node_venueedit "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/venues/VenueForm.jsx"
click node_managerbookings "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/VenueBookings.jsx"
click node_managerdetail "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/ManagerBookingDetails.jsx"
click node_venueapi "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/venues.js"
click node_bookingapi "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/bookings.js"
click node_profileapi "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/profiles.js"
click node_http "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/client.js"
click node_dateutils "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/utils/availability.js"
click node_bookingutils "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/utils/bookings.js"
click node_managerutils "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/utils/manager.js"
click node_layout "https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/layout/Layout.jsx"

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_auth,node_authguard,node_authform toneBlue
class node_browse,node_details,node_availability,node_bookingreview,node_bookingflow,node_mybookings,node_profiles toneAmber
class node_managerdash,node_managervenues,node_venueedit,node_managerbookings,node_managerdetail toneMint
class node_venueapi,node_bookingapi,node_profileapi,node_http,node_dateutils,node_bookingutils,node_managerutils toneRose
class node_layout,node_traveler,node_manager toneIndigo
```

## Components

### App and access

- [Route application](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/App.jsx): `src/App.jsx`
- [Authentication](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/auth/AuthProvider.jsx): `src/auth/AuthProvider.jsx`
- [Access guard](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/auth/RequireAuth.jsx): `src/auth/RequireAuth.jsx`
- [Sign in / register](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/AuthForm.jsx): `src/pages/AuthForm.jsx`

### Traveler booking

- [Venue discovery](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/Venues.jsx): `src/pages/Venues.jsx`
- [Venue details](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/VenueDetails.jsx): `src/pages/VenueDetails.jsx`
- [Stay availability](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/venues/AvailabilityCalendar.jsx): `src/components/venues/AvailabilityCalendar.jsx`
- [Booking review](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/BookingReview.jsx): `src/pages/BookingReview.jsx`
- [Booking lifecycle](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/BookingConfirmation.jsx): `src/pages/BookingConfirmation.jsx`
- [My bookings](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/bookings/BookingsList.jsx): `src/components/bookings/BookingsList.jsx`
- [Profiles and account](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/Profile.jsx): `src/pages/Profile.jsx`

### Venue management

- [Manager overview](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/ManagerDashboard.jsx): `src/pages/ManagerDashboard.jsx`
- [Venue listings](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/MyVenues.jsx): `src/pages/MyVenues.jsx`
- [Listing editor](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/venues/VenueForm.jsx): `src/components/venues/VenueForm.jsx`
- [Venue bookings](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/VenueBookings.jsx): `src/pages/VenueBookings.jsx`
- [Booking details](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/pages/ManagerBookingDetails.jsx): `src/pages/ManagerBookingDetails.jsx`

### API and domain

- [Venue API](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/venues.js): `src/api/venues.js`
- [Booking API](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/bookings.js): `src/api/bookings.js`
- [Profile API](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/profiles.js): `src/api/profiles.js`
- [Noroff API client](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/api/client.js): `src/api/client.js`
- [Availability rules](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/utils/availability.js): `src/utils/availability.js`
- [Booking calculations](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/utils/bookings.js): `src/utils/bookings.js`
- [Manager summaries](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/utils/manager.js): `src/utils/manager.js`

### Shared interface

- [Site layout](https://github.com/stiansame/fed2_pe2_holidaze/blob/main/src/components/layout/Layout.jsx): `src/components/layout/Layout.jsx`

### Other components

- **Traveler**
- **Venue manager**

## Connections

- Traveler → Route application: opens routes (evidence: `src/App.jsx`)
- Venue manager → Route application: opens routes (evidence: `src/App.jsx`)
- Route application → Access guard: guards routes (evidence: `src/App.jsx`)
- Access guard → Authentication: checks session (evidence: `src/auth/RequireAuth.jsx`)
- Sign in / register → Authentication: uses session (evidence: `src/pages/AuthForm.jsx`)
- Route application → Venue discovery: routes to (evidence: `src/App.jsx`)
- Route application → Venue details: routes to (evidence: `src/App.jsx`)
- Route application → Booking review: routes to (evidence: `src/App.jsx`)
- Route application → Booking lifecycle: routes to (evidence: `src/App.jsx`)
- Route application → My bookings: routes to (evidence: `src/App.jsx`)
- Route application → Profiles and account: routes to (evidence: `src/App.jsx`)
- Route application → Manager overview: routes to (evidence: `src/App.jsx`)
- Route application → Venue listings: routes to (evidence: `src/App.jsx`)
- Route application → Listing editor: routes to (evidence: `src/App.jsx`)
- Route application → Venue bookings: routes to (evidence: `src/App.jsx`)
- Route application → Booking details: routes to (evidence: `src/App.jsx`)
- Route application → Site layout: wraps routes (evidence: `src/App.jsx`)
- Venue discovery → Venue API: loads listings (evidence: `src/pages/Venues.jsx`)
- Venue details → Venue API: loads venue (evidence: `src/pages/VenueDetails.jsx`)
- Venue details → Stay availability: shows booking (evidence: `src/pages/VenueDetails.jsx`)
- Stay availability → Availability rules: validates stay (evidence: `src/components/venues/AvailabilityCalendar.jsx`)
- Booking review → Venue API: loads venue (evidence: `src/pages/BookingReview.jsx`)
- Booking review → Booking API: submits booking (evidence: `src/pages/BookingReview.jsx`)
- Booking review → Availability rules: checks stay (evidence: `src/pages/BookingReview.jsx`)
- Booking review → Booking calculations: summarizes stay (evidence: `src/pages/BookingReview.jsx`)
- Booking lifecycle → Booking API: manages booking
- My bookings → Booking API: loads bookings (evidence: `src/components/bookings/BookingsList.jsx`)
- Manager overview → Profile API: loads venues (evidence: `src/pages/ManagerDashboard.jsx`)
- Manager overview → Manager summaries: summarizes data (evidence: `src/pages/ManagerDashboard.jsx`)
- Manager overview → Venue bookings: links to
- Booking details → Booking API: loads booking (evidence: `src/pages/ManagerBookingDetails.jsx`)
- Booking details → Venue API: loads venue (evidence: `src/pages/ManagerBookingDetails.jsx`)
- Booking details → Stay availability: shows dates (evidence: `src/pages/ManagerBookingDetails.jsx`)
- Listing editor → Venue API: saves listing
- Venue API → Noroff API client: sends requests (evidence: `src/api/venues.js`)
- Booking API → Noroff API client: sends requests (evidence: `src/api/bookings.js`)
- Profile API → Noroff API client: sends requests
- Venue API → Availability rules: filters dates (evidence: `src/api/venues.js`)
- Booking calculations → Availability rules: uses date rules (evidence: `src/utils/bookings.js`)
- Manager summaries → Booking calculations: groups bookings (evidence: `src/utils/manager.js`)
- Manager summaries → Availability rules: checks dates (evidence: `src/utils/manager.js`)
