I wanted to make something to protect people's identities when attending a recovery program like Alcoholics Anonymous. A phone number or an email can easily be linked to your identity but it’s important to have a means of notifying group members about logistical changes. Usually, the leaders at an AA meeting will ask attendees to put their information down on a sheet if they’d like to be told about cancellations, but some people aren’t comfortable doing that.
What it does
It allows a group leader to create a code for their group, and then share it to attendees. When attendees go to the website, they can enter their contact information and the site will send them any messages the leader submits on the site without the leader ever knowing who they are.
How I built it
I created a Go api using a gin server that integrates with SendGrid and Twilio to send emails and SMS. Then I created a react frontend to consume that API in a more user friendly way.
Challenges I ran into
I had never deployed to a real website before, so getting the components from my macbook onto a public facing server was difficult. I spent most of a day struggling with Heroku until switching to a Digital Ocean Droplet that worked much better.
Accomplishments that I'm proud of
This is the first project I've made that has actually been public facing, which is very exciting and terrifying. I think the API I created is fairly good, although it's error handling needs some work.
What I learned
I hadn't used the SendGrid or Twilio APIs before, so that was fun to learn. I also hadn't used Heroku or Digital Ocean at all. I also learned that having a domain name doesn't always mean you have hosting to go with it.
What's next for Anon
There's a lot left to be done. There's currently no persistence so if the api gets updated all the groups will be cleared so adding a database is high priority. I'd also like to change it to allow participants to enter just an email address or a phone number instead of needing both. I'd like the participants to be able to contact the leader. There's currently nothing preventing a participant from lying and saying they're the leader, so the api should be updated to expect an additional piece of information only the leader knows. There's no way to delete groups, or name them so you remember which group is which, or see which group you belong to. You also can't unsubscribe from notifications, and you can subscribe to a group multiple times. The messages are currently sent synchronously, so if a group has a lot of members the web request might time out. There's no input validation, the UI is not styled at all, and the error handling on the api isn't thought out very well.
So as you can see, the work is never really done.