Last week I was at TreeHacks 2019 in sunny Palo Alto, California ☀️. We worked hard over the weekend building an app called Citizen X, and won first place in two prize categories (“Best App for Civic Technology” and “Best Use of SoundHound API”)!
The Project
Citizen X uses a mixture of several interesting technologies to let you use your voice to engage with your local, state, and national representatives. Users can say things like “Who are my local representatives?” and “Tell me more about Keisha Lance Bottoms” (the Mayor of Atlanta). The app gives back lots of useful information about the representative and encourages you to engage with them on social platforms like Twitter (or even plain old email).
We thought the conversational aspect of Citizen X was pretty important, but we wanted to expand on it to be a social experience as well. Users can share the information they’ve found by sending a deep-link to somebody in their contacts. This link also carries the full context of the conversation, so the user on the other end can pick up right where their friend left off.
Underlying Technologies
We used the SoundHound Houndify SDK to build the app’s voice integration, and used a special API provided by Phone2Action to representative information. (One could cheekily say that the project was perfectly engineered to maximize prize-winning-potential, but whomst is counting?)
The Phone2Action API was the biggest inspiration for this project, since it gives us the representative data that makes the whole experience possible. We can give the API an address or a city, and it gives us back the local, state, and national representatives for that area. This includes everyone from the Mayor and City Council members to the Governor and Senators. They also provide plenty of information about the individual representatives, including their email, social accounts, and other important websites.
The Houndify Voice SDK was the other core technology that made our project possible. They have an awesome iOS SDK that handles almost everything related to the voice experience (including the fun microphone animations!!). We used a combination of custom server-side commands, “client match” commands, and Mapping domain commands.
The server-side commands powered our most common phrases, including queries like “Who are my national representatives?” and “Tell me about my representatives.” We used Client Match commands to support queries about individual representatives, like “Tell me about London Breed” and “Tell me more about Kamala Harris”. Since the Houndify service doesn’t inherently know about these people (how to spell their names, for example), we have to populate the queries from the iOS client after we fetch them from the Phone2Action API (“client matching”).
We also used Houndify’s more advanced Mapping domain to support phrases like “Show me Atlanta, Georgia” or “Show me info about Los Angeles”. Obviously we couldn’t enter phrases for every city in the country ourselves (since there are almost 20,000 cities in the country). Houndify’s mapping domain takes care of that automatically, and gives us the city and state associated with the user’s query. This was a super important detail to the conversational interface, because it lets the user jump arouund and learn about representatives from anywhere in the country without breaking the immersion of the voice UI.
The Team
I went to TreeHacks this year with my friend Cliff. We met through Georgia Tech’s iOS Club a few years ago and had been friends ever since, but had never actually worked on a project together. When we found out we were both heading to TreeHacks, we decided to team up and take it on together. I’m glad we did, because we turned out to be a real powerhouse team. Cliff has plenty of UI experience — he was on the iOS System Experience team at Apple last summer (he literally worked on the iOS home screen). His skills complemented my experience scoping and managing hackathon projects (I’ve been to at least a few in my day), so we were able to get in there and build an awesome experience from start to finish.
Overall this was an awesome hackathon, and I’m really glad we got the chance to go! (It never hurts to win a few prizes either 😉) Hopefully I can squeeze in one more hackathon before I graduate in May. Stay tuned!