Goal

The goal with this Fitness Tracker side project is to connect stuck-at-home fitness fans as they work out starting with friends/family.

A secondary goal was for me to gain developer experience with the FitBit SDK and AWS Amplify using AppSync and writing GraphQL.

Outcome

This is still a work in progress as far as reaching the goal for connecting users.

As for the developer goal, I would not recommend using AWS Amplify for a large scale project. It tries to do too much and when you reach for features they are either buggy or you have to resort to writing raw CloudFormation which defeats the purpose of using a CLI.

That being said, when getting up and running quickly with AWS AppSync + DynamoDB it saves a ton of time. Combining this with create-react-app and the aws-amplify component module made starting this project off a piece of cake.

The FitBit SDK has been really easy to use and getting setup with the FitBit OS Simulator was fun. Limitations like not being able to install node modules or make HTTP requests directly from the watch app have been fun little hurdles.

Infrastructure

So far I am using the AWS Amplify “framework” to handle building out a GraphQL schema that generates CloudFormation templates.

The frontend is simply React bootstrapped with create-react-app.

Hosting is also made easy with the Amplify CLI publishing the code to an S3 bucket with a CloudFront CDN.

Authentication is also baked into Amplify so that in just a few commands we can deploy Auth using AWS Cognito and combine that with auth components from aws-amplify.

The final component to the project is the FitBit watch where the FitBit SDK and developer API makes integrating with watch sensors simple javascript code.

Unfortunately the watch itself cannot make HTTP requests and needs to instead communicate over a websocket-like API to send data to the companion running in the background on a phone.