This web application was created as a final project in The Software University's ASP.NET Advanced Course 2024. It is a type of multiservice monolith. The application itself represents a load board web application that users ( Brokerage Firms and Truck Load Carriers ) can use to connect and do business. Users can be two types Brokers and Dispatchers. Brokers can create loads, post the them on the loadboard and on the other side a Dispatcher can book the load and assign a Driver and a Truck on it. After successful completion of the load the Dispatchers mark the load as delivered. Brokes can also unpost loads that are posted ( one or multiple ). They can cancel loads altogether ( essentially removing the load from their boards ) or cancel the Truck Load Carrier that is already assigned on the load. A Dispatcher can also cancel a load ( essentially returning the load to it's owner - the Broker that created it ).
The application has two main roles --> 🔵Administrator and 🔴User. Registering an account creates only Users ( Two types of users --> Dispatcher and Broker ). Administrators can either be directly seeded in the database or manually created by another Administrator using the User Management panel.
🔵 Administrators can manage users, manage loads, start a chat with all Users and other Administrators, view application statistics and pull pie chart reports.
🔴 Dispatchers can book posted loads on the Load Board, manage trucks in their fleet, manage drivers in their company, return booked loads back to the owner ( Broker ), message any broker that has a Posted Load.
🔴 Brokers can create a load, edit a load ( in all statuses except Cancelled ), post a load, cancel a load, cancel a carrier assigned to a load (as long as they are the owner of the load ), chat with Users and Administrators ( if they are contacted first ),
✅ Both Users and Administrators can view their own profiles, summary of their loads if Brokers and summary of the Booked or Delivered loads if Dispatchers and a summary of their Trucks and Drivers, they can edit the profile information, edit or remove their profile picture🌟 and change their password.
🌟 One difference here is that Administrators can use a .GIF image for their profile picture and Users cannot.
- HTML & CSS
- SCSS
- Bootstrap 5
- JavaScript
- jQuery
- AJAX
- Figma
- Scalable Vector Graphics
- BoxIcons & RemixIcons
- Simple Datatables
- Apex Charts
- Photoshop & AI Image Generators for any images
- C#
- .NET 8.0
- .NET Core
- ASP.NET with MVC pattern
- Microsoft SQL Server
- Entity Framework Core
- Html Sanitizer Library by Michael Ganss
- SignalR
- OpenCage Geocoding RESTful API ( 2,500 API requests/day for testing )
- OpenRouteService RESTful API ( Directions V2 - 2000 API requests/day free )
- Country State City RESTful API ( No limitations, but request responsibly! )
- Cloudinary (Cloud Image & Video Management Service)
- Mapbox Static Images RESTful API (50K requests/month) ⭐Additionally added⭐
- NUnit
- Moq
- MockQueryable
- Entity Framework Core InMemory
- Git / GitHub
- After successfully logging in a User would be redirected to the Profile Page
- The Profile page shows a card containing the User's full name, position and company and below it depending if User is a Dispatcher or Broker there would be counts for Drivers, Trucks, Booked and Delivered Loads ( Dispatchers ) and Created, Posted, Booked and Delivered Loads ( Broker )
- In the tabulated container to the right of the general info card there is a Profile Overview tab, Edit Profile Tab, Edit Picture tab and Change Password Tab
- Chat Page is available to Users and Administrators alike.
- Brokers cannot engage in conversation directly, they need to be contacted by a Dispatcher or an Administrator.
- Dispatchers can only contact Brokers through a redirect available to them when viewing a Posted load ( they can contact the broker of the load ).
- Administrators can contact both Dispatchers or Brokers using that redirect when viewing a load or go to the User Management Page and use the redirect there.
- Page consists of a simple form for adding new loads in the Broker's Created Loads
⭐ Create Load ---> Attempt to add a load to the database and to the Broker's loads, if information is valid.
- After a Broker opens the Load Board, he will be redirected to the Created Loads Tab, where he can view all the loads that he/she created.
- Search available right on the Board, that would filter the loads as the Broker types
- Sorting functionality available for each piece of information visualized ( for instance Broker can sort all loads by pickup state or price ascending or descending )
- Paginаtion also available right in the table, Broker can choose how many loads per page to show ( 5, 10, 15 ) or show all loads
- Clicking on the button on the right in the "Actions" section will take the Broker to the Load View:
⭐ Edit ---> This action would give the Broker access to edit the load information. Buttons "Save" and "Cancel" appear while load is being edited.
⭐ Post ---> This action would post the load, essentially changing it's status from Created to Available.
- After a Broker posts a load, he/she will be redirected to the Load Board's Posted Loads Tab.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- Clicking on the button on the right in the "Actions" section will take the Broker to the Load View:
⭐ Edit ---> This action would give the Broker access to edit the load information. Buttons "Save" and "Cancel" appear while load is being edited.
⭐ Unpost ---> This action would unpost the load, essentially changing it's status from Available back to Created.
⭐ Unpost All ---> This action would unpost all loads, that are currently in in status Available and revert them back to Created.
- Any loads that are booked by a Dispatcher, would be sent to the Booked Loads Tab.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- Clicking on the button on the right in the "Actions" section will take the Broker to the Load View:
- Additional details are available to the Broker for the Dispatcher if the load is Booked. When the Dispatcher that booked the load assign a driver, information for that driver would be visualized for the Broker in that same mini window as well.
⭐ Edit ---> This action would give the Broker access to edit the load information. Buttons "Save" and "Cancel" appear while load is being edited.
⭐ Cancel Carrier ---> This action would cancel the carrier on the load ( and truck if there is one assigned ) and return the load back to status Posted.
⭐ Details ---> This action toggles the info mini window on the left side containing info about the Dispatcher and Driver (if there is one assigned).
- After a Broker posts a load, any Dispather would be able to see it in his Posted Loads Tab on the Load Board Page.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- Clicking on the button on the right in the "Actions" section will take the Dispatcher to the Load View:
⭐ PM the Broker ---> This action will take the Dispatcher to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ Book this Load ---> This action will book the load, essentially changing it's status from Available to Booked. Dispatcher will now be able to see that load in the Booked Loads Tab on the Load Board Page.
- All the loads that a Dispatcher booked would be visible in the Booked Loads Tab on the Load Board Page.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- If there is a Truck and Driver assigned to the load already, the column "Status" would show "en route".
- Clicking on the button on the right in the "Actions" section will take the Dispatcher to the Load View:
⭐ PM the Broker ---> This action will take the Dispatcher to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ Select a Driver ---> This action will assign a Driver to the load. From the dropdown the Dispatcher will choose an active driver that is available for a load ( if a driver is not available he will not be shown in the dropdown ) and then save his/her choice.
⭐ Cancel Load ---> This action will return the load back to the broker ( changing the status of the load from Booked back to Posted ). If there is a Truck & Driver assigned to the load, they will be released, so they can be assigned to another load.
⭐ Mark as Delivered ---> This action will mark the load as Delivered, release the driver and from this point on the load will be visible only in the Delivered Loads Tab on the Load Board Page ( both for the Broker and Dispatcher ).
- The Trucks Page consists of a table with the current number of trucks in the Dispatcher's Fleet.
- If there is a Truck and Driver assigned to the load already, the column "Status" would show "en route".
⭐ Add Truck ---> This action will open a modal window and the Dispatcher would have to put the required information before he/she saves the new truck.
⭐ Edit ---> This action will open a modal window with the selected truck's information loaded in. Dispatcher can edit any property and save it.
⭐ Park ---> This action parks the truck at the yard. Truck cannot be parked if there is a driver in it and he is currently under a load (doing a load ).
⭐ Select a driver ---> This action will give an option from the dropdown menu for an active and available Driver for the Dispatcher to assign in the selected truck.
- The Drivers Page consists of a table with the current number of drivers in the Dispatcher's Fleet.
⭐ Add Driver ---> This action will open a modal window and the Dispatcher would have to put the required information before he/she saves the new driver.
⭐ Edit ---> This action will open a modal window with the selected driver's information loaded in. Dispatcher can edit any property and save it.
✨✨✨ If a Driver is Available the first icon in the "Available" column would be green, otherwise it will show a truck, meaning Driver is assigned in a Truck. In addition if he is in a Truck the "Actions" column will now show "ready for a load".
- Once an Administrator logs in, he/she is redirected to the Profile Page.
- The main difference between the Dispatcher and Broker Profile page is the card below the profile picture contains information about the total revenue, total number of users and total number of loads.
- The Overview, Edit Profile, Edit Picture and Change Password are also available.
- An Administrator can see all Created Loads for all Brokers.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
⭐ PM the Broker ---> This action will take the Administrator to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ Details ---> This action toggles the info mini window on the left side containing info about the Broker when the load is in status Created.
- An Administrator can see all Posted Loads for all Brokers, just like Dispatchers.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
⭐ PM the Broker ---> This action will take the Administrator to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ Details ---> This action toggles the info mini window on the left side containing info about the Broker when the load is in status Created.
- An Administrator can see all Booked Loads for all Brokers.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- Similar to the Broker and Dispatcher, if a Booked load has a Driver assigned already in the "Status" column it shows "en route".
- The details mini window will show the Broker information, Dispatcher information and if a Driver is assigned - the Driver information.
⭐ PM the Broker ---> This action will take the Administrator to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ PM the Dispatcher ---> This action will take the Administrator to the Chat Page and open a chat with the Dispatcher of the load he was viewing.
⭐ Details ---> This action toggles the info mini window on the left side containing info about the Broker when the load is in status Created.
- An Administrator can see all Delivered Loads for all Brokers and Dispatchers.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- Unline the Brokers and Dispatchers, the Administrator can view each Delivered Load and if need be do any adjustments to it ( edit it ).
- The details mini window will show the Broker information, Dispatcher information and the Driver information.
⭐ PM the Broker ---> This action will take the Administrator to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ PM the Dispatcher ---> This action will take the Administrator to the Chat Page and open a chat with the Dispatcher of the load he was viewing.
⭐ Details ---> This action toggles the info mini window on the left side containing info about the Broker when the load is in status Created.
- An Administrator can see all Cancelled Loads for all Brokers and Dispatchers.
- Search, Sorting and Paginаtion is available on every tab of the Load Board.
- Unlike the Brokers and Dispatchers, the Administrator can not only view each Cancelled Load , but also edit it .
- The details mini window will show the Broker information.
⭐ Restore Load ---> This action will allow the Administrator to move the load from status Cancelled to status Created, essentially returning it in the Created Loads tab of the Broker that owns it.
⭐ PM the Broker ---> This action will take the Administrator to the Chat Page and open a chat with the Broker of the load he was viewing.
⭐ Details ---> This action toggles the info mini window on the left side containing info about the Broker when the load is in status Created.
- Page contains information for each User and Administrator registered on the platform.
- Search and Paginаtion is available right in the table. Page size is currently set at 5 results/users per page.
⭐ Add User ---> This action will allow the Administrator to add new Users ( Brokers or Dispatchers ) directly.
⭐ Add Administrator ---> This action will allow the Administrator to add new Administrators directly.
⭐ Edit User---> This action opens the User or Administrator information in a modal window, letting the Administrator edit it.
⭐ Chat with User ---> Allows the Administrator to chat with any of the Users or Administrators on the platform.
⭐ Deactivate User ---> This action anonymizes the User or Administrator ( deleting all his sensitive informaton from the DB ) and locks the account so it can no longer be used.
- Page contains information for:
⭐List of all Companies and the number of accounts per each company that has an account on the platform
- Upon clicking on the total Total Users, Total Revenue, Total Loads, Total Drivers or Total Trucks it flips the card and shows a pie chart showing percentage-wise and counts.
- Pie charts can be downloaded as a report in a .SVG, .PNG or .CSV format.
I have hidden this ASCII art picture in one of the Views, see if you can find it 😏 ( .. no cheating ❗❗ )
- Added the Current load information in the Driver's Table in the ShowDrivers View for all Dispatchers
- Added the Total Miles for each driver in the Driver's Table in the ShowDriver View for all Dispatchers
- Added icons in the ChatWindow View to show users when a message is sent and when it is read ( one check when sent and two checks when it is read )
- Added an update for Dispatchers in the LoadDetails View that would now show the currently assigned driver to the load, if any ( in the same fashion as it shows the basic Dispatcher and Driver info for a Broker on a booked load ).
- Added an additional service - MapBox Service that would be visualizing the origin and destination on a static map directly in the Load Views.