Tolerance [ start a project ]

← Back to the case study

How ChatBill is actually built

chatbill.co.za ↗ ยท the stack, the hosting and the maintenance, in full

backend

ASP.NET Core, server-authoritative

C# and Razor, with one source of truth for every quote, invoice, number and total that the website and the Android app both share.

database

PostgreSQL, properly modelled

A relational schema accessed through Entity Framework Core, with the money, dates and audit trail treated as things that must never be wrong.

identity

ASP.NET Identity

Authentication runs on ASP.NET Core's own Identity framework, not a third-party auth provider.

hosting

AWS, Cape Town

A single EC2 instance running the app and Postgres as containers behind Caddy, sized for what the business actually is.

architecture

Linux on arm64

The whole system runs 64-bit ARM on Graviton, which is the cheapest and the fastest per rand for this workload. Container images are cross-compiled to arm64 and precompiled to native code at publish, so a deploy does not spend its first minutes compiling itself.

aws-native

Email and SMS inside AWS

Transactional email through SES, one-time passwords through SNS, both on the same AWS account as everything else.

self-sufficient

Maintains itself

Background services inside the app handle their own housekeeping, so routine cleanup needs no external cron job or worker.

backups

Automated and offsite

The database and its encryption keys are backed up together, on a schedule, off the instance.

observability

Its own admin dashboard

User management, reporting, dispute handling, PayFast subscriptions, and disk, memory and database health, all in one place.

mobile

Android, same API, same rules

Kotlin and Jetpack Compose, talking to the same server-authoritative backend as the website.

Want the same for your business?