Space Travelers' Hub - a web application that facilitates booking rockets and join selected space missions

Overview

Space Travelers' Hub

This is a web application that facilitates booking rockets and join selected space missions. It is built for a company that offers both commercial and scientific space travel services. The application also works with real live data from the SpaceX API.

Project screenshot

screenshot

Additional description about the project and its features.

Live Demo

Space Travelers' Hub is now live! Click here

Built With

  • HTML
  • TAILWIND CSS
  • JAVASCRIPT
  • REACT
  • REDUX

Using it Locally

  • Clone the project from GitHub here
  • Run the following commands as listed in your terminal:
  • npm install
  • npm start

Run tests

  • npm test

How to Setup

You can simply clone or download this repository, and use your favorite browser or code editor to run this program.

  • To open the project after download, simply double click the index.html file

  • To open this project using vs code ( for this example) or your favorite code editor, you can follow the guide below:

    in your cmd or command line navigate to where this project is located, then;

cd space_travellers

thereafter run

code .

Authors

👤 Furkan Denizhan

👤 Mongare S.

🤝 Contributing

Contributions, issues, and feature requests are welcome!

Feel free to check the issues page.

Show your support

Give a ⭐️ if you like this project!

Acknowledgments

  • Special thanks to the SpaceX community for providing the API from which live data is fetched.
  • Microverse Team for facilitating project colaboration

📝 License

This project is MIT licensed.

Comments
  • Completed project

    Completed project

    Space Travelers' Hub project is done with all tasks.

    Config & basic setup

    • [X] Create React App.
    • [X] Install React Redux, Redux Logger and React Router.
    • [X] Download the free image for the app logo.
    • [X] Create routes and view components (Rockets, Missions, My Profile, Dragons [only if your team has 3 members]). Use <NavLink /> for the page navigation links and style active class to indicate which section/page user is currently on (underline active navigation link).
    • [X] Create directories for all Redux state slice files (rockets, missions, dragons [only if your team has 3 members]).

    Redux: Fetch data and update Redux store

    • [X] Upon first render fetch data from the SpaceX API endpoints:

      • Rockets: https://api.spacexdata.com/v3/rockets
      • Missions: https://api.spacexdata.com/v3/missions
      • Dragons: https://api.spacexdata.com/v3/dragons [only if your team has 3 members]
    • [X] Once the data are fetched, dispatch an action to store the selected data in Redux store:

      • Rockets:
        • id
        • rocket_name
        • description
        • flickr_images
      • Missions:
        • mission_id
        • mission_name
        • description
      • Dragons [only if your team has 3 members]:
        • id
        • name
        • type
        • flickr_images

      NOTE: Make sure you only dispatch those actions once and do not add data to store on every re-render (i.e. when changing views / using navigation).

      NOTE: Rockets is the default view, so you must fetch rockets data when the application starts. However, the missions data should only be fetched (once) when a user navigates to the Missions section.

    Render UI:lists

    • [X] Use useSelector() Redux Hook to select the state slices and render lists of rockets and missions in corresponding routes. i.e.:
    // get rockets data from the store
    const rockets = useSelector(state => state.rockets);
    
    • [X] You can style the whole application "by hand" or you could use React Bootstrap, a UI library that could speed up the process. This is a popular library and working with its components would be good practice.
    • [X] Render a list of rockets (as per design). For the image of a rocket use the first image in the array of flickr_images.
    • [X] Render a table with the missions' data (as per design).
    • [X] Render a list of dragons (as per design). For the image of a dragon use the first image in the array of flickr_images[only if your team has 3 members].

    Redux: Write actions and reducers for booking rockets/dragons and joining missions

    • [X] When a user clicks the "Reserve rocket" button or "Reserve dragon" button [only if your team has 3 members], action needs to be dispatched to update the store. You need to get the ID of the reserved rocket and update the state. Remember you mustn't mutate the state. Instead, you need to return a new state object with all rockets, but the selected rocket will have an extra key reserved with its value set to true. You could use a JS filter() or map() to set the value of the new state - i.e.:
    const newState = state.map(rocket => {
        if(rocket.id !== id) 
            return rocket;
        return { ...rocket, reserved: true };
    });
    
    • [X] Regardless of which method you choose, make sure you place all your logic in the reducer. In the React view file, you should only dispatch the action with the correct rocket ID as an argument.
    • [X] Create a reducer and action dispatcher for the "Join Mission" button. The logic here is practically the same as with rockets - [X] You need to pass the mission's ID to the corresponding action and update the missions' state with the selected mission having a new key/value - reserved: true.

    Redux: Write actions and reducers for canceling rockets/dragons and leaving missions

    • [X] Here you need to follow the same logic as with the "Reserve rocket"/"Reserve dragon" and "Join mission" - but you need to set the reserved key to false.
    • [X] Dispatch these actions upon click on the corresponding buttons.

    Render UI: conditional components rendering

    • [X] Rockets that have already been reserved should show a "Reserved" badge and "Cancel reservation" button instead of the default "Reserve rocket" (as per design) .
    • [X] Dragons that have already been reserved should show a "Reserved" badge and "Cancel reservation" button instead of the default "Reserve dragon" (as per design) [only if your team has 3 members].
    • [X] Missions that the user has joined already should show a badge "Active Member" instead of the default "NOT A MEMBER" and a button "Leave Mission" instead of the "Join Mission" button (as per design).
    • [X] Rockets/Dragons and Missions should use the React conditional rendering syntax:
    {rocket.reserved && ( 
        // render Cancel Rocket button
    )}
    

    Render UI: My Profile section

    • [X] Compose two/three column layout and list ONLY the rockets/dragons reserved and missions joined by the user (as per design):
      • Render a list of all joined missions (use filter()).
      • Render a list of all reserved rockets (use filter()).
      • Render a list of all reserved dragons (use filter()) [only if your team has 3 members]_.
    opened by nevisende 0
  • Display joined missions

    Display joined missions

    The branch display_joined_missions has the following new features to be merged into the development branch:

    • Add the display joined missions functionality.
    • Refactored the useEffect hook to avoid data fetching every time user navigates through the project.
    opened by Mosams 0
  • Mission subscription

    Mission subscription

    The branch mission_subscription has the following features to be merged into the development branch:

    • Add code for subscribing to mission membership.
    • Add code to leave the mission.
    • Add code to iterated between the badges of the respective conditional components.
    • Add two reducers to implement the join and leave functionality.
    opened by Mosams 0
  • Fetch and display mission data

    Fetch and display mission data

    The branch fetch_missions has the following features to be merged into the development branch:

    • redux-thunk added into the system.
    • Async function to fetch data from the spaceX API.
    • Mission and mission list components responsible for displaying
    • Use of react hooks such as useDispatch, useSelector and useEffect.
    opened by Mosams 0
  • Booking and Filter Functionality

    Booking and Filter Functionality

    Developed booking and filter functions and given styles to Header, Rocket, and My profile sections.

    • [X] When a user clicks the "Reserve rocket" button, action needs to be dispatched to update the store. You need to get the ID of the reserved rocket and update the state. Remember you mustn't mutate the state. Instead, you need to return a new state object with all rockets, but the selected rocket will have an extra key reserved with its value set to true.
    • [X] Regardless of which method you choose, make sure you place all your logic in the reducer. In the React view file, you should only dispatch the action with the correct rocket ID as an argument.
    • [X] Follow the same logic as with the "Reserve rocket" - but you need to set the reserved key to false.
    • [X] Dispatch these actions upon clicking on the corresponding buttons.
    • [X] Rockets that have already been reserved should show a "Reserved" badge and "Cancel reservation" button instead of the default "Reserve rocket" (as per design)
    • [X] Use the React conditional rendering syntax:
      • {rocket.reserved && ( 
        // render Cancel Rocket button
        )}
        
    • [X] Render a list of all reserved rockets (use filter()) on the "My profile" page.
    enhancement 
    opened by nevisende 0
  • Fetch data

    Fetch data

    Fetched rockets data:

    • [X] Fetch data from the Rockets endpoint (https://api.spacexdata.com/v3/rockets) when the application starts (as Rockets is the default view).
    • [X] Once the data are fetched, dispatch an action to store the selected data in Redux store:
      • id
      • name
      • type
      • flickr_images
    • [X] Make sure you only dispatch those actions once and do not add data to store on every re-render (i.e. when changing views / using navigation).
    enhancement 
    opened by nevisende 0
  • Add profile structure and missions structure links

    Add profile structure and missions structure links

    The branch add profile has the following new features to be merged into the development branch:

    • Added basic structure to the profile page.
    • Added basic structure to the missions page.
    • Added navigation link to both sites.
    opened by Mosams 0
  • feat: Add the header nav with logo

    feat: Add the header nav with logo

    Created website header with empty nav

    • [x] Download the free image for the app logo.
    • [X] Create empty navigation (this will be filled in in separate tasks).
    enhancement 
    opened by nevisende 0
  • Project setup

    Project setup

    The branch Project setup has the following features to be merged into the development branch:

    • Create a new react app using CRA
    • Add redux-thunk, react-redux, react-router, redux-logger.
    • Remove all the boilerplate from the app
    • Create redux file structure and add linters to app
    opened by Mosams 0
  • [1pt] Create empty My profile - Setup (group task)

    [1pt] Create empty My profile - Setup (group task)

    • Create a route and a view component. Use <NavLink /> for the page navigation links and style active class to indicate which section/page the user is currently on (underline active navigation link).
    • This view should be empty - you will add content in separate tasks.
    opened by Mosams 0
  • [1pt] Create basic structure for Rockets - Setup

    [1pt] Create basic structure for Rockets - Setup

    • Create a route and a view component. Use <NavLink /> for the page navigation links and style active class to indicate which section/page the user is currently on (underline active navigation link).
    • Create a directory for all Redux state slice files.
    enhancement 
    opened by Mosams 0
Owner
Mong'are
Full-Stack Developer. Currently learning web development in Microverse focusing on JavaScript, Ruby, Rails, React, Redux. UX | UI design enthusiast
Mong'are
"Space-Travelers-Hub" is a website that allows users to book rockets and join selected space missions by using data from the SpaceX API.

Space-Travelers-Hub This project was bootstrapped with Create React App. Description "Space-Travelers-Hub" is a website that allows users to book rock

Tresor Sawasawa 4 Mar 13, 2022
A Web application that showcases Rockets and Missions from the SpaceX API, you can reserve Rockets and join Missions to your profile.

Space Travelers' Hub Project that showcases Rockets and missions from the SpaceX API, the user can reserve Rockets and join Missions, and save them in

David Vergaray 9 Apr 17, 2022
A web application for a company that provides commercial and scientific space travel services. The application will allow users to book rockets and join selected space missions.

Space Travelers A web application for a company that provides commercial and scientific space travel services. The application will allow users to boo

Hector Torres 2 Apr 6, 2022
This web application provides commercial and scientific space travel services. The application allows users to book rockets and join selected space missions.

space-hub About Project "Space Traveler's Hub" is A web application that provides commercial and scientific space travelling services, We are working

Nicholas Emmanuel 7 Nov 2, 2022
This a web application for a company that provides commercial and scientific space travel services. The application will allow users to book rockets, dragons and join selected space missions.

Space Travelers' Hub In this project, we have worked with the real live data from the SpaceX API. Our task was to build a web application for a compan

Apuabi Titilope 4 Oct 31, 2022
This web application provides commercial and scientific space travel services. The application allows users to book rockets and join selected space missions.

Space Traveler's Hub This web application provides commercial and scientific space travel services. The application allows users to book rockets and j

Michael Mesfin 6 Oct 4, 2022
In this project we built a web application that consumes an SpaceX API. It provides commercial and scientific space travel services that allows users to book rockets and join selected space missions.

Space Travelers' Hub In this project we built a web application that consumes an SpaceX API. It provides commercial and scientific space travel servic

Diego Yon 7 Sep 30, 2022
"Space Travelers' Hub" This project will lay foundations for your understanding the new features for Redux, using slice reducer and API requires with createAsyncThunk

Space Travelers' Hub Space Travelers' Hub React - Redux "Space Travelers' Hub" This project will lay foundations for your understand new features for

Hendrid Gonzalez 5 Mar 6, 2022
This application allows you to book missions and rockets with Elon Musk's company, SpaceX

Space Traveler's Hub This is an application built to book missions and rockets from SpaceX You can both join and leave missions, reserve and cancel re

Santiago Velosa 4 Jun 13, 2022
Welcome to Space Traveler's HUB, this web app allows the user to take a fictional tour across the space.

Welcome to Space Traveler's HUB, this web app allows the user to take a fictional tour across the space. The user can choose a rocket from our catalog interface, and reserve it. Also, the user can see recent special missions and join them. Finally, the user will be able to keep track of all your rockets and mission they are subscribed to. Build with React, Redux, React-router, and Railwindcss.

Mihreteab Misganaw 3 Jan 27, 2022
Provides a KafkaJS-compatible handler for processing messages that facilitates publishing to delayed-retry or dead-letter topics

kafkajs-async-retry This module handles retries and dead-lettering for messages from a Kafka topic without blocking the processing of subsequent messa

Shutterstock 5 Dec 5, 2022
Adjust the appearance and content of the booking pages to your brand and services.

Timerise open source booking page We are pleased to provide our booking page in open-source. We hope it will be useful in your use case. It can be emb

Timerise 14 Dec 12, 2022
Elizabeth Oyinlade Ojesanmi 10 Sep 14, 2022
Hashmat Noorani 4 Mar 21, 2023
A hub for web developers that offers a variety of tools to help with any developing needs.

WebDevHub - A place for developers WebDevHub is designed to be one central place for developers, that offers a variety of tools to help with any devel

Thomas Hamilton-Smith 87 Dec 11, 2022
A free and open-source Roblox script hub

?? Orca A free and open-source Roblox script hub ?? Introduction Orca is a general-purpose Roblox script hub designed to make convenient tasks easy an

null 44 Dec 27, 2022
An application where a user can search a location by name and specify a genre of music. Based on the parameters entered, a list of radio stations generate based on genre selected in that area.

Signs of the Times Description An application that allows for the user to enter a date and see the horoscope for that day, and famous people born on t

null 3 Nov 3, 2022