NightlifeET is a full-stack Web Application and Telegram Mini App (TMA) built for Ethiopia's high-end nightlife ecosystem. It combines real-time table concurrency locking, split-payment venue checkouts via Chapa, smart contract escrow protection for DJ bookings, and automated SMS QR pass delivery via AfroMessage.
# ✦ NightlifeET — VIP Lounge Table SaaS & Escrow DJ Booking Engine
> **NightlifeET** is a full-stack Web Application and Telegram Mini App (TMA) built for Ethiopia's high-end nightlife ecosystem. It combines real-time table concurrency locking, split-payment venue checkouts via Chapa, smart contract escrow protection for DJ bookings, and automated SMS QR pass delivery via AfroMessage.
---
## 🌟 Architectural Highlights
```mermaid
graph TD
User([Consumer / Telegram Mini App]) -->|1. Select Table & Reserve| NextServer[Next.js 14 App Router]
NextServer -->|2. SET NX EX 300 Concurrency Lock| Redis[(Upstash Redis)]
NextServer -->|3. POST /v1/transaction/initialize| ChapaAPI[Chapa Payment Gateway]
ChapaAPI -->|4. Redirect to Hosted Checkout| User
ChapaAPI -->|5. HMAC SHA256 Webhook Event| WebhookRoute[POST /api/webhooks/chapa]
WebhookRoute -->|6. CONFIRMED Status & DB Update| Supabase[(Supabase PostgreSQL)]
WebhookRoute -->|7. Send Pass URL SMS| AfroMessage[AfroMessage SMS API]
AfroMessage -->|8. SMS with QR Pass Link| User
VenueManager([Venue Manager]) -->|9. Sign-off Gig Completion| EscrowRelease[POST /api/escrow/release]
EscrowRelease -->|10. POST /v1/transfers| ChapaAPI
ChapaAPI -->|11. Payout Performance Fee| DJBank[(DJ Bank Account / CBE)]
```
---
## 🚀 Key Features
### 1. ⏱ 5-Minute Concurrency Lock (`Upstash Redis`)
- Prevents double-booking during table checkout using `SET lock:table:${id}:${date} ${uuid} NX EX 300`.
- Automatic TTL expiration after 300 seconds to release uncompleted reservations.
- Atomic check-and-delete via Lua scripts ensures only the lock owner can release it.
### 2. 💳 Subaccount Split Payments & Webhooks (`Chapa API`)
- Initializes table deposits via `POST /v1/transaction/initialize` with split payment payloads (`split_type: "percentage"`, `split_value: 0.90`).
- Webhook route (`POST /api/webhooks/chapa`) verifies `x-chapa-signature` using HMAC SHA256.
- Auto-updates reservation status from `PENDING_PAYMENT` to `CONFIRMED`.
# …