1 / 1326
Technologies
15
Key features
13
Screenshots
Live
In production
Overview
MedicsBD is a telemedicine service in Bangladesh. Patients book a doctor, pay with a local method, join a video call from their phone and get a prescription in Bangla. Agents in villages and garment factories book visits for people who can't do it themselves. The platform is live at app.medicsbd.com.
The old version was a Laravel app: Blade templates, jQuery, Jitsi for video and a MySQL database that had grown to 64 tables. It worked, but it was slow to change and couldn't support a proper mobile app. In September 2026 I rebuilt the whole thing on a modern stack, moved every record across, and built native Android and iOS apps on the same API.
What the platform does
- Patients find a doctor, pick a slot, pay, join the video call and keep their prescriptions, reports and health history in one place. They can add family members to their account.
- Doctors set their schedules, see today's queue, call patients, write prescriptions from templates and withdraw their earnings from a wallet.
- Agents (companies and remote field workers) register patients, book on their behalf and run a "kiosk" call from a shared device. Their commission is split automatically.
- Admins and desk doctors run the clinic from a dashboard: appointments, payments, withdrawals, users, packages, subscriptions, SMS and email templates, and reports.
- Factory and village programmes: worker lists with CSV import and QR invites, sick-leave certificates, lab orders, deliveries, health camps, SOS alerts, education sessions, complaints and daily HSE reports.
The rebuild
Stack. The web app is Next.js 16 with React 19, Tailwind and shadcn/ui. The API is Express 5 in TypeScript with Prisma and PostgreSQL, Redis and BullMQ for SMS, email and push jobs, and Socket.IO for chat and live notifications. One API serves the website and the mobile app.
Video calls. Jitsi and Zoom were replaced with a self-hosted LiveKit server. When a doctor starts a call the patient's phone rings through a live notification, web push, and SMS as a fallback. There is a device check before every call and a kiosk mode for agents.
Money. Payments go through aamarPay, PortWallet, manual bKash/Nagad/Rocket transfers or the user's wallet. Each paid visit is split between the doctor, the agent and the platform. I found and closed a race where a gateway redirect and its server callback could both confirm the same payment and pay the doctor twice. Every confirmation now "claims" the payment first, so it runs exactly once.
Prescriptions. Doctors write prescriptions on screen and the same layout is printed to PDF with Puppeteer, the only reliable way I found to get correct Bangla text in a PDF from Node. Each PDF has a QR code that anyone can scan to check it is real. Codes printed by the old system still verify.
Symptom checker. A public tool where you tap a body area on a male or female figure, pick symptoms (in English and Bangla), answer a few questions and get the likely conditions, how urgent it is and which doctor to see. The engine was ported from the old PHP code and checked against it result by result. A WordPress plugin embeds it and the doctor list on the main medicsbd.com site.
Bangla first. All 1,200+ interface strings are in Bangla and English, the user's choice is saved to their account, and the fonts are chosen so Bangla and Latin text sit well together.
Moving without breaking anything
All 64 tables went from MySQL to PostgreSQL with a script that compares the row count of every table after the copy. Uploaded files moved to S3-compatible storage. Old password hashes still work, so nobody had to reset their password. Old links keep working too: doctor share cards and QR codes printed for clinics, store listing pages and the old admin and patient URLs all redirect to the right place. The older mobile app's API was rebuilt with the same responses, so people who haven't updated can still sign in.
Before the switch I went through the old app's routes and permissions one by one, wrote a test matrix of role against endpoint (90 API tests), and loaded every page as every role to check for errors. That audit turned up real issues: discount codes that anyone could list, sandbox payment settings that would have stayed on in production, and reports that counted early-morning Dhaka visits as the previous day.
The mobile app
The Android and iOS app is built with Expo and React Native on the same API. Patients can book, pay through aamarPay (and come back to the app after paying), join calls, chat, read and share prescriptions, and delete their account. Doctors get their day's queue, can start calls, write prescriptions on the phone, and manage patients, schedules and their wallet. It has push notifications, an offline cache, a forced-update check and runs in Bangla and English, in light and dark mode. The Android build is 28 MB and opens in about a second. The app is finished and tested on real devices. It is waiting for the clinic's Google Play and App Store organisation accounts before release.
Where it is now
The new web platform is live at app.medicsbd.com. The screenshots show the public pages (sign-in, a doctor's profile, the symptom checker) and the patient, wallet, clinic and doctor dashboards from the live system, with patient names blurred.
If you run a clinic, a health startup or any booking business on an old Laravel or PHP app that is hard to change, tell me about it. I can rebuild it, move your data safely and add a mobile app.
Key features
- Video consultations on self-hosted LiveKit, with ringing, web push and SMS fallback
- Doctor schedules, time slots and serial numbers, booked online in a few steps
- Payments through aamarPay, PortWallet, bKash/Nagad/Rocket and an in-app wallet
- Automatic revenue split between doctor, agent and platform, safe against double payment
- Prescription writer with Bangla PDF output and a QR code to verify each prescription
- Symptom checker with an interactive body map and doctor recommendation
- Real-time chat and notifications over Socket.IO
- Separate panels for admins, doctors, desk doctors, patients and field agents
- Factory and village health programmes: worker lists, sick-leave certificates, lab orders, health camps, SOS
- Full Bangla and English interface, chosen per user
- Subscriptions and health packages with expiry reminders
- Installable PWA with web push notifications
- Old Laravel links, QR cards and the old app API keep working after the move
- Android and iOS app for patients and doctors (Expo, ready for store release)
- Zero-loss migration of 64 MySQL tables to PostgreSQL, counts verified