The SpaceXplorer app is an app that displays SpaceX mission launches using the SpaceX GraphQL API. The application was developed using React Native and Expo, a set of tools and services built around React Native and native platforms that helps the development, build and deploy of multiplatform projects and quickly iterate on iOS, Android, and web apps from the same codebase.
Flow (Figma)
A simple welcome screen.
Displays latest launches data chronologically in a user-friendly manner.
- List pagination using infinite scroll. (Bonus)
- Minor modifications to the request query to provide performance improvements (added launch id) and infinite scroll (query variables). (Bonus)
- Preview of the number of images and rocket name (Bonus)
- Visual Feedbacks
- List skeleton loading (Bonus)
- List empty state (Bonus)
Displays launch details including images and the link to the launch article. The launch images can be be toggled as a favorite. You can access the article by tapping the article description item or share the link to the article by tapping the share option in the upper right corner of the screen.
- Share launch article (Bonus)
- Image modal (Bonus)
Link to project visualization in Figma
git clone https://github.com/ozielalves/spacexplorer
cd spacexplorer
Instructions for setting up your development workstation and phone.
Mac OSX
:
npm install -g yarn
- Xcode
Xcode
command line tools
xcode-select --install
CRNA
's development environment uses a client app called Expo Client
for live-reloading in development. Its pretty magical.
Go to the App Store on your iOS or Andriod device, and install the Expo Client app (ios, andriod).
Run the project on your workstation and preview app on your phone or in simulator.
This will create a node_modules
folder in your application's root directory and a lock file.
yarn install
If you are running the project on your iOS or Android device, both the device and your workstation must be on the same network! If you are on Windows using WSL, use Tunnel connection option.
expo start
To view the app on your phone:
1. Open Expo Client on phone
2. Scan QR code presented in terminal
3. Enjoy launches
Alternatively, you can run the app in a simulator on your workstation:
IOS
:
expo start --ios
Android
:
expo start --android
All packages used in these project can be found in the package.json file.
The inter
and rajdhani
fonts from the expo-google-fonts
package were used in the project.
The react-navigation
package is responsible for the app's stack
navigation.
The expo-linear-gradient
package was used to render some beautiful linear gradients within the application.
The react-native-iphone-x-helper
package was imported and used to ensure that iPhone X and onwards users can correctly view all screen elements.
react-native-svg
and react-native-svg-transformer
were necessary packages for using SVG elements.
├── src
│ ├── assets
│ │ ├── camera.svg
│ │ ├── empty-avatar.png
│ │ ├── illustration.png
│ │ ├── launch-rocket.svg
│ │ └── spaceship.svg
│ ├── components
│ │ ├── Avatar
│ │ ├── Background
│ │ ├── ButtonIcon
│ │ ├── DetailItem
│ │ ├── GuildIcon
│ │ ├── Header
│ │ ├── ImageModal
│ │ ├── ImageSlider
│ │ ├── ListDivider
│ │ ├── ListHeader
│ │ ├── ListItem
│ │ ├── ListSkeleton
│ │ ├── Missions
│ │ ├── MissionsEmptyState
│ │ ├── MissionsErrorState
│ │ ├── Profile
│ │ └── Skeleton
│ ├── global
│ │ └── styles
│ │ └── theme.ts
│ ├── hooks
│ │ └── useMissions
│ │ ├── constants.ts
│ │ ├── index.tsx
│ │ └── queries.ts
│ ├── models
│ │ └── mission.ts
│ ├── routes
│ ├── screens
│ │ ├── Home
│ │ ├── Intro
│ │ └── LaunchDetails
│ ├── services
│ │ ├── cache.ts
│ │ └── client.ts
│ ├── @types
│ │ ├── png.d.ts
│ │ └── svg.d.ts
│ └── utils
│ └── getFormatedDate.ts
├── .gitignore
├── app.json
├── App.tsx
├── babel.config.js
├── metro.config.js
├── package.json
├── README.md
├── tsconfig.json
└── yarn.lock
PR's welcome!