Best of the MCP
Controtto - Self-hosted P&L Tracker

Controtto - Self-hosted P&L Tracker

by contre95/controtto

1 views
Created
1 years ago
Stars
52
Language
Go
License
GNU General Public License v3.0
Issues
6

Self-hosted profit/loss tracker for transactions with SQLite storage

Finance & Crypto

📊 Controtto

A self-hosted, P&L tracker made with Go, HTMX and no JavaScript. Controtto, keeps track of your transaction saving it in a sqlite file, and returns all sorts of calculations including:

  • Avg. Buy price
  • Current asset value
  • Transaction history
  • Import / Export transaction (see sample)
  • Profit & Loss

In order to fetch the price of an asset, Controtto relies on mainly 4 APIs (see code).

  • Binance - Public API, no token needed.
  • BingX - Public API, no token needed.
  • Alpha Vantage - Stocks, free but short rate limit. (get an token and set CONTROTTO_AVANTAGE_TOKEN)
  • Tiingo - Stocks, crypto and Forex. (create account/token and set CONTROTTO_TIINGO_TOKEN)

Demo

You can also check out the demo at demo.contre.io, the database resets every hour.

https://github.com/user-attachments/assets/28bf8782-6118-47c0-a94b-085e1a7045b2

All configurations are set in the .env file and passed as environment variables. Variables CONTROTTO_PORT and CONTROTTO_DB_PATH are available.

# Install the dependencies
go mod tidy
# Set the .env
mv .env.example .env
# Source the env variables
. <(cat .env | grep -v -e '^$' | grep -v "#" | awk '{}')

Build and Run

go run ./cmd/main.go # go build ./cmd/main.go to just build it

Development env

go install github.com/cosmtrek/air@latest # Download air
air -c air.toml

and access localhost:3000

Run with Podman

A Container image is available on Docker's public registry. If you want to use Docker, simply replace podman with docker.

mkdir data
podman container run --rm -p 8000:8000 -v $(pwd)/data:/data contre95/controtto

Run tests

go test -cover ./...
#   Expected result
#   ?       controtto/cmd   [no test files]
#   ?       controtto/src/app/managing      [no test files]
#   ?       controtto/src/domain/pnl        [no test files]
#   ?       controtto/src/gateways/markets  [no test files]
#   ?       controtto/src/gateways/sqlite   [no test files]
#   ?       controtto/src/presenters        [no test files]
#   ok      controtto/src/app/querying      0.003s  coverage: 40.7% of statements

TODO

  • More tests
  • Wrappers for logging and metrics would be nice as well.
  • Add Accounts to keep track of the total net worth.
  • Remove all the CSS and use custom style.css + Tailwind CDN.

Install

No configuration available

This service may require manual configuration, please check the details on the left

Related

Related projects feature coming soon

Will recommend related projects based on sub-categories