AI-powered transaction classification, real-time portfolio tracking, and event-driven analytics. Secured by AES-256 encryption. Built for self-hosting. Designed for global finances

Every feature is production-grade, multi-currency aware, and designed to learn from your data.

AI-classified transactions with category breakdowns, monthly trends, and top expense analysis across all currencies.

FIFO lot tracking with historical FX rates, real-time pricing, and asset allocation across stocks, ETFs, crypto, and real estate.

CSV/XLSX ingestion with adapter detection, SHA-256 deduplication, 4-tier AI classification, and staged review before commit.

7 financial lenses analyze your data daily: spending velocity, income stability, savings rate, portfolio concentration, and more.

Master-detail accounts with Plaid connection health, sync logs, token rotation, and multi-bank support across 10+ countries.

Deep-dive drawer with AI analysis, investment enrichment, merchant history, and one-click category corrections that train the model.
A complete profit & loss view across all your accounts, currencies, and countries. Bliss automatically converts every transaction to your portfolio currency using historical FX rates, giving you a unified financial picture.

Three services behind a single .env file. The SPA talks to the API via REST, and the API delegates heavy work to the backend through an event-driven pipeline.

Nginx (:8080)
├── React SPA (Vite + shadcn)
│ └─► REST APIs (JWT in HttpOnly Cookie)
│
└── Next.js API (:3000)
├── NextAuth, >60 endpoints
├─► PostgreSQL 16 + pgvector
│ AES-256-GCM encryption
│ 768-dim embeddings
│
└─► Express Backend (:3001)
Internal REST (API key auth)
Event-driven pipeline
10 BullMQ Workers
│
├─► Redis (cache + job queues)
├─► Gemini (AI classification)
├─► Plaid (bank sync)
├─► TwelveData (stock prices)
├─► CurrencyLayer (FX rates)
└─► Sentry (observability)Every heavy operation runs asynchronously. Classification, portfolio valuation, analytics, insights, Plaid sync, and security master refresh — all processed via dedicated workers with structured error reporting.
Read the architecture guide