Skip to main content

Functional Overview

Vetty is a multi-tenant SaaS that bundles three audiences into one platform:

  • Clinics (and pharmacies / retail / breeders / groomers / trainers) — full operations app.
  • Pet owners — consumer mobile + web with marketplace, payments, sharing, lost-pet collar tag.
  • Platform operators — Filament admin panel.

What Vetty does

For clinics

  • Stores clinic data, patient (pet) profiles, client (owner) contacts and medical flags.
  • Records visits with full SOAP narrative + vitals; produces discharge-summary PDFs.
  • Maintains prescriptions (with multi-line items + refill counters) and lab results.
  • Polymorphic medical attachments hang off any clinical row.
  • Schedules appointments with workflow tracking (scheduled / confirmed / checked_in / with_vet / completed / cancelled / no_show).
  • Issues estimates, converts to invoices atomically, records payments, refunds, receipt PDFs (download + email).
  • Tracks inventory of medicines with batch / expiry / kind taxonomy and append-only stock movements.
  • Manages suppliers and purchase orders with a receive-shipment flow.
  • Sends operator-initiated reminders through a driver-abstracted notification stack.
  • Audits every change.

For pet owners

  • Pet profiles with vaccinations, health journal, documents, and timeline.
  • Pet sharing — short QR codes for clinics + email-based caregiver invites for family.
  • Lost-pet collar tag — public profile reachable via slug, with toggleable lost mode.
  • Pet passport PDF + per-vaccination certificate PDFs.
  • Provider marketplace — search clinics / pharmacies / breeders / groomers / trainers by geo + business type.
  • Order requests — refill / reorder / custom orders to pharmacy + retail tenants.
  • Razorpay payments for invoices.
  • Cross-tenant statement PDF.

For platform operators

  • Tenant lifecycle (provision, suspend, plan changes).
  • Notification settings per tenant (driver creds, from address, SMS provider scaffold).
  • Cross-tenant audit log.
  • Permission catalog + role bundles.

Who uses it

RoleWhereWhat they do
System Admin/systemadmin (Filament)Provision tenants, manage plans, review audit log, support
Clinic AdminReact SPAConfigure clinic, invite staff, set permissions, edit currency / timezone
VeterinarianReact SPA + vetdoctor appRun consultations, write SOAP notes, prescribe, manage schedule (web); scan-QR-to-adopt + glance at today's schedule (mobile)
Clinic Staff (front desk, pharmacy, retail counter)React SPA + vetdoctorCheck-in / queue / billing / inventory + dispense
Pharmacy / Retail tenantReact SPA (seller view)Order-request inbox + accept / reject / fulfill
Pet OwnerReact SPA (owner web portal) + vetty appPets, vaccinations, marketplace, orders, payments, caregivers, public profile
Caregiver (family)vetty appRead-only or full access to a shared pet

Guided tour

Three pillars cover the whole product:

  1. User roles — who can do what (and the permission keys behind every action).
  2. Product domain — the entities and how they relate.
  3. Workflows — step-by-step business scenarios:

Then the Feature modules chapter walks each screen the SPA + apps ship today:

Subscription plans + premium gating

Tenants carry a subscription_plan column (trial/starter/growth/premium/enterprise) and a premium_features JSON map of unlocked capability slugs. The RequirePremium middleware reads this map to gate paywalled endpoints (e.g. SMS fan-out, marketplace listing, e-commerce storefront). The plan-to-features matrix is defined in docs and seeded by tenant onboarding.

Status transitions at a glance

EntityHappy pathOther terminal states
Appointmentscheduled → confirmed → checked_in → with_vet → completedcancelled, no_show
Invoicedraft → pending → partial → paidvoid
Reminderpending → sentdismissed, failed
Paymentpending → capturedfailed, refunded
Prescriptiondraft → active → completedcancelled
Visitdraft → completecancelled
Order requestpending → accepted → fulfilledrejected, cancelled
Pet caregiverpending → acceptedrevoked
Pet share(active)revoked, expired
Purchase orderdraft → ordered → partial → receivedcancelled