# shreyasfegade/axle architecture

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

- Interactive diagram: https://gitdiagram.com/shreyasfegade/axle
- Repository: https://github.com/shreyasfegade/axle

## Overview

AXLE is a vehicle-rental application: a browser website lets renters browse and filter a fleet, inspect prices, book vehicles, and return rentals; a Java HTTP server provides the authoritative fleet, booking, pricing, and late-fee logic. The README documents these product stages, while sampled source confirms key server, service, and frontend orchestration calls. Some frontend sections and the demo implementation were not excerpted, so their documented behavior is represented without inferring internal call chains.

Main entry points: [`frontend/src/main.js`](https://github.com/shreyasfegade/axle/blob/main/frontend/src/main.js) (Website Startup), [`frontend/src/drawer.js`](https://github.com/shreyasfegade/axle/blob/main/frontend/src/drawer.js) (Booking Drawer), [`backend/src/RentalService.java`](https://github.com/shreyasfegade/axle/blob/main/backend/src/RentalService.java) (Rental Service), [`backend/src/Vehicle.java`](https://github.com/shreyasfegade/axle/blob/main/backend/src/Vehicle.java) (Vehicle State)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Rental Website"]
  node_main["Website Startup<br/>[main.js]"]
  node_film["Opening Film<br/>[film.js]"]
  node_rulebook["Pricing Rules<br/>[rulebook.js]"]
  node_fleet["Fleet Browser<br/>[fleet.js]"]
  node_drawer["Booking Drawer<br/>[drawer.js]"]
  node_rentals["My Rentals<br/>[rentals.js]"]
  node_viewer["3D Viewer<br/>[viewer.js]"]
  node_motion["Motion Layer<br/>[motion.js]"]
  node_odometer["Price Display<br/>[odometer.js]"]
end

subgraph group_http["HTTP Interface"]
  node_api["API Client<br/>[api.js]"]
  node_server["HTTP Server<br/>[Server.java]"]
  node_mainjava["Server Startup<br/>[Main.java]"]
end

subgraph group_domain["Rental Domain"]
  node_service["Rental Service<br/>[RentalService.java]"]
  node_vehicle["Vehicle State<br/>[Vehicle.java]"]
  node_car["Car Pricing<br/>[Car.java]"]
  node_bike["Bike Pricing<br/>[Bike.java]"]
  node_suv["SUV Pricing<br/>[SUV.java]"]
  node_booking["Booking Record<br/>[Booking.java]"]
  node_customer["Customer Details<br/>[Customer.java]"]
  node_unavailable["Availability Error"]
end

subgraph group_demo["Browser Demo"]
  node_demo["Demo API<br/>[demo.js]"]
end

node_renter(("Renter"))

node_renter -->|"uses"| node_main
node_main -->|"initializes"| node_film
node_main -->|"initializes"| node_rulebook
node_main -->|"initializes"| node_fleet
node_main -->|"initializes"| node_drawer
node_main -->|"initializes"| node_rentals
node_main -->|"imports"| node_motion
node_drawer -->|"requests quotes"| node_api
node_drawer -->|"updates errors"| node_fleet
node_drawer -->|"updates quote"| node_odometer
node_drawer -.->|"opens model"| node_viewer
node_fleet -->|"loads fleet"| node_api
node_fleet -->|"opens booking"| node_drawer
node_rentals -->|"manages returns"| node_api
node_rulebook -->|"gets prices"| node_api
node_api -->|"selects demo"| node_demo
node_api -->|"sends API requests"| node_server
node_server -->|"dispatches operations"| node_service
node_mainjava -->|"seeds fleet"| node_service
node_mainjava -->|"starts server"| node_server
node_service -->|"finds and updates"| node_vehicle
node_service -->|"creates and closes"| node_booking
node_service -->|"creates customer"| node_customer
node_service -->|"propagates error"| node_unavailable
node_booking -->|"prices and serializes"| node_vehicle
node_booking -->|"serializes"| node_customer
node_vehicle -->|"base class"| node_car
node_vehicle -->|"base class"| node_bike
node_vehicle -->|"base class"| node_suv
node_vehicle -->|"throws on rent"| node_unavailable
node_server -->|"serves pages and JSON"| node_renter

click node_main "https://github.com/shreyasfegade/axle/blob/main/frontend/src/main.js"
click node_film "https://github.com/shreyasfegade/axle/blob/main/frontend/src/film.js"
click node_rulebook "https://github.com/shreyasfegade/axle/blob/main/frontend/src/rulebook.js"
click node_fleet "https://github.com/shreyasfegade/axle/blob/main/frontend/src/fleet.js"
click node_drawer "https://github.com/shreyasfegade/axle/blob/main/frontend/src/drawer.js"
click node_rentals "https://github.com/shreyasfegade/axle/blob/main/frontend/src/rentals.js"
click node_viewer "https://github.com/shreyasfegade/axle/blob/main/frontend/src/viewer.js"
click node_motion "https://github.com/shreyasfegade/axle/blob/main/frontend/src/motion.js"
click node_odometer "https://github.com/shreyasfegade/axle/blob/main/frontend/src/odometer.js"
click node_api "https://github.com/shreyasfegade/axle/blob/main/frontend/src/api.js"
click node_server "https://github.com/shreyasfegade/axle/blob/main/backend/src/Server.java"
click node_mainjava "https://github.com/shreyasfegade/axle/blob/main/backend/src/Main.java"
click node_service "https://github.com/shreyasfegade/axle/blob/main/backend/src/RentalService.java"
click node_vehicle "https://github.com/shreyasfegade/axle/blob/main/backend/src/Vehicle.java"
click node_car "https://github.com/shreyasfegade/axle/blob/main/backend/src/Car.java"
click node_bike "https://github.com/shreyasfegade/axle/blob/main/backend/src/Bike.java"
click node_suv "https://github.com/shreyasfegade/axle/blob/main/backend/src/SUV.java"
click node_booking "https://github.com/shreyasfegade/axle/blob/main/backend/src/Booking.java"
click node_customer "https://github.com/shreyasfegade/axle/blob/main/backend/src/Customer.java"
click node_unavailable "https://github.com/shreyasfegade/axle/blob/main/backend/src/VehicleNotAvailableException.java"
click node_demo "https://github.com/shreyasfegade/axle/blob/main/frontend/src/demo.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_main,node_film,node_rulebook,node_fleet,node_drawer,node_rentals,node_viewer,node_motion,node_odometer toneBlue
class node_api,node_server,node_mainjava toneAmber
class node_service,node_vehicle,node_car,node_bike,node_suv,node_booking,node_customer,node_unavailable toneMint
class node_demo toneRose
class node_renter toneIndigo
```

## Components

### Rental Website

- [Website Startup](https://github.com/shreyasfegade/axle/blob/main/frontend/src/main.js): `frontend/src/main.js`
- [Opening Film](https://github.com/shreyasfegade/axle/blob/main/frontend/src/film.js): `frontend/src/film.js`
- [Pricing Rules](https://github.com/shreyasfegade/axle/blob/main/frontend/src/rulebook.js): `frontend/src/rulebook.js`
- [Fleet Browser](https://github.com/shreyasfegade/axle/blob/main/frontend/src/fleet.js): `frontend/src/fleet.js`
- [Booking Drawer](https://github.com/shreyasfegade/axle/blob/main/frontend/src/drawer.js): `frontend/src/drawer.js`
- [My Rentals](https://github.com/shreyasfegade/axle/blob/main/frontend/src/rentals.js): `frontend/src/rentals.js`
- [3D Viewer](https://github.com/shreyasfegade/axle/blob/main/frontend/src/viewer.js): `frontend/src/viewer.js`
- [Motion Layer](https://github.com/shreyasfegade/axle/blob/main/frontend/src/motion.js): `frontend/src/motion.js`
- [Price Display](https://github.com/shreyasfegade/axle/blob/main/frontend/src/odometer.js): `frontend/src/odometer.js`

### HTTP Interface

- [API Client](https://github.com/shreyasfegade/axle/blob/main/frontend/src/api.js): `frontend/src/api.js`
- [HTTP Server](https://github.com/shreyasfegade/axle/blob/main/backend/src/Server.java): `backend/src/Server.java`
- [Server Startup](https://github.com/shreyasfegade/axle/blob/main/backend/src/Main.java): `backend/src/Main.java`

### Rental Domain

- [Rental Service](https://github.com/shreyasfegade/axle/blob/main/backend/src/RentalService.java): `backend/src/RentalService.java`
- [Vehicle State](https://github.com/shreyasfegade/axle/blob/main/backend/src/Vehicle.java): `backend/src/Vehicle.java`
- [Car Pricing](https://github.com/shreyasfegade/axle/blob/main/backend/src/Car.java): `backend/src/Car.java`
- [Bike Pricing](https://github.com/shreyasfegade/axle/blob/main/backend/src/Bike.java): `backend/src/Bike.java`
- [SUV Pricing](https://github.com/shreyasfegade/axle/blob/main/backend/src/SUV.java): `backend/src/SUV.java`
- [Booking Record](https://github.com/shreyasfegade/axle/blob/main/backend/src/Booking.java): `backend/src/Booking.java`
- [Customer Details](https://github.com/shreyasfegade/axle/blob/main/backend/src/Customer.java): `backend/src/Customer.java`
- [Availability Error](https://github.com/shreyasfegade/axle/blob/main/backend/src/VehicleNotAvailableException.java): `backend/src/VehicleNotAvailableException.java`

### Browser Demo

- [Demo API](https://github.com/shreyasfegade/axle/blob/main/frontend/src/demo.js): `frontend/src/demo.js`

### Other components

- **Renter**

## Connections

- Renter → Website Startup: uses (evidence: `README.md`)
- Website Startup → Opening Film: initializes (evidence: `frontend/src/main.js`)
- Website Startup → Pricing Rules: initializes (evidence: `frontend/src/main.js`)
- Website Startup → Fleet Browser: initializes (evidence: `frontend/src/main.js`)
- Website Startup → Booking Drawer: initializes (evidence: `frontend/src/main.js`)
- Website Startup → My Rentals: initializes (evidence: `frontend/src/main.js`)
- Website Startup → Motion Layer: imports (evidence: `frontend/src/main.js`)
- Booking Drawer → API Client: requests quotes (evidence: `frontend/src/drawer.js`)
- Booking Drawer → Fleet Browser: updates errors (evidence: `frontend/src/drawer.js`)
- Booking Drawer → Price Display: updates quote (evidence: `frontend/src/drawer.js`)
- Booking Drawer → 3D Viewer: opens model (evidence: `frontend/src/drawer.js`)
- Fleet Browser → API Client: loads fleet (evidence: `frontend/src/fleet.js`)
- Fleet Browser → Booking Drawer: opens booking (evidence: `frontend/src/fleet.js`)
- My Rentals → API Client: manages returns (evidence: `README.md`)
- Pricing Rules → API Client: gets prices (evidence: `README.md`)
- API Client → Demo API: selects demo (evidence: `frontend/src/api.js`)
- API Client → HTTP Server: sends API requests (evidence: `README.md`)
- HTTP Server → Rental Service: dispatches operations (evidence: `backend/src/Server.java`)
- Server Startup → Rental Service: seeds fleet (evidence: `backend/src/Main.java`)
- Server Startup → HTTP Server: starts server (evidence: `backend/src/Main.java`)
- Rental Service → Vehicle State: finds and updates (evidence: `backend/src/RentalService.java`)
- Rental Service → Booking Record: creates and closes (evidence: `backend/src/RentalService.java`)
- Rental Service → Customer Details: creates customer (evidence: `backend/src/RentalService.java`)
- Rental Service → Availability Error: propagates error (evidence: `backend/src/RentalService.java`)
- Booking Record → Vehicle State: prices and serializes (evidence: `backend/src/Booking.java`)
- Booking Record → Customer Details: serializes (evidence: `backend/src/Booking.java`)
- Vehicle State → Car Pricing: base class (evidence: `README.md`)
- Vehicle State → Bike Pricing: base class (evidence: `README.md`)
- Vehicle State → SUV Pricing: base class (evidence: `README.md`)
- Vehicle State → Availability Error: throws on rent (evidence: `backend/src/Vehicle.java`)
- HTTP Server → Renter: serves pages and JSON (evidence: `README.md`)
