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.