← All work

Case / 02 of 08

Keshino

Commerce connected to a wallet.

Role
Sole developer
Timeline
Jul–Sep 2026
Live
keshino.com ↗
Keshino product screenshot
Keshino product screenshot, mobile app screen 1

Context

A salon supply marketplace (formerly Elysian Plaza) where partners can purchase products and use credits earned through the wider platform.

The storefront works across web and Android from the same codebase, with a NestJS backend and a shared administrative ecosystem.

System

Storefront · webAndroid · CapacitorAdmin
NestJS APIWallet / ledger
PostgreSQLRedis
CashfreeMSG91S3Google Maps

What I built

  • Catalog
  • Variants
  • Cart
  • Orders
  • Coupons
  • Payments
  • Wallet
  • Reviews
  • Distributor management
  • Admin dashboard

The hard part

Identity can be shared; money cannot be casually shared.

Glamease grants credit, while the wallet/ledger owns the movement of that money.

Payment events are verified and deduplicated using the gateway event ID, and monetary calculations avoid floating-point drift.

Engineering decisions

  1. 01

    Shared identity, separate money.

    Accounts span products; money only moves through the ledger.

  2. 02

    Webhooks deduplicated by gateway event ID.

    A payment event processed twice has the effect of processing it once.

  3. 03

    No floats for money.

    Monetary calculations avoid floating-point drift.

Shipped

  • Web storefront
  • Android
  • Admin dashboard
  • Docker

Stack

  • React
  • Vite
  • TypeScript
  • NestJS
  • PostgreSQL
  • TypeORM
  • Redis
  • Capacitor
  • Docker

Integrations

  • Cashfree
  • MSG91
  • AWS S3
  • Google Maps / Places
  • GA4

Links

Next case →YumiGlowOne console. Multiple businesses. One answer for every balance.