Sign inSign up

geertmeersman/tricount-web

By geertmeersman

•Updated about 8 hours ago

A self-hosted web frontend for Tricount (by bunq), built on top of the unofficial tricount-api.

Image
0

574

geertmeersman/tricount-web repository overview

⁠Tricount Web

A self-hosted web frontend for Tricount⁠ (by bunq), built on top of the unofficial tricount-api⁠ Python client.

⁠Features

  • 👥 Multi-user with invite-only registration and admin panel
  • 🔗 Add tricounts via sharing token or create new ones directly
  • 💰 Balances, transactions, search and personal summary
  • ➕ Add and edit transactions with equal, ratio or custom amount splits
  • ✅ Register payments between members
  • 🔁 Recurring expenses (daily / weekly / monthly / yearly)
  • 📧 Weekly email digest with personal balances (opt-in, per-user language)
  • 🏷️ Color-coded labels with grouped overview
  • 🗑️ Bulk delete transactions
  • 👤 Display name and language preference per user
  • 🌍 Multilingual: NL / EN / FR
  • 📱 Mobile-friendly
  • 🔒 CSP, X-Frame-Options, bcrypt passwords

⁠Quick start

Create a .env file with a secret key:

echo "SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_hex(32))')" > .env

SECRET_KEY is used by Flask to sign session cookies — keep it private and don't reuse it across deployments.

services:
  tricount-web:
    image: geertmeersman/tricount-web:latest
    container_name: tricount-web
    env_file: .env
    volumes:
      - ./data:/app/data
    ports:
      - "5000:5000"
    restart: unless-stopped
mkdir data
docker compose up -d

Open http://localhost:5000⁠ and register the first account — it becomes admin automatically.

services:
  tricount-web:
    image: geertmeersman/tricount-web:latest
    container_name: tricount-web
    env_file: .env
    volumes:
      - ./data:/app/data
    restart: unless-stopped
    networks:
      - proxy

networks:
  proxy:
    external: true

Place behind nginx, Traefik or Caddy with HTTPS. The app sets SESSION_COOKIE_SECURE=True and expects to run over HTTPS in production.

⁠Data

All data is stored in the mounted ./data/ directory:

FileDescription
tricount.dbSQLite database — users, tokens, recurring expenses, invites, labels

Back this directory up regularly. It contains your device credentials and all tricount tokens.

⁠Optional: weekly email digest

Add these to your .env to enable a weekly balance email every Monday at 08:00. The email is sent in each user's preferred language and groups tricounts by label. A test send button is available on the profile page.

APP_BASE_URL=https://your-domain.com
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASSWORD=your-app-password
[email protected]

Users opt in individually from their Profile page. If SMTP_HOST is not set, the job is skipped silently.

⁠How it connects to Tricount

This app does not use your Tricount email or password. It connects as an anonymous device (UUID + RSA key pair), generated automatically when you register. Your username and password are local to this web UI only.

⁠Source & docs

Tag summary

Content type

Image

Digest

sha256:cca01fd64…

Size

105.2 MB

Last updated

about 8 hours ago

docker pull geertmeersman/tricount-web