Fixinguru CRM And Chatbot
Overview
A 24/7 handyman service platform for operators in Singapore. Customers chat on WhatsApp to get instant quotes and book appointments, while operators manage services, workers, and invoices from a real-time admin dashboard. The platform is live in production, has processed SGD 22,000+, and earned positive client reviews on
Google.
Tech Stack
- React 18 + TypeScript + Vite for the admin dashboard
- TailwindCSS for styling
- Express.js (Node.js) for the WhatsApp bot backend
- Twilio WhatsApp Business API as the official BSP transport
- Supabase for Postgres, Auth, Storage, and real-time subscriptions
- Redis for conversation state with 24-hour TTL
Features
- WhatsApp Chatbot. Guided conversation handles greeting, address, service selection, photo upload (1 to 3 images), and dynamic quote calculation.
- Dynamic Quote Engine. Pricing combines service-level rules and property-type multipliers. Customers can stack multiple services in one inquiry.
- Real-time Admin CRM. Inquiries, appointments, and invoice updates stream live via Supabase subscriptions.
- Worker Assignment & Calendar. 12-slot system (9 AM to 9 PM hourly) with skills-based matching and double-booking protection.
- Invoice Generation. Operators issue invoices linked to inquiries and notify customers via WhatsApp. Status tracks paid, down payment, or cancelled.
Challenges & Solutions
Conversation state at scale. Persisting every WhatsApp turn to Postgres is wasteful. Solved by holding active state in Redis with a 24-hour TTL matching the WhatsApp service window. Only finalized inquiries land in Postgres.
Reliable media handling. Twilio media URLs require basic auth and expire. The bot downloads each attachment immediately and re-uploads it to Supabase Storage so photos stay accessible.
Async webhook processing. Twilio expects an empty TwiML response within seconds. The webhook returns immediately and queues processing so slow database calls never trigger a retry storm.
Single source of truth. Both the chatbot and CRM read/write the same Supabase project, so inquiries from WhatsApp and walk-ins appear identically.
Compliance vs. iteration speed. Baileys validated flows quickly in development. Production switched to Twilio's BSP-grade API for ToS compliance and unlimited volume.
Lessons Learned
- Pick the integration that matches the deployment stage. Baileys for sandbox, official BSP for anything customer-facing.
- The 24-hour service window is a system constraint. It shapes state TTL, retry policy, and fallback templates.
- Consolidate infrastructure where you can. Supabase covers four services in one platform, freeing time for product work.
- Share TypeScript types across boundaries. Frontend and bot using the same types prevents whole categories of integration bugs.