Skip to main content
Featured Private repo Live

Pharma Finance

Self-hosted financial platform for Greek pharmacies. Manual expense and cash-closing tracking plus assisted supplier-invoice ingestion, with async OCR extraction, a review queue, and explicit user confirmation before anything becomes trusted financial data. Runs as a multi-service stack with a Java backend, a separate OCR service, and full metrics and log observability.

Java Spring Boot PostgreSQL RabbitMQ Next.js React FastAPI Docker Traefik Prometheus Grafana

Pharma Finance is a financial platform built for Greek pharmacies, covering the day-to-day bookkeeping a pharmacy actually needs: manual expense tracking, cash-closing records, and supplier-invoice handling. It is self-hosted on a VPS behind Traefik rather than deployed to a serverless platform, which keeps the whole stack (application, database, message broker, and observability) under direct operational control.

Supplier invoices go through an assisted ingestion pipeline rather than a fully automated one. Uploaded invoices are queued for asynchronous OCR extraction by a separate service, the extracted data lands in a review queue, and nothing becomes trusted financial data until a user explicitly confirms it. That confirmation step is a deliberate design choice: financial records are the one place in this system where an automated guess should never silently become the source of truth.

The backend is Java and Spring Boot, with PostgreSQL for storage and RabbitMQ decoupling the OCR extraction from the request path so a slow or failing extraction never blocks the rest of the application. The frontend is a Next.js and React application talking to the Spring Boot API, with the OCR service itself built in FastAPI. The whole stack runs in Docker behind Traefik, with Prometheus and Grafana wired in for metrics and log observability. It holds the same operational expectations as the enterprise systems this project was built to complement, applied to something run and maintained independently.

← Back to projects