A secure, multi-tenant SACCO Management Platform for Uganda with web and Android applications. It enables SACCO registration and subscription, member management, savings, shares, welfare funds, loans, guarantors, mobile money payments, accounting, reporting, branch management, and role-based approvals.
# Tereka Online
A multi-SACCO operating platform for Uganda described in the requirements document.
The production backend path is Java/Spring Boot in `backend-java`. The Node server is the SPA host and Java API proxy. Its legacy in-memory API is kept only for local development/demo use; in `NODE_ENV=production`, `/api/v1` requires `JAVA_API_BASE` unless `SACCO_NODE_API_ENABLED=true` is set deliberately.
## What is included
- Platform administration dashboard.
- SACCO self-registration and approval workflow.
- Subscription packages, invoices, and payment activation.
- Tiered annual subscription billing, with UGX 5,000/member for SACCOs up to 250 members and fixed tiers above that.
- Tenant switching with tenant-scoped demo data.
- Branch-aware member registration and KYC statuses.
- Savings, shares, and welfare transaction posting.
- Maker-checker approval queue.
- Loan application and appraisal queue.
- Java-backed dashboard and operations center with live health counts, alerts, release gates, and runbook links.
- Member self-service portal.
- Member login with balance viewing.
- Reports, compliance snapshot, and audit trail.
## How to run
Recommended local development path: run the Java backend, then run the frontend proxy:
```powershell
npm.cmd run java:start
npm.cmd run start:java-api
```
Then open:
```text
127.0.0.1
```
This keeps the app at `
127.0.0.1` while proxying `/api/v1/*` requests to `
127.0.0.1`.
Legacy demo fallback, for UI demonstrations only:
```powershell
npm.cmd start
```
This starts `server.mjs` without `JAVA_API_BASE`, so `/api/v1` uses the in-memory Node fallback. Do not use this mode for production-style testing.
Check only the Java backend health:
```text
127.0.0.1
```
For production-style local checks, always run the frontend with `JAVA_API_BASE`. Starting `server.mjs` with `NODE_ENV=production` and no Java API now returns `503 JAVA_API_REQUIRED` for `/api/v1/*` ins …