Skip to content

Ch 03 · About

Bulk messaging that respects the people receiving it

BulkReach is built by DanixSoft. It exists because reaching your own people — your team, your customers, the list that asked to hear from you — should not mean an afternoon of copy-paste or a tool that treats consent as someone else’s problem.

Rundown · segment 01 Live

Why we built it

  1. Slack has no bulk direct message. WhatsApp has no real broadcast for a list you actually own. So the job falls to a person with a spreadsheet, two hours, and no record afterwards of who received what.

  2. The tools that do exist mostly solve the wrong half. They make it easy to send to everyone, and hard to know whether you should have. They report an aggregate open rate and cannot tell you why one specific person never got the message. And they are quiet about the fact that automating WhatsApp can get your number permanently banned.

  3. BulkReach takes the opposite position. The sending is the easy part; the queue, the pacing, the consent records and the per-recipient log are the product. If that makes a careless blast slightly harder to send, we consider that the feature working.

Principles

The decisions we do not revisit

Every one of these makes the product a little less convenient, and we keep them anyway. They are switches taped in the on position.

Engaged

Consent is a feature, not a checkbox

Having someone’s number is not permission to message them. Imports land opted-out, consent is recorded per person, and it is checked again at the moment of delivery. It would be easy to make this optional. We decided not to.

Engaged

Say the awkward thing plainly

WhatsApp automation is against WhatsApp’s terms and carries real ban risk. That warning is in the product, on this website, and in our machine-readable summary — not buried in a help article after you have paid.

Engaged

Slow enough to be safe

We could send faster. Slack’s rate limit and WhatsApp’s ban heuristics are the real constraints, and pretending otherwise would just move the cost onto your accounts. Pacing is not configurable downward.

Engaged

Isolation you can check

Tenant separation is enforced by the database, not by careful code review. The schema ships with an audit script that fails if any table is left unprotected — because “we were careful” is not a security model.

Engaged

Every send leaves a record

Who received what, when, and what went wrong. A messaging tool without an audit trail asks you to take its word for it, and you should not have to.

Engaged

Boring where it counts

Postgres, standard OAuth, well-understood encryption. The interesting engineering goes into the queue and the safeguards, not into the parts where novelty is a liability.

Under the hood

How it is built

Not because you should have to care — but because if you do, the answer should be available.

  • Next.js on Vercel

    The dashboard and API run as serverless functions — which is exactly why sending is queued rather than done inline.

  • Supabase Postgres

    Authentication, storage and Row Level Security in one place. Tenant isolation is a database guarantee, not an application convention.

  • A dedicated sending service

    WhatsApp needs one persistent process holding a live connection, which serverless cannot provide. It runs separately, always on, with encrypted session storage.

  • pg_cron for scheduling

    A database job checks every minute for work that has come due, and skips the round trip entirely when there is nothing to send.

On trademarks. Slack is a trademark of Slack Technologies and WhatsApp is a trademark of Meta Platforms. BulkReach integrates with both but is not affiliated with, endorsed by or sponsored by either company.

Talkback · open line

Questions we have not answered here?

Write to support@danixsoft.com. A person reads it.