aion. All case studies
Clinic POS + Showcase

SkinByManar.

A skincare clinic's digital storefront and its cash register: treatments and products showcased online, and an in-house POS the clinic rings every sale on — cash in two currencies, card, Whish, split payments.

Visit skinbymanar.com Skincare clinic & boutique — Tripoli, Lebanon

A coded depiction of the real product — the live system is one click above.

The situation

SkinByManar sells skincare treatments and boutique products, and every sale happens in person at the clinic. Forcing an online checkout nobody would use was the wrong move — but running sales on paper was costing accuracy on stock and the daily cash count.

So the site does what a clinic site should: it showcases. And the POS does what the business actually needs: it sells, tracks stock and closes the day's books.

What we built

Treatments & boutique showcase

The full treatment menu and product boutique, browse-only by design — clients arrive already knowing what they want.

In-clinic POS

Tap-to-add products and treatments, customer autocomplete, and payment the way Tripoli actually pays: cash in USD or LBP, card, Whish — and any split of them in one sale.

Discounts, done honestly

Discounts require a reason and are logged with the sale — generosity stays visible in the books.

Live inventory

Every product sale decrements stock automatically with a movement log, purchase entries restock it, and low-stock badges flag reorders.

Receipts & records

PDF receipts on every sale and a purchase history per customer.

Daily books & reports

Cash-shift close-outs with expected-vs-counted, expense tracking by category, and profit reports — all on Beirut-local day boundaries so early-morning sales land on the right day.

Under the hood
  • Idempotent sale submission — a double-tap cannot ring the same sale twice
  • Postgres with row-level security on Supabase; admin/staff role separation
  • POS money math extracted into a pure, unit-tested library
  • Timezone-safe date handling so daily totals match the physical cash count
ReactTypeScriptTailwindSupabase

Want a system like this?

One scoping call, a fixed quote, and we build.

Start your project