DEV3 Technologies home

DEV3 Pestleby – Pharmacy POS and Stock Management Laravel Script with Batches, Expiry, Prescriptions and Branches

A self-hosted pharmacy POS and stock system on Laravel 12 and Filament 4: counter with FEFO batch picking, prescriptions with verification and labels, controlled register, purchasing and goods receipts, expiry control and multi-branch transfers. Web installer and demo data included. No mobile apps.
by DEV3 TechnologiesVerified Author(0) 0 sales 5 viewsUpdated 11 Nov 2026

Video tour. Pick a section below to browse 22 screenshots in 6 sections.

App & phone tours

Tap play to watch each app. Nothing downloads until you do.

  • Mobile web1:04

Pestleby is a pharmacy point of sale and stock system for one pharmacy business with one or more branches. Counter staff sell over the counter with the oldest-expiry batch picked for them, pharmacists capture and verify prescriptions and keep a dispensing log, the stock team receives goods with batch and expiry, and managers watch expiry, margins and stock value. It is built by DEV3 Technologies on Laravel 12 and Filament 4, and you host it yourself.

What it does

  • A fast counter. Scan or search by brand or salt, FEFO batch picking with a reasoned override, age checks for restricted items, cash with change, card (recorded) and split payments, held sales, returns, voids with a manager, an 80 mm receipt printed from the browser, and shortcuts for search, quantity, pay and hold.
  • Prescriptions. Capture with an image, match items to products, substitute by salt with a consent note, check alerts from rules your pharmacy maintains, verify, prepare with batches picked, print labels, release, supply in parts with an owing slip, count repeats and validity.
  • Controlled register. An append-only register with a running balance that must equal the shelf, a witness confirmed by PIN for supplies and destruction, and corrections as new entries.
  • Purchasing and receiving. Reorder suggestions, purchase orders with a PDF, goods receipts that capture batch, expiry, bonus units and cost per unit, supplier returns and credits.
  • Expiry control. Near-expiry lists at 90, 60 and 30 days, expired batches quarantined, recalls that quarantine a batch at every branch, write-offs, and the Expiry Shelf on the dashboard.
  • Branches. Staff granted per branch, owners and auditors across all, transfers per batch with short-receipt discrepancies, cycle counts, counter devices pinned to a branch.
  • Reports and API. Sales by branch and hour, margin, top sellers, prescription volume, near-expiry value, dead stock, stock value, supplier performance, shift variances and register balances with CSV export; a REST API with scoped keys, an OpenAPI file and signed webhooks.

What you get

Source code, a web installer with demo data (a three-branch group with a warehouse, 28 staff, a 400-item fictional catalogue and four months of trading), documentation, and six months of support.

Good to know

  • A pharmacy POS and stock system for one pharmacy business with one or more branches. It is not a SaaS for many pharmacies.
  • Prescriptions are captured and logged by your staff. There is no e-prescription network, insurance or claims integration and no government reporting, and it is not certified by any pharmacy regulator.
  • No drug-interaction or drug-information database is bundled. The allergy and interaction alerts come from a list your pharmacy maintains, so they are only as good as the rules you keep.
  • The controlled-items register is a record-keeping aid; check your local regulations.
  • Barcode scanners work as keyboard devices. Receipts print through the browser; no ESC/POS driver is bundled. Card terminals are not integrated and the counter needs a connection.
  • Payments, mail and SMS are simulated until you configure real drivers.

How it's built

Architecture, stack, key decisions and the quality gates DEV3 Pestleby passed before release.

The engineering behind Pestleby: every stock change is one movement under a row lock, batches are picked oldest-expiry first, the controlled register must equal the shelf, and every branch sees only its own books.

The problem it solves

A pharmacy counter looks like a barcode and a total until two tills sell the last units of one batch, a batch is recalled while it is in a cart, a count is posted while sales continue, or a register and the shelf disagree. Each has to end with consistent stock and records, and one branch must never see another's data.

Architecture and approach

Pestleby is a Laravel 12 application with a Filament 4 back office and hand-built counter and dispensary screens. Every stock change is one movement written with its stock row under a lock, taken in a fixed order, so stock always equals the sum of its movements and never goes negative. Sales pick the oldest sellable batch, recalls and expiry quarantine a batch everywhere at once, and the controlled register is written in the same transaction and must match the shelf or the step is refused. A cycle count is posted against the movements since its snapshot, so sales made during a count are not subtracted twice. Branch isolation is enforced at the model scope and again at every service boundary, and a generated test walks each branch route and service with another branch's ids.

Quality gates and results

The release passed seven gates, including a headless smoke test of the panel, counter and dispensary and race checks on MySQL for the last units of a batch, parallel goods receipts, a recall against a sale, parallel controlled supplies, parallel completion of one held sale and gapless sale numbers. The reconciliation command passes on the demo data: four months of trading across three branches and a warehouse.

Tech stack

Area Technologies
Application Laravel 12, Filament 4, Blade, REST API
Data MySQL 8, SQLite
Frontend Tailwind CSS 4, Vite
Quality Pest, Larastan level 6, Playwright

Inside the build

Every batch, every expiry: The counter and the Expiry Shelf over softly drawn pharmacy shelves. Every batch, every expiry — The counter and the Expiry Shelf over softly drawn pharmacy shelves.

On a phone: The hero on a phone, headline first. On a phone — The hero on a phone, headline first.

Guides & articles

Practical guides and engineering write-ups for DEV3 Pestleby.

Pharmacy POS software: 6 things to check before you pick one

Last updated
Pharmacy POS software: 6 things to check before you pick one: DEV3 Pestleby

A pharmacy counter looks simple until the oldest box is at the back, a batch is recalled, or two branches count the same stock twice. Here are six things to check before you pick pharmacy POS and stock software, with DEV3 Pestleby as the worked example.

Pestleby home page: the counter screen over softly drawn shelves

1. Does it sell the oldest batch first?

Stock that expires unsold is margin lost. Pestleby picks the sellable batch with the earliest expiry (FEFO) at the till, splits a line across batches when needed, and asks for a reason when staff choose another batch.

The counter with batch chips coloured by expiry

2. How are prescriptions handled?

Capture the image, match the items, check the alerts, let a pharmacist verify, then prepare with batches picked and print labels. A part supply should open an owing slip rather than a mystery.

A prescription being verified with its image and alerts

3. Can you see expiry before it costs you?

Look for near-expiry lists, automatic quarantine of expired batches and recalls that reach every branch. Pestleby adds the Expiry Shelf, a picture of each branch's stock by value and days to expiry.

The Expiry Shelf on the dashboard

4. Does receiving capture batch and expiry?

A goods receipt should record batch, expiry and cost per unit and refuse an expiry in the past.

A goods receipt with batch and expiry capture

5. Is the controlled register trustworthy?

Entries should be append-only, with a running balance that must match the shelf and a witness for supplies and destruction.

The controlled register for one product

6. Are the limits honest?

Pestleby is for one pharmacy business with one or more branches. It has no e-prescription network, insurance or claims integration, no bundled drug database and no regulator certification, and it needs a connection. Ask every vendor the same questions.

Video: The Pestleby tour

Frequently asked questions

The complete source code (version 1.0.0) as a download from your account, with the setup and usage guides shown on this page. You can modify the code to suit your product.

Buying guides: Laravel scripts with Filament panels and a web installer · Next.js or Laravel for a SaaS script?

Questions about this product (0)

Answers from the DEV3 team and the community.

Ask a question

No questions yet.

Wondering about setup, licensing or customisation? Ask, and the DEV3 team will help.

More from this author

View all

Related in Web Scripts & Software

View all