Skip to content

Project for "Interação Humano-Computador", 2022/2023

License

Notifications You must be signed in to change notification settings

RGarrido03/TravelMate

Repository files navigation

TravelMate app

.github/workflows/deploy.yml

Project for "Interação Humano-Computador", 2022-2023 by Rúben Garrido, Diogo Falcão and Diana Miranda.

It supports several platforms, including:

  • Android
  • iOS
  • iPadOS
  • macOS (exclusive to Macs with Apple silicon)
  • visionOS (yes, even Apple Vision Pro runs this!)

Presentation slides (Canva)

✍ Design

This app tightly follows the app prototype we made in Figma, which you can check here.

It is inspired in both Material Design 3 and Fluent Design, and features design trends such as glassmorphism, in a fresh and modern UI.

The color palette is used as follows:

Color Name Usage
#E8F3F4 Lighter green Menu headers and action bars
#BDF4F1 Light green N/D
#70ECE4 Accent green Things that need to be noticed
#70D9D3 Accent green #2 N/D
#60BBB6 Dark green Strokes, icons, buttons & more
#EB8C6F Orange Negative actions, such as deleting something
#3B4949 Dark gray Some not-so-important text
#000000 Black Important text, headers' text
#FFFFFF White Misc

This app features dark mode, with automatic theme switching. However, dark mode's design is quite questionable, so it needs to be improved (spoiler: it will never be improved).

You may see some differences between iOS and Android (with iOS being the pretty boy). Even though we're using the same components on both OSes, some components are rendered differently on each OS, such as blur views. It's not our fault, blame React Native.

💻 Development

This is a React Native app created with Expo - a framework on top of React that renders native components. Instead of using JavaScript (Expo's default programming language), this project uses TypeScript for type checking and more.

Before making any code changes after cloning the repo, be sure to have installed the Current version of Node.js. Run npm install after cloning the repository, in order to install the project dependencies.

For iOS/iPadOS and Android, install the Expo Go app. Since this project is using a beta version of Expo, the beta version of Expo Go is required. Check Expo's documentation on how to install it.

However, for macOS and visionOS, a development build is required. Development builds also feature the app icon and name, so they can be a great option for a "more realistic" option. They can be built using Xcode (for Apple devices) or Android Studio, although EAS features server-side building.

By default, npm run start opens an interactive Expo server, where you can open the project in Expo Go. However, more options are available, and can be synthesized like this:

Command Description
npm run start Start the Expo server, to run the app on Expo Go
npm run startclear Start the Expo server, to run the app on Expo Go, with cleared cache
npm run startdev Start the Expo server, to run the app on the development build
npm run startdevclear Start the Expo server, to run the app on the development build, with cleared cache
npm run android Run the app on an Android phone or Android Studio emulator
npm run ios Run the app on an iPhone emulator

So, basically, you should run npm run start if you're working on Android or iOS/iPadOS using the Expo Go app, and npm run startdev on all other cases.

All logs will be displayed in the terminal window where you're running the server.

No web support - we're sorry or you're welcome.

🚀 Deployment

We are using EAS (Expo Application Services) to build and deploy the app.

The build is triggered automatically when a new commit is pushed to the main branch, and the new app build is deployed to the EAS servers.

Both Expo Go and the development build can fetch updates from the EAS. However, the development build needs to be updated manually every time there is an under-the-hood change (like installing a new package).

Android users can install the production build from here, but will face giant markers in the map. Apple builds require manual building using Xcode due to provisioning profiles and such.

📁 Project structure

android/
Android Studio project for building on Android.

assets/
Folder containing the icon, splash and more. The images/ folder contains the initial images used in the app.

app/
Project source files. Check the Expo Router documentation for more information on how navigation works.

components/
Reusable components, such as buttons, cards, etc.

data/
Since our app doesn't feature a backend, the content needs to be iterated over arrays. This folder contains the initial data, as well as some helper functions for the arrays.

ios/
Xcode project for building on Apple's operating systems (iOS, iPadOS, macOS, and visionOS).

app.config.js
App metadata.

babel.config.js
Configurations for Babel - the compiler for development and build -, that reference Expo presets. It may include configurations for other Babel plugins, later, if needed.

global.d.ts
TypeScript image module declaration file.

index.js
Entry point for the app. Since Expo Router is used, this file only imports it, so that pages in app/ get rendered.

package.json & package-lock.json
Configuration files containing dependencies and scripts.

tsconfig.json
Configurations for TypeScript's official compiler, used for type checking. Extends node_modules/expo/tsconfig.base.

📗 Useful documentation