Inspiration

We were inspired to make Away by the inconvenience of preparing for a flight, especially for someone new to flying. With the help of AI, we hope to assist passengers in the flight preparation stage of their journey. The goal of Away is to be a one stop shop for all the utilities you need before, during, and after.

What it does

The currently implemented feature in Away is Bag Weight Estimation. Using a custom computer vision model, we are able to evaluate the items you are packing for the flight and estimate the weight for all the items. By doing this, we can warn users before their flight if they may be over the weight limit. This model also detects potentially dangerous objects and urges the user to leave them behind.

Here are other features we had planned to implement during this weekend, but weren't able to get around to.

  • Generative Trip Planner By using data provided by the American Airlines Flight Engine, we are able to determine nearby flights, and suggest locations to travel to based on filters and preferences set by the user. This allows the user to explore places they may have have never considered booking before.
  • Baggage Claim Protection We developed this feature to help users better track and manage their baggage during their flights. A user is able to register their checked luggage to their Away account. If another user tries to claim the baggage, the user will be notified, and a vision-based system can be installed at the airport to prevent baggage from being stolen.

How we built it

We wrote our backend in Node.js using Express.js. We used MongoDB as our database, Joi for data validation, and Passport.js to issue JWTs for user authentication. We also tried defining OpenAPI schemas for the first time, which we combined with feTS, which is a tool that generates API clients from your backend code and API specification, enabling type-safe API calls from our frontend without extra work or needing to explicitly duplicate types on all our endpoints.

We also wrote a separate inference server for our computer vision model which detected items to be packed, which was written in Python using Flask.

For our frontend, we created a cross-platform app (iOS, Android, Web) written in TypeScript using Expo and React Native, which serves as the main user interface, and allows us to upload images captured in the camera roll or capture new images in with the app. We used Tamagui as our styling solution which supports targeting React Native on Web as well as mobile devices with the exact same styles. On mobile, Tamagui still uses native OS UI elements, not webviews, and on the browser, Tamagui outputs regular HTML without any extra work on our end. We planned to use ViroReact, which is a React Native library for delivering AR/VR experiences, to be able to provide a live view of the items to be packed and estimate their weights in the app, which wouldn't have been possible if we used a web-based solution.

For most of us, this was our first time using React Native, and all our first time trying React Native for web and Tamagui.

Challenges we ran into

Implementing a solid auth system and end-to-end type safety, and other backend meta tasks were big focuses of ours but ended up taking a lot more time than intended. While we learned a lot, in the future we intend to take more advantage of boilerplate templates and frameworks which handle some of these tasks, enabling us to ship faster while still being able to build on the strong foundation that these tools provide.

Accomplishments that we're proud of

We built an app with some of the capabilities we'd planned, using a lot of tools we hadn't used before.

What we learned

We learned a lot about API design and structure. We've used tools like Flask and Express before, but never focused heavily on things like RBAC, persistent sessions with JWTs, data validation, and more.

Share this project:

Updates