Real estate / fintech
Live client build, in active developmentCommercial Real-Estate Developer
One owned portal replacing a stack of SaaS subscriptions: investor management, payments, e-signature, and analytics for a capital raise.
A custom investor and stakeholder portal for a commercial real-estate developer raising capital, built to replace fragmented SaaS with one system they own, running on their own Google Cloud.
Problem
The problem.
A commercial real-estate developer running a multi-lane capital raise (a public crowdfunding campaign and an accredited-investor placement) was stitching the work across separate SaaS tools: one for investor management, another for document signing, another for payments, another for analytics and outreach. Every tool was another subscription, another login, and another integration that didn't quite fit the deal structure.
Approach
How I built it.
- Build one portal the client owns, on their own Google Cloud, instead of renting overlapping SaaS tools that each cover a slice of the raise.
- Two roles in one system: a stakeholder dashboard (capital raised, investor pipeline, campaign performance) and an investor experience (browse opportunities, verify accreditation, fund, sign, track a portfolio).
- Model the deal mechanics off-the-shelf tools could not: a bespoke sponsor-carve distribution waterfall computed live from the deal parameters, the kind of structure generic investor SaaS does not handle.
- Stand it up on managed surfaces: a React 19 front end on Firebase Hosting, a FastAPI back end on Cloud Run, Firestore for transactional data, Firebase Auth with role custom claims, and Stripe ACH for payments (test mode through the build, live after compliance review).
- Gate everything behind real auth with role-scoped access, so investors and the internal team each see only what they should. Portfolio and distribution figures shown in the current build are illustrative demo data, not actual raised capital.
Architecture
What's running, and why.
Frontend / app surface
- Firebase Hosting
- React 19 + TypeScript + Vite + Tailwind front end, deployed to the client-owned project.
Backend / data
- Cloud Run (FastAPI)
- Python 3.12 API service handling investor, campaign, and distribution logic.
- Firestore + BigQuery
- Firestore for transactional state; BigQuery for analytics as the platform grows.
Auth + payments
- Firebase Auth
- Role custom claims (stakeholder, investor) enforce who sees what.
- Stripe ACH
- Investor funding by ACH. Test mode through the build, live after compliance review.
Outcome
What shipped.
1 portal
Replaces investor management, e-signature, payments, and analytics SaaS with one owned system
2 lanes
A public crowdfunding campaign and an accredited-investor placement in one platform
Live on GCP
React front end on Firebase Hosting, FastAPI back end on Cloud Run, deployed and in active development
Owned, not rented
The client owns the code and runs it in their own cloud, with deal logic SaaS could not model
Stack
- React 19
- TypeScript
- Vite
- Tailwind
- FastAPI
- Python 3.12
- Cloud Run
- Firestore
- BigQuery
- Firebase Auth
- Firebase Hosting
- Stripe ACH
What this proves
Where this ports.
This is the SaaS-replacement thesis outside my own employer: a real outside client paying for software they own instead of renting subscriptions that almost fit. Capital raising, investor relations, payments, and analytics are exactly the kind of glued-together SaaS stack a custom system on your own cloud can replace, with the deal logic built the way the business actually works.
Want the same pattern in your business?
Thirty minutes. Describe what you're working on and I'll tell you if I can ship it.