Skip to main content
Home
GrN.dk

Main navigation

  • Articles
  • Cases
  • Services
  • Your Digital Project Manager
  • About Greg Nowak
  • Image Gallery
  • Contact
User account menu
  • Log in

Join my community / free newsletter — sign up here

Breadcrumb

  1. Home
  2. Cases

One till, many sellers: a market POS that splits every sale by stall

Client
A community market in Thailand (client kept anonymous)
Sector
Retail — point of sale
Period
June–July 2026
The POS sale screen, recreated with sample products: a grid of Thai market goods with per-seller badges, a basket split across three sellers, and a Charge ฿290 button offering cash or PromptPay QR.

At a glance

A point-of-sale system for a physical market where dozens of independent sellers share the same tills. A cashier rings up one basket; the system knows which stall every item belongs to, splits the sale per seller at the moment it happens, and keeps the books each stall settles against. Thai-first interface with a synchronized English translation set, built on Laravel 12 with a Filament v4 admin panel and PostgreSQL underneath.

Every amount is integer satang — a float never touches money
Append-only audit log: till actions are written once, never edited or deleted
Thai-first UI with a synchronized English translation set
Laravel 12 · Filament v4 · PostgreSQL · 19 migrations · PHPUnit suite

The challenge

A shared-till market breaks the assumption almost every off-the-shelf POS makes: that the shop is one business. Here a single basket routinely holds goods from three or four different sellers, and at the end of the month each of them needs to be paid exactly what their stall sold — no more accounting spreadsheet, no arguing with the till roll.

Money software also has two classic self-inflicted wounds waiting: floating-point prices that drift by a satang, and editable transaction tables where a typo "fix" quietly rewrites history. Both had to be impossible by construction, not by discipline.

The solution

A Laravel 12 application with the day-to-day sale screen kept deliberately simple — product grid, basket, charge — and a Filament v4 back office for products, sellers, shifts and reports. Every sale line carries its seller, so per-stall settlement is not a report bolted on top but a property of the data model itself.

Money is stored exclusively as integer satang (฿290 is the integer 29000); no float ever touches an amount. And every till action lands in an append-only audit log — rows are written once and can be neither updated nor deleted, so the history the settlement is based on is the history that actually happened. The interface is Thai-first, with the English translation set kept in lockstep by a sync command rather than by memory.

The results

The system is live and in daily use at the client's market (a private deployment, so it is not linked here). Cashiers work one shared basket per customer regardless of how many stalls it spans, and per-seller settlement falls straight out of the ledger instead of out of an end-of-month spreadsheet session.

The build runs on the same delivery model as the rest of this page: phased Trello cards worked by an AI agent under review, 19 database migrations and a PHPUnit suite grown alongside the features, and the production database covered by the server's nightly dump-and-backup routine from day one.

  • Laravel
  • Filament
  • PostgreSQL
  • Point of sale
  • Custom Development
  • AI agents

Got a project that needs the same kind of hands-on delivery?

Your digital project manager

Review Greg on Google

Greg Nowak Google Reviews

 

Written recommendations from Trafik og Veje, Aarhus Municipality (2011) and AgroTech (2010) — read them on LinkedIn.

Illustrated infographic summarizing: WordPress 7.1 Exposes AI-Ready Actions. Who Gets to Run Them?
WordPress 7.1 Exposes AI-Ready Actions. Who Gets to Run Them?
2026-09-02

WordPress 7.1 helps AI agents discover and invoke site abilities. Here is how to keep exposure, authentication and permission firmly separate.

Illustrated infographic summarizing: From Sales Meeting to CRM: Automate Follow-Up Without Compromising Data Quality
From Sales Meeting to CRM: Automate Follow-Up Without Compromising Data Quality
2026-09-01

How to use AI for meeting notes and follow-up while fixed rules protect CRM data, customer matching and the sales pipeline from errors and premature changes.

Illustrated infographic summarizing: Your AI Gateway Can Name the User. Decide What That Log Is For
Your AI Gateway Can Name the User. Decide What That Log Is For
2026-08-31

Identity-aware AI Gateway logs can sharpen security and cost control, but only when attribution, access, retention, guardrails, and response are clearly defined.

Illustrated infographic summarizing: Zero Data Retention Is a Workflow Audit, Not a Checkbox
Zero Data Retention Is a Workflow Audit, Not a Checkbox
2026-08-30

Zero Data Retention covers the provider, not every copy in your stack. See how to audit endpoints, logs, storage, deletion and project-level controls.

Illustrated infographic summarizing: MCP 2026-07-28 Is an Auth Migration, Not a Version Bump
MCP 2026-07-28 Is an Auth Migration, Not a Version Bump
2026-08-29

MCP’s July 2026 release removes protocol sessions and tightens OAuth. Here’s a practical plan for migrating clients, servers and enterprise access safely.

Illustrated infographic summarizing: Turn a Technician’s Voice Note into a Work Order—Not Raw Audio
Turn a Technician’s Voice Note into a Work Order—Not Raw Audio
2026-08-28

Voice input can reduce the technician’s documentation burden when hours, materials and status are validated before the information is saved in the work order system.

Illustrated infographic summarizing: ChatGPT Disabled Personal Knowledge Sync. What Broke on Your Team?
ChatGPT Disabled Personal Knowledge Sync. What Broke on Your Team?
2026-08-27

ChatGPT retired personal sync connections for Enterprise and Edu. Here is how to find affected workflows, migrate access, and test permissions.

Illustrated infographic summarizing: Cloudflare’s September Bot Defaults Could Quietly Cut AI Visibility
Cloudflare’s September Bot Defaults Could Quietly Cut AI Visibility
2026-08-26

Cloudflare’s September bot defaults give publishers more control, but one training block could also cut search crawling and AI-driven discovery.

Illustrated infographic summarizing: Does Your AI Chatbot Clearly Identify Itself?
Does Your AI Chatbot Clearly Identify Itself?
2026-08-25

The EU’s transparency requirements for AI chatbots now apply. Here is how to make your bot’s identity clear, limit its system access and provide a genuine route to a member of staff.

Illustrated infographic summarizing: Should publishers add Google’s new Preferred Sources button?
Should publishers add Google’s new Preferred Sources button?
2026-08-24

Google’s Preferred Sources button is worth a controlled test for eligible publishers, with careful choices around placement, performance and measurement.

More articles
RSS feed

Footer

  • All articles
  • Contact

GrN.dk — AI automation, web platforms, web optimization, data handling and logistics.

© 2026 GrN.dk · LinkedIn · Contact · AI automation in Danish: nowa.dk

Behind GrN.dk: Individual Entrepreneur Codecrafter · Tax ID 305669096 · Bakhtrioni St. 22, 0194 Tbilisi, Georgia · official business register