BulkFlow SaaS WhatsApp campaigns

personal projects

Project Overview

BulkFlow: A WhatsApp Campaign Manager

Chapter 1: The Origin of BulkFlow

BulkFlow started as one of those weekend projects I built just for fun. I didn’t have a roadmap, a client, or even a launch goal. I was just curious. I wanted to explore how far I could push myself in building a modern, real-time WhatsApp campaign platform from scratch, solo.

As I dove in, I noticed how bad most existing WhatsApp marketing tools are, outdated UIs, overpriced plans, or closed ecosystems locked behind Meta partnerships. So I challenged myself: could i build my own? Something fast, clean, developer-first, and deeply integrated with the WhatsApp Business API.

That’s how BulkFlow began  as a passion project that slowly snowballed into a full campaign engine. It was never meant to be a startup. It was my playground  a way to try out technologies I liked and experiment with new ideas around contact segmentation, real-time feedback, and scalable message dispatching.

Chapter 2: What I Actually Built

Even though I never “launched” BulkFlow, I ended up building a lot more than I expected. I designed a full-stack system with a React + TypeScript frontend using Vite, styled with Tailwind CSS, Shadcn UI, and Radix UI for clean accessibility. The backend ran through Supabase for auth and DB storage, with a bit of MySQL2 and MongoDB for other workflows.

Some key features I built and tested:

  • A responsive dashboard with a live analytics overview
  • A drag-and-drop campaign scheduler
  • WhatsApp template builder with dynamic placeholders and file uploads
  • CSV import for contacts using PapaParse
  • Real-time delivery and read tracking over WebSocket
  • Contact list management with segmentation, custom fields, and import cleaning
  • Toast notifications, animated transitions, and dark/light themes

The state was managed using React Query and React Hook Form, and everything was typed strictly with Zod for validation. I also integrated Framer Motion, Lucide, Recharts, and even D3 for data visualization.

All of this was wrapped inside a modular project structure with reusable hooks, a clean folder layout (lib, config, hooks, types, etc.), and strict linting and formatting with ESLint, Prettier, and TS rules.

Chapter 3: Why I Paused It

As the project grew, so did the time it required. Building a platform like this solo with dozens of features, live data syncing, and API integration became a serious time consuming. I eventually had to admit that finishing it would demand months of focused development I simply couldn’t afford to give. Between client work, learning, and other real-world responsibilities, BulkFlow had to be paused.

But I don’t regret it. It wasn’t a failure  it was a sandbox. I learned so much by building BulkFlow: how to architect scalable campaigns, how to integrate with third-party APIs like WhatsApp, how to write reactive, animated UIs with Tailwind and Shadcn, and how to cleanly manage app-wide state in complex flows.

Even in its unfinished state, BulkFlow is one of the “complete” projects I’ve done for fun. The fact that it works, loads instantly, handles real data, and looks professional without being in production speaks to how much I invested into doing things right.

Chapter 4: What It Taught Me

BulkFlow taught me how to balance backend complexity with frontend performance. It taught me how to design an experience that feels light for the user but does heavy lifting behind the scenes.

I built a proper .env-driven environment system. I enforced authentication flows with Supabase and handled edge-case form states with Zod + React Hook Form. I even wrote custom logic to clean up imported contacts, detect duplicates, and track message activity across sessions in real time.

Here’s the stack breakdown:

  • Frontend: React, TypeScript, Vite, Tailwind, Shadcn UI
  • Auth + DB: Supabase
  • Real-Time: WebSocket, React Query
  • Validation: Zod
  • Charts & UI polish: Recharts, D3, Framer Motion, Radix
  • Contact Importing: PapaParse, custom cleaning scripts
  • Dev Tools: ESLint, TSConfig, PostCSS, Autoprefixer

I never got to build the billing system, AI reply detection, or full WhatsApp approval flow but I laid the foundation for a powerful tool. And maybe someday I’ll return to it.

Final Thoughts

BulkFlow isn’t a product i ship. It’s not something i market or monetize. It’s something I built out of curiosity  and honestly, I’m proud of how far it went. It’s a complete system under the hood, even if it’s missing a few final touches.

If you want to see what I can do when I’m just building for the joy of it  explore BulkFlow.

 

Project Details

Project status:
Paused
Tech stack:
React, TypeScript, Vite, Tailwind CSS, Shadcn UI, Radix UI, Supabase, React Router DOM, React Query, React Hook Form, PapaParse, Zod, WebSocket, MongoDB, MySQL2, Recharts, D3, Framer Motion, Lucide React, Sonner, React Hot Toast, ESLint, PostCSS, Autoprefixer, dotenv, Emotion, MUI, Date-fns