Architecture diagram
A primary goal of this application was for it to be hosted entirely on the AWS free tier. This would allow the app to be used indefinitely without needing major infrastructure changes.
With that in mind the app uses the following AWS Services:
- CDK
- Handles all infrastructure creation and updates
- Lambda
- The main compute for the app
- DynamoDB
- Handles all data storage
- EventBridge Scheduler
- Triggers certain lambdas on a set interval
- API Gateway
- Exposes lambdas to the public internet
Each of the lambdas is writting using Go. TGo was picked almost entirely because one of the authors, glitchedmob, was interested in learning how to use it.
The project makes signicant use of these libraries:
- spf13/viper
- Library for loading configuration from multiple sources
- gin-gonic/gin
- A web framework used in the API Lambda
- google/wire
- A tool for generating dependency injection boilerplate
- swaggo/swag
- For generating OpenAPI/Swagger documentation
Of course, there are more libraries, but these are the main big ones.
The project also users this libraries in tests:
- testcontainers/testcontainers-go
- Creates databases in docker containers for testing
- stretchr/testify
- Mocking and assertion utilities
- brianvoe/gofakeit
- Used for generating fake test data
