Money Exchange SAAS platform

money exchange saas

money exchange saas platform

Overview

Evolved a branch-focused money exchange product into a true SaaS platform in 2026, with tenant onboarding, plan-based access, platform-owner controls, billing histories, payment records, and separate web and platform frontends.

Role: Full-stack Engineer (Solo)Year: 2026Product: Multi-tenant SaaSStack: Go + PostgreSQL + React + Vite + Docker

Tech Stack

Frontend

React + TypeScript + Vite + Tanstack Query + ShadcnUI + TailwindCSS + Zustand + react-hook-form + clsx

Backend

Golang + Gin + GORM + SQLC + PostgreSQL

Infra

Docker + Docker Hub + AWS Lightsail + Caddy

Auth

JWT access tokens with httpOnly refresh cookies

The Shift

The original money exchange system worked as a custom operational product. In 2026, I redesigned it into a multi-tenant SaaS so multiple shops could onboard independently, manage subscriptions, and be controlled through a dedicated platform-owner interface rather than ad hoc per-client deployments.

What I Built

  • Tenant signup flow with isolated tenant bootstrap data and admin account creation.
  • Tenant self-service profile management for business info, owner name, phone, region, and address.
  • Dedicated platform authentication, session refresh, current-session, and logout endpoints.
  • Platform tenant list, tenant detail, billing history, dashboard metrics, and manual status transitions.
  • Subscription purchase, renewal, upgrade, and downgrade flows with payment row creation for true financial reporting.

Platform & Billing Layer

  • Implemented platform-owner APIs for tenant management, billing history viewing, dashboard revenue metrics, and subscription actions.
  • Added real payment storage so revenue reporting is based on actual money collected instead of only plan estimates.
  • Separated current subscription state, billing-cycle state, and payment history so product, ops, and finance concerns stay cleanly modeled.
  • Added auto-scheduled lifecycle controls for tenant statuses like active, readonly, and suspended

Hard Problems Solved

  • Modeled paid-plan lifecycle, readonly grace windows, and future scheduler readiness without over-automating too early.
  • Built same-origin frontend deployments where static apps proxy API and asset requests cleanly through Caddy.
  • Introduced platform-specific auth flows without mixing tenant-user and platform-user identity boundaries.
  • Designed billing metrics to distinguish real collected cash from projected MRR, avoiding misleading SaaS reporting.

Outcome

  • The product moved from a single-solution operations tool to a reusable SaaS foundation.
  • Tenant-facing and platform-facing surfaces are now clearly separated, which makes future growth and support work much cleaner.

— End of content —