91 lines
2.7 KiB
Markdown
91 lines
2.7 KiB
Markdown
# Cryptomon
|
|||
|
|
|
||
|
|
A self-hosted, single-binary crypto portfolio dashboard backed by Kraken.
|
||
|
|
Read-only: it tracks your holdings, cost cryptomon, and P&L — it never places
|
||
|
|
trades or moves funds.
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
- Live portfolio value and P&L, updating in real time from Kraken's
|
||
|
|
websocket ticker, visible in the top bar on every page.
|
||
|
|
- Per-position detail (holdings, cost cryptomon, current value) and a
|
||
|
|
transfers view.
|
||
|
|
- Auto-imports trades and balances from Kraken; supports manual ledger
|
||
|
|
entries for anything bought elsewhere.
|
||
|
|
- Single-user authentication: username/password + optional TOTP-based MFA
|
||
|
|
(with QR code setup), all served over your own network.
|
||
|
|
- Kraken API credentials are encrypted at rest.
|
||
|
|
|
||
|
|
## Requirements
|
||
|
|
|
||
|
|
- Go 1.26+ (to build from source)
|
||
|
|
- A Kraken account and API key with **read-only** permissions
|
||
|
|
(Query Funds, Query Closed Orders & Trades — no withdrawal or trading
|
||
|
|
rights needed)
|
||
|
|
|
||
|
|
## Setup
|
||
|
|
|
||
|
|
Build the binary:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
go build -o cryptomon .
|
||
|
|
```
|
||
|
|
|
||
|
|
Run it:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
./cryptomon
|
||
|
|
```
|
||
|
|
|
||
|
|
On first run it creates a `data/` directory next to the binary containing:
|
||
|
|
|
||
|
|
- `settings.conf` — port, poll intervals, base currency, and a random
|
||
|
|
encryption key used to encrypt your Kraken API secret at rest
|
||
|
|
- `app.db` — SQLite database (portfolio data, login, MFA state)
|
||
|
|
|
||
|
|
By default the server listens on `:8080` — open `http://localhost:8080`.
|
||
|
|
|
||
|
|
### First login
|
||
|
|
|
||
|
|
The default login is `admin` / `admin`. On first sign-in you'll be
|
||
|
|
required to set your own username and password. From there, MFA
|
||
|
|
(authenticator app via TOTP, with QR code setup) can optionally be
|
||
|
|
enabled from the Account page.
|
||
|
|
|
||
|
|
If you forget your credentials, run:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
./cryptomon -userreset
|
||
|
|
```
|
||
|
|
|
||
|
|
This resets the login back to `admin` / `admin` and disables MFA. You'll
|
||
|
|
be asked to set a new username/password on next sign-in.
|
||
|
|
|
||
|
|
### Connect Kraken
|
||
|
|
|
||
|
|
Go to **Settings** and enter a Kraken API key/secret with read-only
|
||
|
|
permissions. Balances and trade history will sync automatically on the
|
||
|
|
configured poll interval.
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
`data/settings.conf` is a plain `key=value` file, auto-created with
|
||
|
|
defaults on first run:
|
||
|
|
|
||
|
|
| Key | Default | Meaning |
|
||
|
|
|---|---|---|
|
||
|
|
| `port` | `8080` | HTTP listen port |
|
||
|
|
| `poll_interval_seconds` | `60` | How often balances/trades/prices refresh |
|
||
|
|
| `history_refresh_seconds` | `300` | How often historical price deltas refresh |
|
||
|
|
| `db_path` | `data/app.db` | Path to the SQLite database |
|
||
|
|
| `base_currency` | `GBP` | Currency all values are displayed in (also changeable from Settings) |
|
||
|
|
| `app_secret` | *(random, generated once)* | AES-256 key encrypting Kraken credentials at rest — do not share or edit |
|
||
|
|
|
||
|
|
Edit `port` and restart to change the listen address; the rest can also
|
||
|
|
be changed from the web UI where applicable.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
See [LICENSE](LICENSE).
|