Skip to content
All work

AMARAM Kottakkal Ayurveda · Healthcare · 2026

AMARAM

Ayurveda at home: therapist matching, video consultations and prescriptions — one app for patients, therapists and doctors.

Role
Full-stack developer at Bloom IT Solutions — backend API, database design, mobile app integration & UI, admin panel, integrations and VPS deployment.
Platforms
Android · Web admin · REST API
Status
Live · actively developed
10 kmbidbidpatient

home session

  1. Assigned
  2. En route
  3. Arrived
  4. OTP verified
  5. In progress
  6. Completed
Video consult · presence lease active

Illustration of the system — not a screenshot.

PostGIS therapist-matching radius
10 km
PostGIS therapist-matching radius
Roles in one app — patient, therapist, doctor
3
Roles in one app — patient, therapist, doctor
PostgreSQL tables
56
PostgreSQL tables
Lines of TypeScript, 3 apps
~170k
Lines of TypeScript, 3 apps

Overview

Overview

AMARAM digitises an Ayurvedic clinic's two services — at-home therapy and doctor consultations. A React Native app with separate patient, therapist and doctor experiences, a Next.js admin panel, and a Node.js API on PostgreSQL + PostGIS.

The challenge

An Ayurvedic clinic runs two services that don't fit a normal booking app. Therapists travel to patients' homes, and doctors consult over video. That means finding the right nearby therapist, proving every session really happened, and settling money fairly when someone doesn't show up.

The approach

One Expo app with role-based experiences, a Next.js admin, and an Express + TypeScript API on PostgreSQL + PostGIS. Distance is real-world geography, sessions are verified with an OTP at the door and photo proof, video calls are guarded by Redis presence leases, and every rupee moves through idempotent, row-locked transactions.

Walkthrough

How it works

  1. 01

    Therapists matched by real distance

    A booking opens an assignment request. Only therapists within 10 km who are actually free — counting an admin-set travel and packing buffer — can bid. Admins can also assign directly from a distance-sorted search.

    spec · 01

    Therapists matched by real distance

    • ›ST_DWithin(geography, 10 km)
    • ›ORDER BY ST_Distance(…)
    • ›free = sessions + travel buffer
    • ›bid: Pending → Submitted → Accepted
  2. 02

    Proof at the patient's door

    Therapists move through en route → arrived → OTP check → in progress → completed. A 6-digit OTP starts and ends the session, with start and end selfies and setup photos as proof. Earnings land in their wallet automatically.

    spec · 02

    Proof at the patient's door

    • ›otp: 6 digits · 10 min · 3 tries
    • ›photo window: 20 min after verify
    • ›setup → start selfie → end selfie
    • ›earnings → wallet at admin %
  3. 03

    Video consults that survive bad networks

    Slots lock during payment and release automatically if it fails. Agora calls use server-issued tokens; a Redis presence lease stops one consultation being joined from two devices, and background jobs catch no-shows every minute.

    spec · 03

    Video consults that survive bad networks

    • ›slot: Available → Locked → Booked
    • ›agora: server-issued RTC token
    • ›presence lease: Redis · 120 s TTL
    • ›cron/1m: no-shows · reminders
  4. 04

    Prescriptions as real documents

    After the call, doctors write prescriptions and treatment plans that are rendered to PDF on the server. A doctor can recommend a therapy, and the booking remembers where it came from.

    spec · 04

    Prescriptions as real documents

    • ›puppeteer → prescription.pdf
    • ›treatment plan + recommended therapy
    • ›download: patient & doctor
  5. 05

    Fair settlements, automatically

    Every consultation is settled by who attended. A doctor no-show refunds the patient automatically; everything else goes to an admin review queue for a full or partial refund, a doctor payout, or retention.

    spec · 05

    Fair settlements, automatically

    • ›doctor no-show → auto refund
    • ›else → admin review queue
    • ›lock order: payment → appointment → slot
    • ›ref: CST-<date>-<seq>
  6. 06

    Logins that don't break on bad networks

    Mobile OTP and Google sign-in, with a separate path for doctors and therapists to register. JWT refresh rotation is tied to a server session with a short grace window — so a phone that lost a response mid-rotation stays logged in. Redis rate limits guard SMS OTP.

    AMARAM sign-in with mobile OTP, Google, and doctor/therapist registration
  7. 07

    Deployed and documented

    Running on a DigitalOcean VPS behind a cloud firewall, with Nginx, HTTPS, a systemd-managed API and PostgreSQL and Redis reachable only from localhost — plus an operations runbook for deploys, migrations and troubleshooting.

    spec · 07

    Deployed and documented

    • ›nginx · certbot (HTTPS)
    • ›systemd: api.service
    • ›postgres + redis → localhost only
    • ›runbook: deploy · migrate · debug

Launch

Store listing artwork

Marketing graphics from the Play Store listing — illustrative, not live app data.

  • Play Store artwork — Your Ayurvedic wellness companion

  • Play Store artwork — Authentic Ayurveda care

  • Play Store artwork — Consult Ayurvedic doctors online

Built with

Stack

Backend
Node.jsExpress 5TypeScriptWebSocketsZodPuppeteerPino
Data
PostgreSQLPostGISDrizzle ORMRedis
Integrations
RazorpayAgoraMSG91Google OAuthCloudflare R2Resend
Infrastructure
DigitalOceanNginxsystemdLet's Encrypt
Admin
Next.js 16React 19Tailwind CSSshadcn/uiRecharts
Mobile
React NativeExpoExpo RouterNativeWindTanStack QueryZustandAgoraFirebase FCM

Open to full-time roles & select freelance projects

Need something like this?

Email

Local time

Giridih, IN · IST

Replies within 24 hours on weekdays