Rkomi98 / VenTour

This is the official repository of the Hypermedia Web Application project, course followed in Politecnico di Milano during the Academic year 2022/23.
https://rkomi98.github.io/VenTour/
GNU General Public License v3.0
0 stars 2 forks source link
venture-capital vue3 vuejs

VenTour website

This is the official repository of the Hypermedia Web Application project, course followed in Politecnico di Milano during the Academic year 2022/23

This website has been designed for a Venture Capital Company. Attached you can find the Design document, the documentation, and the implementation code (and usability inspection?) of the website.

The authors are:

Mirko Calcaterra
Emma Lodetti
Nikolina Zallemi

Project Description

In this repository you can find the design and the implementation of a website of a possible Venture Capital Company. As a VC, its goal is to show the areas of interest and the companies in which the people of the VC invest.

The requirements contain some constraints about the relationships of the main entities of the website. The project is divided into four main parts: Design, Backend, Frontend and Usability test.

Requirements

Before starting you have to download or fork the project on your PC and follow the installation of NodeJS. Once done, you have to run in both Backend and Frontend folders:

npm install

When everything is ready, use in the backend folder to ensure that everything is ok there:

node index.js

Therefore go in the frontend folder and run the project:

npm run dev

Architecture:

In this section we talk about the high-level structure and organization of the hypermedia application. It describes the major components and their relationships, providing an understanding of how different sections of the system work together to achieve the specific functionality.

  1. System Components: The repository is split into two main parts: Backend and Frontend. We will better focus on the specific sections. In Backend, you can find the relational database and the package needed to run the application (see the section \ref{sec: Backend} for more information). In the folder 'Frontend', there is everything that is due to the design and implementation of the website: it means we put all the HTML/CSS code used to see the pages together with the necessary javascript scripts needed to run the website. Together with the pages of the website, there is also a folder "components" with all the VUE components used in one or more pages of the website.
  2. Component Interaction: Backend and frontend communicate one each other thanks to JavaScript functions, like:

const { data: WhatYouWantToRetrieve } = await useFetch(useRuntimeConfig().public.serverURL + '/WhatYouWantToRetrieveFolder')

Remember to run the command in the terminal in Backend folder

node index.js

and in Frontend folder with the command:

npm run dev

  1. Data Flow: All Data is stored in the file dbInit.js and it is static. It means that it is not updated externally by the user, but can be updated only by the developer adding new fields or modyfying the one already existing in the dbInit.js file and in index.js file
  2. Scalability and Performance: The website is optimized for both Mobile and Desktop. We simplified some features in the mobile version of the code in order to make the application faster and more usable.
  3. Deployment Considerations: All the code needed to run the application is contained in this repository and the host of the website online used to run this application is github pages.
  4. Technologies Used: The website has been developed thanks to the VUE.js framework together with NodeJS and it has been published online using Github pages.
  5. Hosting service: We decided to use github pages because we designed a static website and we don't need to update the database when the user needs.
  6. Rendering mode: we don't need to update data frequently or when we prefer not to pre-render pages to mantain a good performance of the webiste. So we exluded the CSR method. We didn't have dynamic data in our design of the Database so we decided not to use neither SSR. It is the reason why at the end we used SSG. With static-site generation (SSG), the page fetches data once during build-time. You can see it running the node index.js in the Backend older. We decided to use static-generated pages because they are very fast and perform well because all the pages are built beforehand. We needed to maximize the performance on all the devices. In general we know that SSG is perfect for pages and it is exactly our case.

Design

Design in-the-large with C-IDM, and in the small with the Wireframes can be found, together with use case scenarios and database design, in the folder Design Document.

TODO TO BE ADDED

Backend

Backend is mainly made by 4 files, two javascript files and two are jjson files:

const corsOptions = { origin: "http://localhost:3000" // The link of your project when run locally }

Server

In access of the Databasem you need some parameters, in both companies and people you need:

The response can be:

Frontend

Frontend folder is split in many folders and many parts:

You can notice that we could make all the areas with a single page connected to the database (like [id].vue file in both folders people and companies). We decided to put in the database only data that can change in time, so people and companies. We think that areas will be immutable in the story of the company, or at least will not change as fast as the other two components mentioned above. For this reason we preferred to put the areas in static pages without a connection to the database.

Functionalities

The main components of the application are:

immagine

immagine

In the website you can find some functions that help the users finding information and achieving thei goals (i.e. apply for a new job position or ask Ventour to invest in their company) and some function built in order to make the website responsive for both mobile and desktop. The main functions we have developed are:

SEO

Brief description of the project explaining the chosen theme • List of Components implemented with description, props and emit (if used) Additionally, you can add descriptions (not mandatory) of: • Extra functionalities implemented (e.g., store, filters, etc...) • different approaches from what was discussed during lectures. • Approaches used to comply with accessibility and SEO guidelines.

Usability test?