Case / 05 of 07
Elysian Plaza
Commerce connected to a wallet.
Context
An ecommerce platform for salon supplies 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
- 01
Shared identity, separate money.
Accounts span products; money only moves through the ledger.
- 02
Webhooks deduplicated by gateway event ID.
A payment event processed twice has the effect of processing it once.
- 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