In an ideal world, every individual could use the restroom that aligns with the gender they identify with. We do not live an ideal world though and one of the biggest battlefields upon which the fight for transgender rights is taking place daily are restrooms (especially when they are traveling to a new place and don't know where to find a safe restroom). Despite legislative victories in recent years regarding restroom usage, many transgender individuals still face both verbal and physical harassment simply for using the restroom of their choice. Nobody should have to face that - and that is why I created the 'Refugee Restrooms' skill.

What it does

Refuge Restrooms is an Alexa skill that seeks to provide safe restroom access for transgender, intersex, and gender nonconforming individuals. The skill also supports users looking for accessible restrooms and restrooms with changing tables.

User's can search by -

  1. Proximity (we use their geolocation if available or registered address)
  2. Street Address (eg. restrooms near 2121 Roy Street, Houston)
  3. Zip Code (eg. restrooms at 77840)

Restroom search results are delivered through multiple channels -

  1. Through voice (the top result)
  2. On their echo devices with screens (the top result, uses APL)
  3. In their Alexa companion app (up to 5 results)
  4. Users also get an email with clickable Google Maps links to the top 10 restrooms, sorted by distance.
  5. Most importantly, users on mobile devices also get an option to launch either Google Maps or Apple Maps with directions to the top restroom loaded and ready to go.

How I built it

Architecture Diagram

Refugee Restrooms Architecture Diagram

APL / APL-A I used APL and APL-A extensively in the skill. There are different APL documents at every stage of the skill providing relevant information and hints to the user.

I'm quite happy with the final search results page. APL enabled me to make it immersive with colorful icons and pack a lot of information that is not possible to be delivered through voice alone.

I also made the skill interactive by providing buttons to punch out to Google Maps and to navigate through the list of restroom results.

AWS Simple Email Service As I built the skill, I realized that just searching for restrooms and giving a voice response isn't really sufficient. It is very useful that they have a clickable navigation link (like Google Maps).

So, I decided to enhance the experience by sending an email to the users with the search results (only if the user gave permissions to use their email). The email lets us provide rich information which is not possible in a voice interface. The email contains up to 10 results and each result has directions, notes, ratings, Google Maps links, the features of the restroom etc.

I used AWS SES to implement this. It was my first time using SES and I was pleasantly surprised how easy it is to send templated and personalized HTML emails.

Alexa for Apps 'Alexa for Apps' is a preview technology by Alexa that is not yet generally available. It lets developers launch 3P applications on a mobile device from an Alexa skill. I was convinced that 'Refugee Restrooms' is a great use case for 'Alexa for Apps' where we can launch Google Maps or Apple Maps with directions to the top restroom result.

Thanks for Alexa for Apps team which was very responsive and helpful to first approve my skill and secondly for their technical help as I tried to get it working with the skill.

Challenges I ran into

  1. Getting a hang of all the concepts of APL / APL-A took some time. The cook book code samples and the office hours helped a lot.

  2. I habitually rely a lot on ASK CLI based replay-testing while developing skills. However, APL related portions don't really yield well to replay based testing. So, I had to double down on unit testing to make sure I keep my development turn around time short instead of having to deploy the skill every time I make a minor change. End of the day, I ended up with as much test code as source code giving me a lot of confidence as I make changes to the skill.

  3. Figuring out the right technology to send emails to the customers was challenging. Once I settled on AWS SES, it was quite easy.

  4. In this skill, I also decided to try slots with multiple values feature recently introduced by Alexa. It made my skill model significantly simpler.

  5. Figuring out how to launch Google Maps and Apple Maps on Android and iOS devices was a challenge. It was a technical challenge and also a UX challenge because I haven't designed a skill that launches other applications before.

Accomplishments that I'm proud of

Incorporating APL Incorporating APL in Alexa Conversations responses was great. It dramatically enhanced the Alexa Conversations experience on Echo Show devices and FireTVs. I'm especially proud of the animations and 'UserEvents' incorporated into the skill.

Unit and Integration Testing At the onset, I decided to invest a lot in testing my code. I wrote as much test code as source code and I can confidently say every branch has an integration test. I'm very proud of this accomplishment and it helped me iterate very quickly with my code and make changes confidently.

What's next for Refugee Restrooms

  1. The Refugee Restrooms database backing this skill is international. I need to expand the skill to other locales. Arguably, safe restroom access is even more vital outside the United States.

  2. The Refugee Restrooms database has attributes like rating, recent usages etc. Adding the ability to filter by these attributes will let the users make an informed choice while choosing their restroom. This is an area where Alexa Conversations really shines because I can add more search criteria without having to handle everything myself in the skill code.

  3. The skill is currently one-way. There is no way for users to provide feedback. User feedback is vital for the crowd sourced refugee restrooms database. I need to extend the skill to make it possible for users to provide feedback.

  4. Currently, I send emails to customers with search results. Users on the go would probably prefer an SMS. I plan to add support for that.

Built With

Share this project: