Self-hostedGo + PostgreSQLDocker ComposeReact 19 + ViteAI Invoice OCR

Run your pharmacy on a server you control

Pharma Care Prois KinetiRx’s self-hosted system of record for independent pharmacies: POS billing with GST invoices, medicine inventory with batch and expiry tracking, a due-khata credit ledger, patient records and OPD visits, and AI-powered purchase-invoice scanning — on a PostgreSQL database that never leaves your infrastructure.

$
curl -fsSL https://raw.githubusercontent.com/Raktim94/KinetiRx/main/scripts/quickstart.sh | bash

Installs Docker Desktop and git via Homebrew if either is missing.

14

Operational modules

1

Docker Compose command

0

Monthly SaaS fees

pos — invoice #KRX-10482
Paracetamol 500mg139
Azithromycin 250mg80
ORS Sachet80
Cetirizine 10mg104
Total (incl. GST)₹486.00

Due-khata

Ramesh Traders

₹2,140 due

Last payment 6 days ago

  • Self-hostedRuns on hardware you control
  • PostgreSQLYour data, your database
  • No SaaS subscriptionNo recurring per-shop fee
  • Go + Gin backendJWT auth, bcrypt passwords
  • Docker ComposeOne command deploy
  • Optional AI OCRWorks without it, too
AI Invoice OCR

Stop retyping purchase bills into inventory

A distributor’s purchase bill arrives as a photo or a PDF, not clean data. Inward OCR reads it — medicine name, batch number, expiry date, quantity, rate — and stages the rows directly into your inventory for a quick review instead of a manual line-by-line entry.

It runs on Google Gemini, using an API key you provide — that’s the one part of KinetiRx that talks to an external service, and only when you’ve configured a key. Without one, Inward OCR falls back to the standard manual entry form; every other module keeps working exactly the same either way.

  • Extracts line items, not just a total — batch and expiry included
  • Staged for review before anything commits to stock
  • Optional — bring your own Gemini key, or skip it entirely
inward-ocr — purchase-bill.pdf

Scanned bill

Amoxicillin 500mg

AMX-2291 · exp 11/2027 · qty 120

Insulin Glargine

INS-0087 · exp 03/2026 · qty 18

Metformin 500mg

MET-5510 · exp 09/2027 · qty 300

Extracted rows

Modules

Every counter workflow, one system of record

AI invoice OCR and the due-khata ledger get their own sections below — here’s the rest of what runs day to day.

  • POS billing with GST invoicing

    Point-of-sale checkout that produces a proper GST invoice — not a handwritten slip. Built for the counter, not adapted from a generic retail register.

  • Patient records & OPD visits

    Patient profiles with visit history, purchase history, and blood-test tracking, plus outpatient visit scheduling and follow-up reminders for pharmacies that run a counter clinic.

  • Medicine inventory & stock ERP

    Batch and expiry tracking, distributor records, and lab-test stock alongside medicines — the parts of running a pharmacy that a spreadsheet quietly gets wrong over time.

  • Daily sales & cash reconciliation

    A real closing register: opening cash, denomination counts, the cash/UPI/card split, and the closing difference — the end-of-day step spreadsheets skip.

  • Medicine orders & distributors

    Track what needs reordering and what's already on order from which distributor, instead of catching a stock-out at the counter.

  • Expense tracking

    Log day-to-day shop expenses by category, so the P&L picture doesn't live only in a notebook by the till.

  • Employee roles & permissions

    Role-based staff accounts with per-tab permissions, enforced server-side on every request — not a client-side toggle a browser console can bypass.

  • Invoice settings

    Store letterhead, GST and drug-license numbers, invoice numbering and retention policy, and printer configuration — set once, applied to every bill.

Due-Khata

What “due-khata” means, for readers outside India

Khata is Hindi for a running account book; udhaaris credit extended on trust. Together, “due-khata” is the informal tab a huge share of Indian pharmacies still keep on paper for regular customers. KinetiRx digitizes exactly that relationship — nothing more exotic than a ledger the counter can actually search.

  1. 1

    A regular customer buys on credit

    Common at Indian pharmacy counters — a trusted customer takes their medicine now and settles the bill later, sometimes across several visits.

  2. 2

    The due is logged against their name

    No more a page in a notebook that only one staff member can read — the amount, date, and items are attached to the customer's record.

  3. 3

    Partial payments update the balance

    Every rupee paid back is recorded with a timestamp, so the running balance and the full payment history are always current and auditable.

Interface

A system, not a spreadsheet

Real screens from a running KinetiRx instance — dashboard, counter billing, inventory, patients, and the due-khata ledger.

dashboard & analytics
KinetiRx Dashboard & analytics screen

Today's sales, drawer cash, stock valuation, and 7-day financial flow at a glance

pos billing
KinetiRx POS billing screen

Counter checkout with strip/loose dispensing and live GST invoice totals

inventory & stock
KinetiRx Inventory & stock screen

Batch and expiry tracking, rack location, and distributor tracking

patients
KinetiRx Patients screen

Patient profiles with visit history, dues, and doctor assignment

due-khata
KinetiRx Due-khata screen

Patient credit ledger with outstanding dues and WhatsApp reminders

Why self-hosted

The pharmacy's data belongs at the pharmacy

Your data stays on your server

Sales, patient records, and dues live in a PostgreSQL database you run — not a vendor's multi-tenant cloud. No account rep can see it, export it, or lose it in a breach that isn't yours.

No recurring SaaS fee

There's no monthly per-shop charge and no feature paywall on top of your own deployment. The cost is whatever it costs to run the server — a spare PC, a NAS, or a small VPS.

Works without a cloud dependency

The core system — billing, inventory, patients, due-khata — runs entirely on your local network with no external service in the loop. AI invoice OCR is the one optional exception, and it's opt-in.

You control the upgrade path

Pull a new image and redeploy on your schedule, not a vendor's. Nothing changes under you between one login and the next.

Deploy

Three steps, one Docker Compose command

The stack is PostgreSQL, the Go backend, and an nginx-served frontend — three containers, one compose file. A CasaOS App Store manifest (x-casaos v2) is included in the repository for NAS owners; it isn’t published to the CasaOS store yet, but the manifest is ready to submit, and plain Docker Compose works on a CasaOS box today.

STEP 1

Clone the repository

Get the source onto the machine that will run it — a spare PC, a home server, or a VPS.

$git clone https://github.com/Raktim94/KinetiRx.git
$cd KinetiRx
STEP 2

Configure secrets

Copy the example env file and set a Postgres password, a JWT signing secret, and the first admin password. A Gemini API key is optional — add it later to enable AI invoice OCR.

$cp deploy/.env.example deploy/.env
# edit deploy/.env: POSTGRES_PASSWORD, JWT_SECRET, KINETIRX_ADMIN_PASSWORD
STEP 3

Start the stack

One command brings up PostgreSQL, the Go backend, and the nginx-served frontend together. Migrations run automatically on first boot.

$docker compose -f deploy/docker-compose.yml --env-file deploy/.env up -d --build

Full environment variable reference and the REST API contract live in the repository’s README and API docs.

Compare

KinetiRx vs. a SaaS subscription vs. a spreadsheet

FeatureKinetiRxHosted SaaSSpreadsheet
Ongoing costYour server onlyMonthly subscriptionFree
Data stays on your server
GST-compliant POS billing
Batch/expiry inventoryPaid add-onManual
Due-khata credit ledgerRareManual
Patient records & OPDPaid tier
AI invoice OCROptional (Gemini)Rare
Role-based staff accounts
No vendor lock-in

Comparisons reflect typical hosted-SaaS pharmacy software; specific vendors vary.

FAQ

Common questions

KinetiRx (Pharma Care Pro) is built and maintained by NODEDR INFOTECH PRIVATE LIMITED. It is self-hosted software with no current open-source license — the source is visible on GitHub, but reuse or redistribution should go through the maintainer.

Official website: www.nodedr.com

Run your pharmacy on infrastructure you own

Clone the repository, run one Docker Compose command, and your data never leaves your server.