Inspiration

There is almost no software for running a medical practice in Venezuela. The few options are desktop programs from a decade ago or hospital systems no solo doctor can afford. Most specialists still keep patient records in paper folders, schedule appointments in a spiral notebook, and send follow-ups over WhatsApp — not by choice, but because nobody ever built anything for them.

Privacy is absent from the conversation too. Venezuela has no data-protection law like the US has HIPAA — no rules about who can see a patient's file or whether access is logged. I have worked under US standards of security and privacy, and Dirumed's thesis is that those standards belong in a product for every doctor — not only in hospital software. Affordable enough to start with, designed to grow with the practice, and never dropping the guarantees that make patient records trustworthy.

The smallest unit of healthcare deserve software built for its size, its language, and its reality.

What it does

Dirumed is practice software a solo doctor can run alone. Patient charts. Consultations built on per-specialty exam templates the doctor designs. Prescriptions against a shared and private vademecum, an ICD-11 diagnosis catalogue, lab and imaging orders. Scheduling with public booking links. Reports and certificates on clinic letterhead, frozen at issue. And a free patient portal: records, documents, appointments, family members, a personal access log, and patient-controlled sharing grants to other doctors.

Web, iOS and Android from one codebase. Spanish first, English second.

Five AI surfaces, all Gemini, all built on one rule — the model drafts, the doctor decides:

  1. Clinical brainstorm — differentials, workup and questions to ask, stored for review or dismissal, never auto-applied.
  2. Ambient scribe — dictation becomes a structured consultation draft (complaint, vitals, notes, prescription lines, ICD suggestions) the doctor accepts field by field.
  3. Report drafting — informes médicos, referrals and certificates drafted from the visit; the doctor signs.
  4. Admin assistant — chat over the practice's own schedule and history through server-side tools.
  5. Patient document explanation — the single patient-facing surface: a plain-language, explicitly educational explanation of a document the patient already holds.

How we built it

A Vue 3 + Vite SPA wrapped by Capacitor for iOS and Android, served by Firebase Hosting. Every byte of patient data goes through one Cloud Function — a Hono router — because firestore.rules is deny-all on purpose. That single gateway is the only place that can audit-log reads (not just writes), validate every request against a shared schema, and enforce per-clinic scoping.

AI runs behind a provider seam. GeminiProvider calls gemini-2.5-flash; gemini-2.5-flash-lite runs a cheap classifier gate. A mock provider boots offline with no API key, which is what makes automated testing possible.

Built by one person with a fleet of coding agents — Claude Code, Google Antigravity, Kiro — governed by project docs stating the rules an agent may not break: patient data only through the gateway, schemas in one place, soft deletes only, no hardcoded strings. The architecture is strict partly because strict rules are the ones an agent can be held to.

Challenges we ran into

Auditing everything on a serverless budget. HIPAA wants read access logged. Client Firestore SDKs cannot do that, at any price. Deny-all rules plus a single API gateway was the only honest answer, and it constrained every feature built after it.

Making AI safe in a clinical product. Symptom checkers and triage bots are banned in this codebase — highest harm, highest regulatory risk. The patient document explanation is the one reviewed exception, and it is fenced: an educational-only prompt contract, a classifier that rejects non-medical uploads before the capable model sees anything, one summary per document, a daily cap, and a disclaimer stored on every result.

Building and selling at the same time, alone. A one-person operation has to ship features, onboard pilot doctors, answer support messages at 7am, write marketing copy, and record demo videos — all from the same hours. The temptation is to keep building forever because the code is comfortable; the discipline is knowing that an unmarketed product helps nobody. Every week is a negotiation between making the product better and making sure anyone knows it exists.

Pricing that does not fight the security model. Per-seat pricing pays a clinic to share one login, and a shared login destroys the audit trail the whole product rests on. So tiers meter active patients instead, and staff seats are free.

Accomplishments that we're proud of

The product works — not just in a demo. A doctor is running his entire practice on Dirumed today: real patients, real consultations, real prescriptions. Beyond that, we have a clean CI/CD pipeline with integration and end-to-end tests that catch regressions before they ship. We leverage AI agents heavily for development, always with human review — strong steering files and project docs keep the output consistent. And we listen: every feature decision in the last month came from a conversation with the pilot doctor using it daily.

What we learned

That AI-assisted development at speed requires discipline, not just prompts. The breakthrough was giving agents stricter guardrails: detailed steering files, architecture docs as machine-readable rules, and a CI pipeline that rejects anything that breaks the contract. Slop disappears when the agent knows what good looks like. On the business side, a single engaged user teaches you more than a hundred hypothetical ones — listening early is cheaper than rebuilding later.

What's next for Dirumed

We are in negotiations with an established medical equipment distributor in Venezuela to promote the product at scale — a partner with relationships with thousands of private-practice doctors. Beyond distribution: template generation (describe a specialty exam in plain Spanish, get a form), paper-record photo import, and a second country — nothing country-specific is hardcoded, so expansion is configuration, not a fork.

Built With

Share this project:

Updates