Project · Web App (SaaS)

Ortaklık Kasası

A self-hostable settlement and accounting app that records expenses/income between business partners, computes net balances, and suggests the minimum number of transfers.

React 18TypeScriptVite 6Tailwind 4PocketBaseDocker

Overview

Problem It Solves

Automates the hassle of manually tracking multiple partners’ shared expenses, who owes what, and net balances — the "who should send how much to whom?" question. Splitwise-like, but with expense-based proportional distribution.

What Sets It Apart

A single SQLite file self-hosted on a cheap VPS via a Supabase → PocketBase migration; expense-based proportional distribution + min-transfer solution to the classic debt-splitting problem; enterprise-grade security for a small team with MFA + CAPTCHA + whitelist.

Maturity

A mature MVP tagged v1.0 with 5 completed sprints; detailed deploy guide, production Docker Compose, and build available.

Highlights

📊
Summary

Total expense/income/net, per-partner balance table, per-product profit/loss report.

🧾
Expenses

Categorized (domain, SSL, hosting, Claude, software…) expense CRUD; each expense can be split proportionally among selected partners.

💰
Income & Collection

Income records that can be tied to a product; payment records between partners update balances.

🔄
Settlement Algorithm

Expense-based shares + greedy minimum-transfer suggestion.

📤
Extras

CSV export, date-range filter, realtime sync, ErrorBoundary.

🔐
Enterprise Security

Mandatory MFA (password + email OTP), whitelist signup (public signup off), Cloudflare Turnstile CAPTCHA (server-verified), RLS-equivalent access via the PocketBase rules engine.

Tech Stack

FrontendReact 18 + TypeScript + Vite 6 + Tailwind 4
BackendPocketBase (SQLite; migrated from Supabase)
DeployFrontend on Vercel · PocketBase Docker + Caddy (automatic TLS) on VPS self-host
EmailBrevo SMTP (OTP)