We wanted to simplify the process of collecting data from a group of people. The number one way that we thought we could do this was to eliminate the web interface, which means there is no need for a Wi-Fi or LTE connection. It also means that there is no need to sign up for a service, which makes the surveying process much simpler.

What it does

SMSurvey is our solution to this problem. With our application, a user is able to create a survey and send it to any number of known phone numbers. We also have an option to collect phone numbers by having the surveyees send a text message to a number that is provided to them. This will then add them to the roster of people being surveyed, and the surveying process will begin. Once the survey is complete, the results are downloadable as a .csv file.

How we built it

SMSurvey consists of a Python backend, a Javascript frontend, and a Google Cloud Server that communicates between the two. On the front end, the surveyor has the option to input a list of questions and a list of numbers to send the questions to, and then can start the survey. They can either collect numbers manually from people they know, or they can have people text the phone number of the survey before starting a survey, and it will create a list of numbers in a file that can be copied over to the survey creator.

On the Python side we use the Twilio API to send a list of survey questions to a list of phone numbers one at a time as responses are received. The responses are then stored in a .csv file and sent to the surveyor so that it can be downloaded and analyzed.

Challenges we ran into

Getting all of the dependencies for JavaScript to work together is kind of a mess sometimes. Especially when all of the libraries are interacting with each other, if one of them is the wrong version all kinds of things can go wrong. This caused some pretty hefty delays on the front end, but we did overcome those hurdles. Once we got that sorted out, it was fairly straightforward.

Figuring out how to structure our data surrounding the surveys. We needed things like Survey, User, Messenger classes to be able to interact, and deciding how to go about that to make the rest of the code as simple as possible was definitely a challenge. We think we settled on a pretty sound plan, and using it (once it was done).

Accomplishments that we're proud of

In the end, our frontend and backend interact incredibly smoothly through our Google Cloud Platform server. We thought that this was going to be the most difficult part of our project, when in actuality it ended up being very straightforward for us to implement.

We feel like the frontend UI is quite intuitive and has minimalist feel. It is visually pleasing to use.

What we learned

How to work on projects with multiple people
Working towards a goal with time constraints
Working under stress

More specifically
We learned how to use Twilio's API
How to use Flask
One of us learned how to write Python
How to use React
How to make everything else interact with React
A lot about backend development
A lot about frontend development
A lot about meshing the two together
How to use Google Cloud Platform
Vastly increased understanding of Git and Github

What's next for SMSurvey

Automatically importing numbers during the collection process
Actually validating phone numbers rather than the E.164 regular expression
Data validation
User accounts so you can keep track of surveys that have been sent
Ability to have multiple concurrent surveys with the same group of users or at least with some overlap

Share this project: