Medora — pharmacy admin & storefront template
NEXT.JS TEMPLATE · ADMIN + STOREFRONT

The pharmacy back office and the shop it runs, in one codebase.

11 admin screens for batches, prescriptions and orders. 8 storefront screens. One typed data model, so an order placed in the shop shows up in the admin with stock already adjusted.

Framework
Next.js 14 App Router, static export
UI
React 18, Tailwind CSS, Radix primitives
Data
Typed seed data + a single reducer
Themes
3 skins × light and dark
Tests
24 unit tests, Playwright e2e suite
Screens
24, all responsive
medora-pharmacy.demo/admin/dashboard
WORKSPACE > OVERVIEW

Good morning, Alex

Here is what is happening at your pharmacy today.

Open full screen
Total revenue
$20,629.20
↑ 7.0% vs. previous period
Total orders
405
↑ 10.1% vs. previous period
Low-stock items
06
Needs attention
Prescriptions pending
05
Review queue

Recent orders

All orders →
#MD-12590 · Evelyn Cooper
Shipped$152.80
#MD-12589 · Benjamin Scott
Pending$72.30
#MD-12588 · Harper Ellis
Pending$14.45

Inventory health

Above reorder level71%

15 of 21 catalog items above their reorder threshold.

Manage batches
ONE DATA MODEL

Place an order in the shop. Watch it arrive in the admin.

Both apps read and write the same typed store, persisted to localStorage. Try it: check out in the storefront, then open the order queue.

  1. 01Customer adds 2 × bandages/shop/product
  2. 02Checkout creates order MD-DEMO-…/shop/checkout
  3. 03Order lands in the pending queue/admin/orders
  4. 04Batch stock drops by 2/admin/inventory
  5. 05Revenue updates in reports/admin/reports
ADMIN WORKSPACE

For the people behind the counter.

Track stock by batch and expiry, review prescription documents, move orders through fulfillment and see what sells on which weekday.

  • BatchesLot numbers, expiry dates, physical vs. available units
  • Rx queueApprove, or reject with a required note
  • OrdersStatus transitions and a printable invoice
  • Reports7, 30 and 90-day revenue views
Open the admin
STOREFRONT

For the people at home.

A calm catalog grouped by where products live in the house. Medicines show their full label, and prescription items are clearly kept apart.

  • CatalogSearch, category, price and stock filters
  • MedicinesDirections, warnings and per-order pack limits
  • CartStock-aware quantities, free-delivery meter
  • CheckoutThree steps, validated, no gateway required
Open the storefront
THEMES

Three skins, each with a light and dark mode.

Every color is a token in src/styles/tokens.css. Pick one below and the whole page follows.

ALL SCREENS

24 screens, every one of them live.

/admin/dashboard

Overview

Revenue and order KPIs, 30-day trend chart, low-stock and pending-review alerts.

/admin/products

Medicines

Sortable catalog with category, stock and prescription filters, plus CSV export.

/admin/products/new

Add product

Product form with pack variants, pricing and an opening stock batch.

/admin/inventory

Inventory

Batches with lot numbers, expiry dates, physical vs. available stock and an adjustment log.

/admin/orders

Orders

Order list with status filters and transitions from pending to delivered.

/admin/orders/view

Order detail & invoice

Line items, customer, status history and a printable invoice.

/admin/prescriptions

Prescription review

Queue of sample prescription documents with approve and reject-with-note actions.

/admin/customers

Customers

Customer list and profiles with order history and total spent.

/admin/suppliers

Suppliers

Supplier directory with contacts, lead times, supplied products and unit costs.

/admin/reports

Reports

7, 30 and 90-day revenue, weekday sales split and top products, built with Recharts.

/admin/settings

Settings

Store details, currency, notification preferences and a reset for the demo data.

/shop

Storefront home

Hero, category grid, an over-the-counter medicines row and a featured edit.

/shop/products

Shop

Catalog with search, category, price and stock filters, sorting and pagination.

/shop/product

Medicine page

Active ingredient, directions and warnings tabs, pack limits and live stock.

/shop/product

Product page

Pack-size selector with live pricing, stock count and specifications.

/shop/cart

Cart

Quantity controls, stock limits and a free-delivery progress meter.

/shop/checkout

Checkout

Three-step checkout with address validation; creates a real order in the admin.

/shop/about

About

How the catalog is organized, plus delivery rates.

/shop/contact

Contact

Contact form with client-side validation and store hours.

/demos

Theme gallery

All three skins side by side in light and dark mode.

/auth/login

Sign in

Split-layout sign-in with one-click demo credentials. Register and reset screens included.

/docs

Documentation

In-app guide to tokens, components and where to connect a backend.

/404

404

Not-found page with links back to the dashboard and storefront.

/server-error

500

Server-error page with retry, a dashboard link and a storefront link.

FOR DEVELOPERS

Clean seams for your own backend.

src/
├─ app/                 routes (App Router, static export)
├─ features/            one folder per screen
├─ components/ui/       Radix-based primitives
├─ lib/
│  ├─ domain.ts         stock, expiry, pricing rules
│  └─ reducer.ts        every mutation, in one place
├─ data/seed.ts         typed sample records
└─ styles/tokens.css    colors, radii, shadows
src/lib/domain.ts
Available stock, expiry windows, reorder alerts and variant pricing as pure functions. No React imports, covered by 24 unit tests.
src/lib/reducer.ts
All writes go through one reducer. Swap its cases for REST or GraphQL calls and the screens keep working.
src/styles/tokens.css
RGB channel tokens for each skin and mode, so Tailwind opacity modifiers like bg-brand/10 just work.
docs/index.html
Offline HTML documentation covering setup, theming, deployment and backend integration.

Open the admin, place an order in the shop, watch it arrive.

Start with the admin