MassApp is a Vite + React PWA for launching WhatsApp outreach. Paste your list, write the message once, and open chats in bulk.
- Cleans phone numbers and builds ready-to-send WhatsApp links.
- Supports WhatsApp Web, api.whatsapp.com, and template modes.
- Imports and flags contacts via Supabase with health metrics.
- Saves reusable message templates and personal details.
- Offers optional AI suggestions to personalize copy per contact.
- Node.js 18+ (or Bun 1.1+).
- Browser already logged into WhatsApp Web with pop-ups allowed.
bun install # npm / pnpm / yarn also works
bun run dev # http://localhost:5174Build and preview production:
bun run build
bun run preview- Open the app in the browser that has WhatsApp Web active.
- Paste one phone number per line; formatting is auto-normalized.
- Draft the message body and pick the delivery mode.
- Click Open WhatsApp Tabs and approve the pop-up batch if prompted.
- Use the preview list as a fallback whenever the browser blocks pop-ups.
The optional BrowserOS companion keeps MassApp in sync while you handle the WhatsApp tab.
- Single-click a Pending contact to auto-fill the launcher.
- Launch the WhatsApp tab, send the message, then close the tab.
- Double-click the same contact to mark it Sent and expose the next pending row.
- If anything stalls, enable pop-ups, verify the Pending filter, and let WhatsApp finish loading before sending.
-
Copy the sample environment file:
cp .env.development .env.local
Variable Description VITE_SUPABASE_URLSupabase project REST endpoint VITE_SUPABASE_ANON_KEYPublic anonymous key for client SDK calls SUPABASE_SERVICE_ROLE_KEYService role key used only by server utilities SUPABASE_DB_PASSWORDOptional helper for local Postgres access VITE_ZAI_API_KEYZ AI chat API key (store locally, never commit) VITE_ZAI_CHAT_URLOptional override for the chat completion endpoint VITE_ZAI_MODELOptional model alias (default GLM-4.7-Flash) -
Run the SQL in supabase/schema.sql on a fresh Supabase project.
-
Provision a Supabase Auth user account for MassApp sign-in.
-
Update icons or manifest assets in
public/as needed.
-
Add credentials to
.env.local:echo "VITE_ZAI_API_KEY=your-zai-key-here.your-zai-secret" >> .env.local
Override
VITE_ZAI_CHAT_URLorVITE_ZAI_MODELif your deployment differs. -
Restart the dev server so the environment variables load.
-
Select contacts, prepare a template or custom text, and click the ⚡ button above the composer.
-
Review the suggestion and Apply to replace the current draft.
No AI content is stored unless you accept it.
.
├── public/ # Static assets and manifest
├── src/
│ ├── App.jsx # Launcher UI and core logic
│ ├── components/ # UI building blocks
│ ├── lib/ # Supabase + AI helpers
│ └── main.jsx # App entry point
├── package.json # Scripts and dependencies
├── tailwind.config.js # Tailwind configuration
├── vite.config.js # Vite + PWA setup
└── supabase/ # Database schema
- WhatsApp still requires manual confirmation; unattended sending is unsupported.
- Browsers may block pop-ups; open links from the preview list when that happens.
- Scheduling and delivery analytics are out of scope to keep the tool lightweight.
Released under the MIT License.
"Whoever loves discipline loves knowledge, but whoever hates correction is stupid."