Inspiration
I moved to Baltimore 2 months ago and am responsible for my apartment's water bill. I had trouble tracking down how to redirect the physical bill to my location, and was surprised to learn the city doesn't support electronic accounts or email billing at all. I'm also a lazy programmer so I wanted this automated reminder every month.
What it does
You go to www.charmcitywaterbiller.com (yes I bought a domain yesterday just for this :) and sign up. That's it! The system will record your information and email you every time your bill is posted (monthly). You can sign up for multiple addresses with the same email if you want.
How I built it
I wrote a wrapper that crawls the Baltimore City water bill website, and exposes the bill through an API tied to an AWS Lambda function. Now anyone can query the website using this API call. I wrote several other API calls using Lambda functions that do the following: /Subscribe an email to a water bill account, /Run the crawler and email all subscribers if the bill was updated. The database is stored in DynamoDB in 3 tables. The website is run from S3.
Challenges I ran into
Dynamo is still a newer service, and APIs are still a little low level. I spent too much time focusing on the CRUD aspects of emails and bill data that could have been spent on some stretch goals I had (like text notifications through Nexmo, email confirmation, unsubscribing, and pretty-ifying the email you receive)
Accomplishments that I'm proud of
- I built the entire project within this weekend, and it is a fully functional live website that met my MVP goals (anyone can go to the site and sign up right now)
- The project is built and deployed every commit to master using GitLab and Terraform. What this means is I have a scalable, data-backed solution with CI and CD without spinning up a single server
- Since it's a low frequency API, it will fall under AWS' free tier and be free for me. As a bonus, it's built on js and .NET Core, so it's 100% cross platform. Check out the code on GitLab - you can see the continuous deployment pipelines as well. Please note this project and it's 36+ commits are all in the
feature/localbranch on GitLab. Once I move this to "production" I will merge to master.
What I learned
- DynamoDB needs a higher level API wrapper (at least for .NET)!
- Serverless development is incredibly fun. Setting up an API that has inherent ability to accept 100s of requests a second (barring your actual logic)
What's next for Charm City Water Biller
- Use Nexmo and have users opt in for text notifications
- Add confirmation and unsubscription workflows and API endpoints
- Clean up some of CI/CD automation - some hacks in there to tie things together
- Add better formatting to the email
- Clean up deployment for "production" - some hand rolled things can easily be removed
- Offer some data analysis - after all this records every account every month. There are a lot of interesting options here - one that comes to mind is mapping the highest "delinquent" accounts by neighborhood.
Built With
- amazon-dynamodb
- amazon-lambda
- c#
- gitlab
- terraform

Log in or sign up for Devpost to join the conversation.