# [Barretthousen](https://barretthousen.com)

Search and get alerts for items across the most popular auction sites.

Built with microservice architecture, for learning purposes

### Links

- [Keybase Team Chat](keybase://team/barretthousen)
- [Source](https://git.vdhsn.com/Barretthousen/barretthousen)
- [Auction terms glossary](https://auctionsneapolitan.com/Auction-Terms-Glossary.html)
- [User's Site](https://barretthousen.com)
- [Admin Panel](https://admin.barretthousen.com)


### Goals

1. Ability to search upcoming and live auctions across major auction sites
2. Get an email digest of upcoming auctions for the week

Future goals

1. Get email alerts when these auctions are about to go live
2. Specify search criteria for email alerts


## Technology

For Users
- [Prod](https://barretthousen.com)
- [Staging](https://beta.barretthousen.com)

For Admins

- [Prod](https://beta.barretthousen.com)
- [Staging](https://admin.beta.barretthousen.com)
- [Architecture Diagram (use diagrams.net)](./doc/Barretthousen_mvp.drawio)

![Arcchitecure Diagram MVP](./doc/Barretthousen_mvp.drawio.svg)

### Services

- Web-client
Frontend site that users access to browse upcoming auctions and subscribe for updates to their searches

- Catalog
API for searching upcoming auctions.

- Ringman
Manages email subscriptions and sending emails to users about upcoming auctions.

- Runner
Scrapes sites for upcoming auctions.
Transforms the data into a suitable shape and stores it for use by the frontend.

- Auctioneer
Enables site administrators to kicks off scrape and email jobs in Runner and Ringman, and view status on current/past jobs.

- BHDB
Monolithic postgres datbabase tying it all together


### Contributing


Install `asdf` and run `hack/asdf_plugin_setup`

```sh
# install asdf tools, build tooling, encryption key for sops
make setup

# generate protobufs and sql boilerplate
make gen

# spin up a k8s cluster, build and deploy services locally w/ hot reloading
make dev

# build production docker images for the backend microservices, optionally push to the respective env
make build-backend-image SERVICE=[catalog, runner, proxy-client, proxy-admin] [ENV=[beta, prod]]

# build client docker image for web frontends, optionally push to the respective env
make build-client-image SERVICE=[web-client] [ENV=[beta, prod]]
```
