RaabtaHQ

About

Who builds RaabtaHQ

A small team, in Pakistan, building for the businesses around us first — clinics, consultancies and professional firms that run almost entirely on WhatsApp.

Muhammad Usama Qamar

Founder

You are not going to get a support queue. Send a message and the person who built the thing reads it.

How it is built

Three decisions that shaped the product

These are the ones that are visible from the outside, in the sense that a customer would eventually notice if they were made differently.

  • The database enforces what matters, not the code

    A clinic diary cannot double-book because a Postgres exclusion constraint forbids it, not because a function remembered to check. Tenant isolation is row-level security, not a WHERE clause somebody could omit. Contact deduplication is a unique index. The pattern is deliberate: rules that live in application code are rules that hold until the day two requests arrive at once.

  • An agent that survives the server dying

    Anything left running unattended is only as good as what happens when it fails. Every step is persisted before the next one starts, tool calls are ledgered so a replayed run returns the first attempt's result instead of booking twice, anything critical stops and asks a person, and the ceilings are money and wall-clock time rather than a step count.

  • Verticals you can delete in an afternoon

    An industry module owns its own tables, routes, scheduled jobs, AI tools and staff roles. Removing one is deleting its own files plus two lines in each of four core files — and that is enforced rather than aspirational: it has been run end to end on a module with 39 tables, 20 route folders and four contributed roles, with the whole test suite green afterwards.

What we got wrong

The first version of the industry modules was a mistake

The first attempt at supporting different industries was a configurable meta-model: one universal schema meant to describe eight verticals at once, with an industry field on the account and semantic meanings layered onto pipeline stages. It was built before any single one of those industries was properly understood.

It bent under every new industry. Each one needed the shared abstraction to mean something slightly different, and the cost of each accommodation landed on all the others. It was removed wholesale — tables, engine and all — and the migration history was squashed so none of it survives in the schema.

What replaced it is the opposite trade: independent vertical slices, each owning its own tables and screens, with some duplication accepted deliberately so that a wrong guess can be deleted rather than lived with. The rule is that a helper is duplicated into a module rather than generalised in core, and a shared abstraction is extracted only once three modules want the same thing — never when two do.

That is why the industry modules are described the way they are on this site: not as configuration, but as separate slices with their own data. It is also why we can say what a module does not cover without much difficulty — the boundaries are real.

Where we work

Pakistan first, then the Gulf

Built for the businesses nearest us, and now used by clinics, consultancies and firms across three markets with genuinely different working weeks.

5
channels, one inbox
80
AI tools across 18 groups
3
industry modules
23
documented use cases

Talk to the person who built it

No SDR, no qualification call. Tell us what you are trying to do and we will tell you honestly whether this fits.