Sam WinslowSam Winslow

Tunestack.fm

awsjavascriptui-ux

In January 2020, I founded Tunestack.fm, a social networking app for music lovers to share reviews of their favorite albums. We were later accepted into a startup accelerator at the NYU Entrepreneur Lab and grew our community to more than 200 users.

Mockup

I built and launched the beta version to TestFlight, and later onboarded 3 engineers. While the source code is private, here's a breakdown of the technology we used for the beta and initial launch:

Frontend

Backend

Lessons Learned

  • Winslow's Rule: The Apple app review process takes twice as long as you think, no matter how long you think.
  • In terms of syntax and concepts, React Native is only marginally more complex than React, but you have to deal with asynchronous loading actions more explicitly. The browser layer usually abstracts away a lot of this.
  • Redux is useful, but very opinionated and requires a lot of boilerplate. On the plus side, it will force you into an MVC structure and make it easier to debug async code.
  • Serverless functions are great! Never dealing with the OS of a remote machine is awesome. However, there are a few drawbacks:
    • serverless-offline does not perfectly replicate the remote environment. There is no great way to simulate the Cognito authorizer or other Amazon services, so it is often still necessary to set up a staging server.
    • AWS limits an API Gateway to 200 CloudFormation resources, and each endpoint can generate somewhere between 5-8 resources. So, if you have more than 24-39 endpoints, you will have to either split them into separate stacks and use some DNS records to have them map to the same remote URL, or use fewer, monolithic functions and a package like aws-serverless-express to disaggregate them.
    • Serverless helps you manage some, but not all, kinds of secret keys and resource permissions in AWS, and sometimes can even overwrite settings configured through the CLI or web interface.
  • Sequelize is a poorly maintained product and sometimes just acts as an obfuscation layer between your app and SQL database. It is also verbose and slow. Would not use it again, and would instead opt for GraphQL.
  • The Spotify API is a godsend, and genuinely a lot of fun to work with.