Following shelter in place after the current pandemic, we found our in-person social interactions to be severely limited. Although a lot of current tools offer some kind of virtual conferencing functionality, often there is a lot of friction in getting in a call with our closest friends degrading the experience. In addition, current telecommunication solutions are often overloaded with features taking away from the core audio communication functionality.

What it does

Meet teahouse, a frictionless virtual audio lounge. Here, lounges are persistent, and the simple interface is built around the audio call itself. You can seamlessly transport from lounge to lounge with convenient and simple audio controls. teahouse enables you to be present with others virtually while allowing you to multitask, recreating the experience of hanging with friends, family, and coworkers in person.

Consider this, you are in a virtual class (Zoom University maybe) and have a question about something the professor just said. If you were in person, you could simply ask the person next to you, but now, you have to resort to sluggishly typing out your question to ask over chat. With teahouse, you can quickly hop on to a lounge without leaving the virtual class and quickly get your question answered by your classmates.

How we built it


We used the Flutter framework for the iOS and Android application. In addition, we used the Agora RTC Flutter SDK for the voice communications. For authentication, we used Firebase Authentication to allow Sign in with Google on the app. Also, all the requests to the REST API contain the user’s authentication token, to preserve both security and privacy. We also use Firebase Dynamic Links to allow users to click on a link to join a new room.


teahouse’s architecture is predominantly serverless. We used AWS Lambda and AWS DynamoDB as our backend with the REST API through the AWS API Gateway. The DB is used to store information about the user and their lounges.

Challenges we ran into

Keeping track of users on call

It was difficult to identify new users who joined a call they had not been in before. To resolve this, we created a new API to update the local call lists of all members of the call.

Lag from API on UI

We were noticing considerably high latency while retrieving data from the API. To solve this, we started caching some of the more static pieces of data and the performance improved considerably.

Accomplishments that we're proud of

We’re especially proud of the invite logic of teahouse. When you click a teahouse link, it loads either the app on your phone or the app store page if you don’t have the app. From our experience, link invites provide a frictionless way of joining rooms and allows for easy sharing. We were able to do this using Firebase Dynamic Links and local device logic. What we learned Integrating a Flutter App with a custom API deployed with AWS Lambda + API Gateway Implementing voice functionality in an app using Agora SDK Implementing room invite logic

What's next for teahouse

Adding spatial audio for directional audio support

Improving audio quality with additional signal processing

Share this project: