Skip to content

The small-shop edition is the same product with payroll, gift cards and quotations taken out on purpose

A deliberately reduced point of sale for shops with one register and no HR department. It's half the size of the full product: buy, sell, return, cash and staff kept, and everything else removed outright.

WrenkeepCornerHebble & Rye · Stroud · Till 12 parkedJMJess MorleyCashier 17/09/2026 · 11:42
cheddScan a barcode or type a name3 matchesEnter adds

Matches for “chedd”

Live stock · moves as the register sells
ChCranmore Mature Cheddar 200g5060412880214£4.20each18 in stock
ChBramblecote Vintage Cheddar 250g5060412880337£6.40each7 in stock
ChOak-smoked Cheddar, cut to weightPLU 0412£2.10per 100 g2.35 kg in stock

Quick keys

Counter favourites
Sourdough loaf£4.50Seeded rye loaf£3.80Olives, per 100 g£1.90Free-range eggs ×6£2.60Salted butter 250g£2.95Oatcakes£3.40Kindling, bag£5.50Paper carrier£0.20

Parked under the till

2 waiting · recall F8
Parked 10:58Mrs Adeyemi, collecting at 12 · 3 items£17.35Parked 11:31Held at the counter · 1 item£9.80
Sale S-10571Walk-in customer · started 11:39In progress
ItemQtyTotal
Bramblecote Vintage Cheddar 250g£6.40 · VAT 0%1£6.40
Oak-smoked Cheddar£2.10 / 100 g · VAT 0%180 g£3.78
Seeded rye loaf£2.00 · VAT 0%Manual price · was £3.801£2.00
Elderflower pressé 750ml£3.60 · VAT 20%10% override · −£0.722£7.20£6.48
Kiln-dried kindling, bag£5.50 · VAT 5%1£5.50
Subtotal · 6 items£24.88Overrides−£0.72VAT included£1.34To pay£24.16
CashCard £24.16On account
Park saleVoid line Enter takes card

The brief, in specifics

Industry

E-commerce & Retail

Duration

12 weeks

Cooperation model

Fixed price

Services
Product scopingPlatform engineeringBack office
Integrations
Receipt printingBarcode scanningAccounting exportScheduled backups
Technologies
LaravelMySQLBladejQueryBootstrap
Team
1 Project lead2 Backend engineers1 Frontend engineer

Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.

Before and after

What was there, and what replaced it

What was there

Their large product was losing small deals, and price wasn't the reason. Owners opened it, saw departments, payroll, gift cards, coupons, quotations and product variants, and concluded it wasn't for them. Hiding those behind permissions didn't help: the menus were still there, and configuring a system to be smaller isn't a job a shopkeeper wants.

First open is where the small deals were lost, and no amount of configurability reaches it. A permission-hidden module still leaves its vocabulary in the interface (a stray label, an unreachable setting, a report column with nothing in it), and each of those is a question that reaches support from a customer who was already unsure the product was for them.

What replaced it

A separate edition where the cut is real. Buy, sell, both directions of return, cash register, expenses, suppliers, customers and staff. No departments, no payroll, no gift cards, no coupons, no quotations, no variants. The reduction is the feature, and it's visible on the first screen.

Introduction

What we inherited

The flagship point of sale was being sold to shops that used a fifth of it. We built the small-shop edition: the same ledger discipline, seventeen models instead of forty-three, and a settings screen that fits on one page.

A software vendor whose flagship point of sale was losing small deals at a rate nobody could explain from pricing. The engagement started from their own lost-deal notes, which said the same thing repeatedly in different words: the product was for somebody bigger. Twelve weeks were scoped to build a separate edition, not another configuration layer.

Full-Stack Engineering

What we kept, and what we cut

  1. 01

    Cut modules out of the edition instead of hiding them behind permissions

    Removed modules are absent from the build, so no stray label, setting or empty report column survives the cut.

  2. 02

    Kept both directions of return, because returns are where small shops most need the discipline

    Keeping returns was decided from usage data across existing small customers, and the guess everyone had made beforehand would have cut them.

  3. 03

    Kept the cash register, since a one-register shop reconciles more often, not less

    The cash register stayed, since a one-register shop closes daily against a drawer and has no accounts department to find a discrepancy a week later.

  4. 04

    Reduced staff handling to roles and permissions without an HR module attached

    The line was drawn by asking which modules an existing small customer had opened more than twice, and payroll had been opened by none of them.

  5. 05

    Held the same ledger model as the full product, so the data isn't a dead end if a shop grows

    The schema matches the full product exactly, so outgrowing the edition moves data and nobody retypes a year of history.

The cut is real

Removed modules are gone from the build, so the menus a shopkeeper sees are the ones they use.

The removed modules are genuinely absent, not hidden behind permissions, so a shopkeeper's menu contains only what they use. Hiding by permission leaves the complexity in the codebase and the vocabulary in the interface (a stray label, an unreachable setting, a report with an empty column), and every one of those is a question that reaches support.

What shipped
  • Removed modules absent from the build, not permission-hidden
  • No stray labels, settings or empty report columns
  • Complexity gone from the interface and the codebase
Settings

Every setting this edition has, on one page

Save changesThu 17 Sep 2026RH
Payroll, gift cards and quotations aren't in this edition.They're absent from the build, not locked, so there's nothing on this page to switch on and nothing to hide.Absent, not locked

Shop details

Shop nameHebble & RyeAddress14 Hebble Street, Stroud GL5 1ABPhone01453 760 418VAT numberGB 318 4471 62Receipt footerCheese cut to order · returns within 14 daysCurrencyGBP (£)DatesDD/MM/YYYY · Europe/London

Tax rates

3 rates · prices include VAT
NameRateApplies toProducts
Standard20%Drinks, household goods64
Reduced5%Logs and kindling4
Zero0%Cheese, deli, bakery, larder211

Add a rate · a product carries one rate, set on the product

Payment methods

3 methods
CashOpens the drawer · counted at the closeOnCardTerminal amount keyed from the registerOnOn accountCustomers with a tab · settled monthlyOnEach method has its own line at the close.

Users

4 people · roles on Staff
RHRuth HebbleOwnerDPDev ParmarManagerJMJess MorleyCashierCRCallum ReidCashierAdd a person

Backup

Nightly
ScheduleEvery night at 02:00Last backupToday, 02:00 · 38.4 MBKeptThe last 30 nightsBack up nowDownload
On screen

Every setting the edition has, on one page: shop details, three tax rates, three payment methods, users and backup, under a notice naming payroll, gift cards and quotations as absent, not locked.

Returns

Both directions on one screen · each return reverses the movement it came from

New returnThu 17 Sep 2026DP
From a customer£21.45 refundTo a supplier£35.50 creditSame mechanism as the full product · nothing is adjusted by hand

Customer return

CR-0118
S-1048215/09/2026 · card •• 4417£34.35
Line on the invoiceQtyAmount
Perry Hill Dry Cider 500ml3£9.45
Kalamata olive oil 500ml1£12.00
Sourdough loaf, white1£4.50
Cranmore Mature Cheddar 200g2£8.40
2 of 4 lines tickedRefund to card •• 4417£21.45Reason: bought twice by mistake · goods back on the shelf
Refund £21.45 to card

Stock produced

Back on the shelfPerry Hill Dry Cider 500mlreverses S-10482+3Kalamata olive oil 500mlreverses S-10482+1Back to the supplierCrème fraîche 200mlreverses PO-2294−6Natural yoghurt 500greverses PO-2294−8Salted butter 250greverses PO-2294−8Each line is the original movement run backwards, so stock and money come right by construction.

Return to supplier

SR-0031
Levels Dairy Co.PO-2294 · delivered 16/09/2026Damaged
Damaged lineQtyCostCredit
Crème fraîche 200mlCrushed in transit6£1.25£7.50
Natural yoghurt 500gCrushed in transit8£1.50£12.00
Salted butter 250gCrushed in transit8£2.00£16.00
3 lines · zero-ratedCredit owed by Levels Dairy Co.£35.50Comes off the supplier balance · credit note requested
Send return and request credit
On screen

Returns in both directions on one screen: two lines ticked off an invoice for a £21.45 card refund, three damaged supplier lines worth £35.50 of credit, and between them the stock each movement produces.

Returns kept in full

Both directions survive the cut, because returns are where a small shop's numbers most often go wrong.

Both directions of return survived the cut, because returns are where a small shop's numbers go wrong most often, and a single-register business has nobody to catch it later. They work exactly as in the full product, reversing the original movement instead of compensating for it, so the arithmetic is right by construction, with no one needing to check it.

What shipped
  • Purchase and sale returns both kept in full
  • Identical mechanism to the full product
  • Right by construction, not by someone checking

Cash register kept

A one-register shop closes daily, so reconciliation matters more at this size, not less.

A one-register shop closes daily and reconciles against a drawer, which makes the cash register more important at this size, not less: there's no accounts department to find a discrepancy a week later. Opening float, movements, expenses paid from the register and the closing count are all part of one closing record.

What shipped
  • Daily close with float, movements and counted cash in one record
  • More important at one register, not less
  • Register-paid expenses included in the close
Close Till 1

17/09/2026 · opened 08:14 by Ruth Hebble · closing 17:32 by Dev Parmar

ClosingThu 17 Sep 2026DP

Cash count

By denomination
Note / coinCountValue
£502£100.00
£2012£240.00
£109£90.00
£511£55.00
£214£28.00
£117£17.00
50p13£6.50
20p21£4.20
10p14£1.40
5p9£0.45
2p6£0.12
1p3£0.03
Opening float£150.00Cash sales£412.60Paid from till: Window cleaner−£12.00Paid from till: Postage, mail-order parcel−£6.40Expected in drawer£544.20Counted£542.70Variance£1.50 short
Drawer against expected−£1.50Short, recorded on
the close with a note

Takings by payment method

Net of refunds
Cash£412.60Card£1,015.40On account£64.20Takings£1,492.20

Takings by category

6 categories
Cheese£486.30Deli & charcuterie£371.45Drinks£297.15Bakery£208.90Larder£99.40Logs & kindling£29.00Takings£1,492.20
RecountClose till and print Z
Printing Z-report…
HEBBLE & RYE14 Hebble St, StroudVAT GB 318 4471 62Z-REPORT Z-0412TILL 117/09/202617:32SalesS-10496–10591Transactions96CASH£412.60CARD£1,015.40ON ACCOUNT£64.20Refunds (card)−£21.45NET TAKINGS£1,492.20VAT 20% on £297.15£49.53VAT 5% on £29.00£1.38VAT 0% on £1,166.05£0.00VAT TOTAL£50.91Float£150.00Paid from till−£18.40Expected cash£544.20Counted cash£542.70VARIANCE−£1.50Voided lines2Voided sales0Drawer opened, no sale1Closed by Dev ParmarTotals reset for 18/09/2026
On screen

The one-register close: a denomination-by-denomination cash count landing £1.50 short of the expected drawer, takings split by payment method and by category, and the Z-report printing beside them.

Staff

Who can do what at the register · roles and permissions, nothing more

Add a personThu 17 Sep 2026DP
RHRuth HebbleOwnerLast in Today, 08:12
DPDev ParmarManagerLast in Today, 17:32
JMJess MorleyCashierLast in Today, 11:42
CRCallum ReidCashierLast in Sat 12 Sep, 16:05

Role matrix

3 roles · 14 permissions
PermissionOwnerManagerCashier
Sell and take payment
Park and recall a sale
Set a manual price
Discount up to 10%
Discount over 10%
Void a line mid-sale
Void a completed sale
Refund a sale
Open the till without a sale
Close the register and print the Z-report
Book in a delivery
Raise an order or a supplier return
Record a till-paid expense
Settings, users and backup

Allowed Asks for a manager’s PIN

Not in this edition

Removed from the build. There is no menu entry, setting or report column for any of them.AttendanceClocking in and out, timesheets, leaveRemovedPayrollPay runs, payslips, deductionsRemovedRotasShift planning and swapsRemovedVoiding, two waysA cashier may take a line off a sale in progress. Voiding a completed sale changes the day’s takings, so it belongs to the owner and the manager.
On screen

Staff as roles and nothing more: four people, a role matrix where a cashier may void a line mid-sale but not a completed sale, and attendance, payroll and schedules listed as removed from the build.

Roles without HR

Who can void a sale is a real question; attendance tracking for three people isn't.

Roles are kept and HR isn't. Who can void a sale, apply a discount or open the register is a real question in a three-person shop; attendance tracking and payroll for three people is administration in search of a problem. The line between the two was drawn by asking which module a shopkeeper would actually open twice.

What shipped
  • Voids, discounts and register access are real role questions
  • Attendance and payroll cut at three staff
  • Line drawn by what gets opened twice
Buying

Orders, deliveries and the month's running expenses · September 2026

New orderThu 17 Sep 2026DP

Purchase orders

3 received · 2 part-received · 1 draft
OrderSupplierStatusRaisedTotal
PO-2298Wychwood LogsDraft17/09/2026£634.50
PO-2297Kalamata DirectPart-received11/09/2026£1,190.40
PO-2296Perry Hill CiderPart-received09/09/2026£624.00
PO-2295Stroud Valley BakehouseReceived08/09/2026£286.20
PO-2294Levels Dairy Co.Received07/09/2026£412.80
PO-2293Cranmore CreameryReceived03/09/2026£1,138.50

6 orders£4,286.40

Running expenses

September · 5 this month
ExpenseDueStatusAmount
Rent, 14 Hebble Street01/09/2026Paid£1,250.00
Electricity05/09/2026Paid£186.40
Insurance10/09/2026Paid£61.20
Card terminal fees15/09/2026Paid£42.75
Trade waste collection22/09/2026Due£38.00

This month£1,578.35

Booking in a delivery

Open order
Perry Hill CiderAgainst PO-2296 · delivery note DN-773117/09/2026
LineOrderedBeforeThis one
Dry cider 500ml£2.00 each9696—
Medium cider 500ml£2.00 each7272—
Perry 750ml£3.50 each480+48
Cider vinegar 500ml£3.00 each4018+22
Ordered£624.00Received before£390.00This delivery£234.00
Posts to the ledger on confirmShared model+48 Perry 750ml · purchase.receipt+22 Cider vinegar 500ml · purchase.receiptsupplier balance +£234.00 · PO-2296 → receivedSame Movement rows the full Wrenkeep writes
Confirm delivery · £234.00

Shared ledger model

On screen

The buying half of the ledger: six purchase orders totaling £4,286.40 across received, part-received and draft, the month's five running expenses, and a delivery being booked in against an open order, posting to the ledger model the full product shares.

The schema matches the full product, so outgrowing the edition means moving data, never retyping it.

The schema matches the full product exactly, so outgrowing the edition is a data migration, with no year of history to retype. That was the constraint that shaped every cut: nothing could be removed in a way that would turn the upgrade path into a fresh start.

What shipped
  • Identical schema to the full product
  • Outgrowing the edition moves data; nobody retypes it
  • No cut was allowed to break the upgrade path
Process

Phase by phase

  1. Phase 1: Deciding The Cut

    What A One-Till Shop Uses

    Went through the full product's modules against real small-shop usage. Departments, payroll, gift cards, coupons, quotations and variants were used by almost nobody at that size and cost every user attention.

    • Module Audit
    • Cut List
    • Edition Scope
  2. Phase 2: The Core

    Buy, Sell, Return

    Built purchase, sale and both return directions on the same ledger discipline as the full product: the part that has to be right however small the shop is.

    • Purchases
    • Sales
    • Returns Both Ways
  3. Phase 3: Cash And Expenses

    The Daily Close

    Built the cash register and expense handling, because a shop with one register closes it every day, and that's the moment the numbers are either right or not.

    • Cash Register
    • Expenses
    • Daily Close
  4. Phase 4: People, Lightly

    Roles Without HR

    Built staff as roles and permissions and stopped there. A shop with three people needs to know who can void a sale; it doesn't need attendance tracking.

    • Staff
    • Roles
    • Permissions
  5. Phase 5: The Upgrade Path

    Not A Dead End

    Kept the ledger model identical to the full product, so a shop that outgrows the edition moves its data instead of retyping it. That's what makes the cut safe to make.

    • Shared Schema
    • Data Portability
    • Upgrade Route
WrenkeepBuild
Corner edition manifest

What the build contains, module by module, against the full product

Build matches manifest
Full Wrenkeep43 models
Corner edition17 models
Modules hidden rather than cut0
Ledger modelShared

Kept

10 modules · 17 models
LedgerIdentical to the full productMovementShared1
CatalogueNo variants: one product, one priceProductCategoryTaxRate3
SellingScan, park, take paymentSaleSaleLinePaymentMethod3
ReturnsBoth directions, reversing the originalReturnNoteReturnLine2
BuyingOrders, deliveries booked inPurchaseOrderPurchaseLine2
SuppliersBalances and creditSupplier1
CustomersAccounts and receiptsCustomer1
Cash registerFloat, count and close in one recordCashSession1
ExpensesRunning and till-paidExpense1
StaffRoles and permissions, no HRUserRole2

Every kept model has the full product’s schema, column for column.

Cut from the build

8 modules · 26 models
DepartmentsUsed by almost nobody at one registerDepartmentDepartmentTransferDepartmentTarget3
PayrollOpened by none of the small customersEmployeeContractPayrollRunPayslipPayComponentDeduction6
AttendanceNot needed for three peopleClockEventTimesheetLeaveRequest3
RotasNot needed for three peopleRotaShift2
Gift cardsUsed by almost nobody at one registerGiftCardGiftCardBalance2
CouponsUsed by almost nobody at one registerCouponPromotionRedemption3
QuotationsUsed by almost nobody at one registerQuotationQuotationLineQuotationRevision3
VariantsUsed by almost nobody at one registerVariantGroupVariantOptionProductVariantVariantStock4
No routes, menu entries, settings or report columns. Behind a permission: 0
On screen

The edition manifest: forty-three models in the full product, seventeen kept across ten modules, twenty-six cut across eight, none hidden behind a permission, and the ledger model marked as shared.

After the rebuild

43

Models, full product

17

Models, small edition

0

Modules hidden rather than cut

Shared

Ledger model

Models in each product is a count of domain models. Modules hidden rather than cut is zero: the removed ones are absent from the build. Shared ledger model describes the schema relationship: the small edition's data fits the full product's shape exactly.

Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.

What it settled

What the rebuild taught us

  • A product that can be configured smaller is still a big product on first open, and first open is where small deals are lost.

    Configurability answers a question small buyers never ask, because they've already decided by the time they'd reach the settings.

  • Cut modules out instead of hiding them. A menu behind a permission is still a menu somebody has to dismiss.

    Hiding isn't cutting: a menu behind a permission is still a menu, and its vocabulary still appears in reports, settings and support conversations.

  • Decide the cut from usage data, never from a guess about what small customers want.

    The cut was decided from usage, not intuition, which is why returns and the register survived and payroll didn't. The guess would have gone the other way.

  • Keep the schema shared, and a reduced edition stops being a dead end for the customers who grow.

    A shared schema is what stops the reduced edition being a dead end, and it costs nothing at design time and everything to retrofit.

How we worked alongside the team

  1. 01

    The cut list came from the vendor's own usage telemetry, not from a workshop. That mattered: two modules everyone assumed small shops needed were barely touched, and one everyone expected to cut (the cash register) turned out to be used more heavily at that size, not less.

    Twelve weeks, fixed, with the cut decided from usage data across the existing small-shop customer base instead of from opinions about what small shops want. Every module was assessed on whether a shopkeeper would open it twice, and the schema was constrained throughout so that outgrowing the edition would be a data migration, never a fresh start.

Forty-three models, then seventeen

A menu behind a permission is still a menu. So the modules left the build.

The full product laid out by module, then the small-shop edition taking eight of them out, then the difference between hiding a module and cutting it, with the ledger model both editions share. Switch tabs, or use the arrow keys once one is focused.

The flagship point of sale: departments, payroll, gift cards, coupons, quotations and product variants beside the buying, selling and cash a small shop actually uses. Owners opened it, saw all of it, and concluded it was for somebody bigger.

  • Ledger1Movement
  • Catalogue3Product · Category · TaxRate
  • Variants4VariantGroup · VariantOption · ProductVariant · VariantStock
  • Selling3Sale · SaleLine · PaymentMethod
  • Coupons3Coupon · Promotion · Redemption
  • Gift cards2GiftCard · GiftCardBalance
  • Quotations3Quotation · QuotationLine · QuotationRevision
  • Returns2ReturnNote · ReturnLine
  • Buying2PurchaseOrder · PurchaseLine
  • Suppliers1Supplier
  • Customers1Customer
  • Cash register1CashSession
  • Expenses1Expense
  • Departments3Department · DepartmentTransfer · DepartmentTarget
  • Staff2User · Role
  • Attendance3ClockEvent · Timesheet · LeaveRequest
  • Rotas2Rota · Shift
  • Payroll6Employee · Contract · PayrollRun · Payslip · PayComponent · Deduction
Models in the build4318 modules
Cut for the small edition
  • Departments3
  • Payroll6
  • Attendance3
  • Rotas2
  • Gift cards2
  • Coupons3
  • Quotations3
  • Variants4

Why the cut was safe to make: it was decided from which modules existing small customers opened more than twice, and no cut was allowed to break the upgrade path. Step timing is illustrative.

Architecture

From a scan at the register to a close that adds up

The edition is smaller at the edges and identical in the middle. What was cut never reaches the build; what was kept runs on the same ledger discipline as the full product, because that part has to be right however small the shop.

  1. 01 · Source
    Register and back office (Blade, jQuery)A sale, a purchase or a return either way. The menus hold only modules a shopkeeper uses; removed ones are gone from the build.
  2. 02 · Gate
    Laravel controllers and rolesWho can void a sale, apply a discount or open the register is decided by role, with no HR module attached.
  3. 03 · Engine
    Ledger disciplineA return reverses the original movement instead of compensating for it, so the arithmetic is right by construction.
  4. 04 · State
    MySQL · 17 of 43 modelsThe ledger schema matches the full product exactly, so outgrowing the edition moves data instead of retyping it.
  5. 05 · Close
    Daily close and Z-reportOpening float, movements, expenses paid from the register and the closing count sit in one closing record.

What a smaller product can't lose

Money, permissions & a cut that stays cut

The money-critical parts were kept whole

Both directions of return work exactly as in the full product, reversing the original movement. The cash register stayed, with float, movements, register-paid expenses and the count in one closing record, and the ledger model is the full product's own.

Staff get roles, not the run of the register

Voids, discounts and opening the register are role questions, answered by roles and permissions. What was cut is attendance tracking and payroll; control over who can change a sale stays.

Nothing cut can resurface

Removed modules are absent from the build, so no stray label, unreachable setting or empty report column survives for a setting or a role change to bring back.

Is your product too big for your smallest customers? Scope your build in 3 minutes.

Scope your build
Have a project?

Let's talk

Running a large platform, shaping a first MVP, or getting a product ready for a funding round? Tell us where you are. We'll shape the process around it, and stay with you after launch.