Skip to content

Latest commit

 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Openfront Pharmacy

Deploy with Vercel

Deploy on Railway

Openfront Pharmacy is a self-hostable pharmacy operations and customer-commerce application. It separates eligible public shopping from prescription intake, pharmacist review, and dispensing. Pharmacy teams manage patients, prescriptions, fills, inventory lots, recalls, cold-chain records, orders, payments, and fulfillment.

Documentation: docs.openship.org/docs/openfront/pharmacy

Demo

Storefront pharmacy.openship.org
Dashboard pharmacy.openship.org/dashboard

Learn more →

Documentation →

The Openfront Ecosystem

Every Openfront is open source and self-hostable. Try any of them on its live demo.

Product For Repository Demo Docs
Openfront E-commerce Online store: catalog, checkout, orders, fulfillment openfront e-commerce.openship.org Docs
Openfront Restaurant Online ordering, POS and kitchen display openfront-restaurant restaurant.openship.org Docs
Openfront Grocery Grocery ordering, lots, expiry and pickup openfront-grocery grocery.openship.org Docs
Openfront Gym Memberships, classes, check-in and billing openfront-gym gym.openship.org Docs
Openfront Hotel Reservations, front desk, housekeeping, folios openfront-hotel hotel.openship.org Docs
Openfront Rental Short-term rental bookings and calendars openfront-rental rental.openship.org Docs
Openfront Salon Appointments, stylists and services openfront-salon salon.openship.org Docs
Openfront Barbershop Bookings, walk-ins and barbers openfront-barbershop barbershop.openship.org Docs
Openfront Coffee Shop Café ordering and counter POS openfront-coffeeshop coffee-shop.openship.org Docs
Openfront Real Estate Listings, showings and transactions openfront-realestate real-estate.openship.org Docs
Openfront Dealership Inventory, test drives, deals and service openfront-dealership dealership.openship.org Docs
Openfront Vape Age-gated retail with compliance controls openfront-vape vape.openship.org Docs
Openfront Convenience Convenience store POS and inventory openfront-convenience convenience.openship.org Docs
Openfront Collectibles Graded items, consignment and provenance openfront-collectibles collectibles.openship.org Docs
Openfront Cannabis Dispensary menu, packages and recalls openfront-cannabis cannabis.openship.org Docs
Openfront Pharmacy (this repository) Prescriptions, inventory lots and pickup openfront-pharmacy pharmacy.openship.org Docs
Openfront Med Spa Treatments, consents and memberships openfront-medspa medspa.openship.org Docs
Openfront Construction Projects, bids, change orders and crews openfront-construction construction.openship.org Docs
Openfront Law Firm Matters, intake, time and billing openfront-law-firm law-firm.openship.org Docs
Openfront Scheduling Booking pages for appointment businesses openfront-scheduling scheduling.openship.org Docs
Openfront Social Creator community and posts openfront-social social.openship.org Docs
Openfront Rideshare Rides, drivers and dispatch openfront-rideshare rideshare.openship.org Docs
Openfront Airline Flights, booking and passenger operations openfront-airline airline.openship.org Docs
Openfront Hospital Appointments, patients and care teams openfront-hospital hospital.openship.org Docs
Openfront Sportsbook Markets, bets and results openfront-sportsbook sportsbook.openship.org Docs
Openfront Financial Accounts, portfolios and advisory openfront-financial financial.openship.org Docs
Openfront Analytics Privacy-friendly website analytics analytics analytics.openship.org Docs
Openship Order routing from sales channels to fulfillment openship os.openship.org Docs
Marketplace Shop across Openfront stores marketplace marketplace.openship.org Docs

Core Features

Admin Dashboard

Manage patients, recalls, store settings, integrations, pos, audit, inventory, orders, prescriptions, prescribers, credentials through dedicated dashboard workspaces and permission-controlled data screens.

Storefront

Public routes cover /products, /cart, /checkout, prescription intake, refills, transfers, pickup, delivery, and order status. Only products eligible for public carts belong in customer checkout; prescription work has its own review workflow.

Prescription Review & Dispensing

Record prescription intake, patient and prescriber information, clinical safety reviews, human approvals, fill reservations, dispensing labels, refill requests, and transfers.

Inventory Safety

Receive and adjust location lots, record movements and temperature excursions, quarantine recall-affected inventory, and record human disposition.

Orders & Fulfillment

Process eligible product orders and controlled fulfillment transitions. Payment sessions, Stripe integration, cash operations, refunds, and recovery records are distinct from pharmacist authorization.

Architecture

Technology Stack

  • Frontend: Next.js 16 with App Router and React 19.
  • Backend: KeystoneJS 6 with a GraphQL API.
  • Database: PostgreSQL with Prisma ORM.
  • Styling: Tailwind CSS 4 and shared shadcn/ui components.
  • Authentication: Password-based user accounts and session-based access with role capabilities.

Application Structure

openfront-pharmacy/
├── app/                    # Public pages, dashboard routes, and HTTP endpoints
├── features/
│   ├── keystone/           # Backend models, access rules, and GraphQL workflows
│   ├── platform/           # Operator workspaces and onboarding
│   ├── storefront/         # Public application components and screens
│   └── dashboard/          # Authentication and shared dashboard shell
└── components/             # Shared UI components

Data Models

The model registry and Prisma schema cover:

  • Organizations, locations, memberships, patients, prescribers, and consent.
  • Prescriptions, items, reviews, clinical safety evidence, approvals, fills, and labels.
  • Drug references, inventory lots, movements, recalls, and temperature excursions.
  • Carts, orders, fulfillment, payment sessions, webhook events, machine credentials, and outbox records.

Getting Started

Prerequisites

  • Node.js 22, compatible with the package requirements and Next.js 16.
  • A PostgreSQL database you can migrate.
  • npm.

Setup

  1. Clone and install dependencies:

    git clone https://github.com/openshiporg/openfront-pharmacy.git
    cd openfront-pharmacy
    npm install
  2. Configure environment variables:

    cp .env.example .env

    Review the example configuration and replace its placeholders. Keep only the local settings you need; do not copy production-mode or infrastructure examples unchanged.

    DATABASE_URL=postgresql://user:password@host/database
    SESSION_SECRET=replace-with-a-new-private-random-secret

    Generate the session secret with openssl rand -hex 32; use the generated value, not the placeholder. Never commit .env.

    Review runtime configuration for additional application settings before building or deploying. Configure enabled integrations separately; the two values above are not a complete production configuration.

  3. Start development server:

    npm run dev

    The development script prepares the backend schema, applies checked-in migrations, and starts Next.js.

  4. Access the application: Open the URL npm run dev prints, then use these paths:

    • Public application: /
    • Admin dashboard: /dashboard
    • Customer account: /account
    • GraphQL API: /api/graphql
  5. Create your first admin user: Visit /dashboard/init on an empty database to create the initial administrator, then sign in to the dashboard.

  6. Run application onboarding: Run pharmacy onboarding and establish organization and location memberships. Production initial provisioning is explicitly gated; follow the onboarding implementation for its one-time setup requirements. Review pharmacist and prescriber credentials, patient access, catalog eligibility, fill policies, and inventory before using prescription workflows.

Development Commands

  • npm run dev - Prepare the backend schema, apply migrations, and start Next.js development.
  • npm run build - Build the backend and Next.js for production; does not apply migrations.
  • npm start - Start the production Next.js server.
  • npm run migrate:gen - Prepare the schema and generate/apply development migrations.
  • npm run migrate - Apply checked-in Prisma migrations.
  • npm run lint - Run the repository's ESLint script.
  • npm run typecheck - Run the configured TypeScript check.
  • npm run test - Run the repository's configured test suite.
  • npm run worker:outbox - Run the configured outbox delivery entry point.

Use a disposable development database for migration generation. Review the script before running it against any existing data.

Pharmacy Integrations

The workflow registry includes prescription, inventory, recall, fulfillment, payment, and external-integration commands. Stripe is the registered payment adapter. Configure external pharmacy providers explicitly; provider records alone do not establish live e-prescribing or insurance connectivity.

Documentation

See the Openfront Pharmacy documentation for the application guide. The backend models, registered business workflows, access rules, and application routes document the implementation in this repository.

Security & Permissions

Role-Based Access Control

  • canAccessDashboard - Access dashboard.
  • canManageInventory - Manage inventory.
  • canReviewPrescriptions - Review prescriptions.
  • canDispenseMedications - Dispense medications.
  • canViewPatientPrivateData - View patient private data.
  • canManageRecalls - Manage recalls.
  • canApproveConsequentialActions - Approve consequential actions.

Security Features

  • Session-based authentication for signed-in users.
  • Backend list access and workflow authorization, rather than dashboard visibility alone.
  • Capabilities are combined with organization and location membership filters. Private patient data, prescription review, dispensing, and consequential human approvals have separate permissions; machine access does not replace pharmacist authority.

Review the access implementation and individual workflow checks before extending permissions.

Platform Components

Admin Platform (/dashboard)

  • Patients: /dashboard/platform/patients.
  • Recalls: /dashboard/platform/recalls.
  • Store Settings: /dashboard/platform/store-settings.
  • Integrations: /dashboard/platform/integrations.
  • Pos: /dashboard/platform/pos.
  • Audit: /dashboard/platform/audit.
  • Inventory: /dashboard/platform/inventory.
  • Orders: /dashboard/platform/orders.
  • Prescriptions: /dashboard/platform/prescriptions.
  • Prescribers: /dashboard/platform/prescribers.
  • Credentials: /dashboard/platform/credentials.

Storefront Experience

Public routes cover /products, /cart, /checkout, prescription intake, refills, transfers, pickup, delivery, and order status. Only products eligible for public carts belong in customer checkout; prescription work has its own review workflow.

Record prescription intake, patient and prescriber information, clinical safety reviews, human approvals, fill reservations, dispensing labels, refill requests, and transfers.

Deployment

Production Deployment

The Vercel button imports this application's own repository. Provision PostgreSQL and configure the application's complete runtime requirements, storage, mail, and enabled providers before building. Importing the source does not configure these services or grant regulatory approval.

Build the application and apply checked-in migrations as a release step before starting the server. Back up existing data before migration.

npm run build
npm run migrate
npm start

The included Railway configuration defines this app's build and startup lifecycle. Provision services and secrets separately.

Scaling Considerations

Run npm run worker:outbox in a supervised process with its worker credentials and application endpoint configured. Keep location inventory, fill reservations, and approval state in the shared database.

Contributing

Use the development commands above when preparing changes. Keep model changes and their migrations together, and describe workflow and permission changes in pull requests.

License

No top-level license file or package license declaration is included in this repository.

Support


Built with Next.js and KeystoneJS.