Test Instructions:

  1. You need an Amazon account. You can create one here for free.
  2. Enable the skill by visiting https://www.amazon.com/dp/B08J1XNKZH/ . When you enable the skill, please grant the location and email permissions for best experience.
  3. You can now try the skill on any of the following -
    a) Visual Alexa devices like Echo Show, Fire TV (recommended)
    b) Headless Alexa devices like Echo Dot
    c) Alexa mobile app on either Android of iOS
    d) Open source Alexa simulators like echosim.io (may not work on some browsers)

Key Test Cases
1. Alexa, open refugee restrooms and search for restrooms near me (try this on a mobile device)
2. Alexa, open refugee restrooms and help me find gender neutral and toddler friendly restrooms by address
3. Alexa, open refugee restrooms and search for accessible restrooms by zip code
4. Alexa, open refugee restrooms and search for ADA compatible restrooms at 98100 (an invalid zip code test case, skill will exit)
5. Alexa, open refugee restrooms and search for unisex restrooms at 24th Avenue, Seattle, Washington (unsupported address. skill will ask the user to provide a different address)
6. try the skill with email and location permissions enabled and disabled


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 powered by Azure that seeks to provide safe restroom access for transgender, intersex, and gender nonconforming individuals. The skill also supports users looking for accessible restrooms and parents looking for restrooms with changing tables.

The skill's primary goal is to make traveling equitable for gender non-conforming users by making it easy for them to find safe restrooms.

For users who are currently traveling- The skill supports restroom search by proximity to their current location. We use their phone's location to search for restrooms near by. If the user hasn't consented to use their geo location, we request the user to grant location permissions or nudge them to search by zip code instead. Once a restroom is found, we also offer to launch Google Maps or Apple Maps on their phone with directions to the restroom preloaded.

For users who are planning a future trip- The skill supports restroom search by full address or zip code.
A bug in Alexa prevents us from supporting numbered streets like 24th Ave, 1st street etc. I'm working with an Amazon solution architect to fix the bug and in the meantime we implemented an experience to let the user provide an alternate street address without numbered streets. For ex, 601 Union Street.

The search criteria that we currently support are unisex restrooms (for gender non-conforming users), accessible restrooms (for differently abled customers) and parent friendly restrooms (for parents traveling with a kid who needs diaper changes).

User's get the results delivered through multiple means -

  1. Through voice (the top result)
  2. On their Alexa devices with screens (the top result)
  3. Users also get an email with clickable Google Maps links to the top 10 restrooms, sorted by distance.
  4. 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

Azure Functions The skill completely and exclusively runs on Azure Functions. Using Azure Functions made it very easy to build the skills because -

  1. I don't have to worry about determining the right number of servers to secure.
  2. I don't have to keep the servers updated.
  3. I didn't have to invest in SSL certificates which Alexa requires. Azure Functions comes with SSL end points for free.
  4. Azure Functions is beautifully integrated with VS Code which made development very easy. I could test the function locally without having to deploy to Functions each time I make a change.

Azure SendGrid As I built the skill, I realized that just searching for restrooms and giving a voice response isn't really sufficient. In most cases, people don't need the restroom right away and are just planning ahead. It is also very important that they have a clickable navigation link (like Google Maps) which is not possible through voice or Alexa companion app.

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 prohibitive 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 Azure SendGrid to implement this. It was my first time using SendGrid and I was pleasantly surprised how easy it is to send templated and personalized HTML emails at scale. I could setup SendGrid and get it all working in under 2 hours.

Accomplishments that I'm proud of

Azure Development This is the first time I developed on Azure and I'm proud that I got a skill up and running in a matter of weeks. Azure Functions and SendGrid interfaces were intuitive and documentation was thorough which made my life easier.

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: