Case study · Real-estate deal-sourcing SaaS
OnOffDeals — A real-estate deal-analysis SaaS, built and operated end to end
Charyx Labs built and operates OnOffDeals, a real-estate deal-analysis SaaS: a React 18 single-page app over an async FastAPI and MongoDB backend, with 16 API routers, 20 domain services and 311 automated tests guarding a from-scratch property valuation engine, live Stripe billing, and Anthropic Claude integrated as an in-app deal coach.
- Client
- OnOffDeals
- Industry
- Real-estate deal-sourcing SaaS
- Location
- United States (remote product)
The problem
- Property investors were analysing deals across spreadsheets and browser tabs, with no consistent valuation method.
- A valuation engine is only trustworthy if it is tested; an untested one quietly produces wrong numbers.
What we built
- A React 18 SPA with an async FastAPI + MongoDB backend — 16 API routers and 20 domain services.
- A from-scratch property valuation engine, guarded by 311 automated tests.
- Live Stripe billing: subscriptions, trials, coupons, webhook-driven state and per-plan usage metering.
- Anthropic Claude as an in-app deal coach, with prompt guardrails and output validation so the model cannot return unusable or unsafe output.
- Redis caching and a versioned cache layer.
Outcomes
- 311 automated tests run against the valuation engine, so a pricing regression is caught before a user sees it.
- Billing state is webhook-driven rather than polled, which is what keeps subscription status correct after a failed payment.
Stack
- React 18
- FastAPI
- MongoDB
- Redis
- Stripe
- Claude
- Python
Questions about this build
Who owns the OnOffDeals codebase?
The client owns it. Charyx Labs hands over source code, documentation and every credential on full payment, as a matter of standard terms.
How is the AI deal coach kept accurate?
Claude runs behind prompt guardrails with schema-validated output, so a malformed or out-of-scope generation fails loudly instead of being shown to the user as advice.