Skip to main content
Glama

📊 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 '{}')

Related MCP server: DependencyMCP Server

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.

-
security - not tested
A
license - permissive license
-
quality - not tested

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/contre95/controtto'

If you have feedback or need assistance with the MCP directory API, please join our Discord server