This project hosts the code for the Drupico web application. It was in production for a period of time, running on AWS, with Terraform found here.
The goal of this project was to build an application without Go libraries for software developers to be able to share and store URLs they found useful for their job, entertaining, etc. within their team. Reading lists can be used to collect groups of URLs, with the intention to enable teams to create lists like 'onboarding' so that new team members would have a specified set of resources to get up to speed on the tooling, technology, and ways of working relevant to that team. A voting system was added to for a reddit-style way of surfacing high quality URLs. URLs can be saved, shared, etc. There is also a slack integration for easily saving URLs directly from Slack.
The goal for the project was to keep the usage of Go libraries to 0. Reducing the usage of external dependencies is something that Go makes much easier with its later updates and extensive std lib. In addition, reducing dependencies allows for more performant code, and fewer resources required for running the application when deployed in production.
The application is free from Go dependencies with 2 exceptions. The first being PostgreSQL drivers, which re-implementing
from scratch would have contradicted the spirit of the project. The other exception is the use of the x/crypto which
provides the Argon2 password hashing algorithm. The x repositories are part of the extended Go std lib, and the
value of a high quality password hashing library was more valuable than the security costs of using something of a
lower standard.
In addition to the above, the app uses HTMX and TailwindCSS, to create a snappy, SPA-like, mobile responsive feel, with a consistent, easy to use set of CSS, as well as dark/light themes.
Some of the developer tooling includes air, sqlc, go-migrate, direnv and Nix Flakes.
Using go-migrate, the following command can be used to migrate the DB
migrate -source=db/migrations -database=$DB_URL up
Ensure the following features are present in the features table. They can be either true or false and the
application will behave accordingly. These were set up to enable active development while the application was in
production.
signups
contact_page
blog
login
This application has served as a testing ground for learning, experimenting, trying out different architectures, and ways of doing things, etc. As such, it does not always adhere to best practices, or even necessarily consistent practices and should not be treated as such.