Luftcare is the name of a project I started with a team at the 2018 NASA Space Apps Hackathon.
Our initial intention was to create an app for asthma patients that provided them with better tools for monitoring and improving their health.
Since the Hackathon spanned over a single weekend, I was responsible for creating a PoC app using Nativescript Vue.
Thankfully, our team was able to deliver most of what we had planned, including a smart inhaler prototype and my app. Also, we were local winners and global nominees! 🥳
After the Hackathon, we decided to keep working until we had a real product. We reduced our scope and focused on shipping a simple app for doctors to create and evaluate medical questionnaires.
At this point I decided to scrap our Nativescript app and look for a better solution, since the only reason why I chose Nativescript during the event was because I had just 48 hours and no experience with mobile development but a solid Vue background 🤷🏽♂️
A lot of research later, I eventually arrived at our tech stack. I chose Flutter for our mobile app, a GraphQL API with TypeGraphQL and a Vue + TS web client. Below I explore each decision and my experience with all the tech.
For the API, I decided to go with a combination of Typescript, TypeORM, TypeGraphQL and Apollo Server (plus Docker for the Postgres DB image).
My experience was a mixed bag, here are some highlights:
Our web client was simple: a dashboard for doctors to create questionnaires and evaluate their responses. With that in mind, I decided to use Typescript, Vue 2 (Nuxt), Element UI, Tailwind CSS and Apollo Client with GraphQL Code Generator.
The experience here was overall more positive than in the API, here are some highlights:
The app was also very straightforward. It had a login page, a home page with a listing of available and answered questionnaires, and the questionnaire answer pages. Since it consumed a GraphQL API, I used Artemis, a Dart type generator from GraphQL schemas and queries, which made the experience a lot more enjoyable. Here are some of the highlights:
The API and Web Dashboard were deployed to a DigitalOcean droplet, and the Flutter App was published on app stores. The CI/CD was handled using Buddy.
The project was interrupted in 2020 due to health concerns over conducting research during the pandemic.
Still, it was fun while it lasted and a great learning opportunity for me. It was my first time doing a lot of things on my own. Like publishing a Flutter app, configuring a CI/CD workflow, and deploying an API/Web app publicly.
I gained a lot of experience and much of what I learned was useful later on.