first commit

This commit is contained in:
2026-08-25 06:37:14 +01:00
commit 5c3e72b40e
26 changed files with 6301 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
# 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).