Genius Data Hub is a modern e-commerce delivery platform built to provide fast, secure, and affordable product delivery across the globe. The app features a clean white, red, and black design, a responsive product store, shopping cart, and seamless checkout with Paystack payment integration for Ghana and beyond.
# Genius Data Hub
A mobile-first storefront for data bundles (MTN, Telecel, AirtelTigo, AFA) with no-expiry bundles, Paystack checkout, and optional data supplier API integration.
## Features
- Store home with category cards (MTN, Telecel, AT, AFA Bundle)
- Bundle list per network with **No Expiry** badges
- Cart and Paystack checkout (Ghana Cedis)
- On payment success: order saved and optional supplier API call (buy-data)
- Success page with order reference and **No Expiry** confirmation
- Floating WhatsApp support button
- Admin view of bundles and expiry flag
## Environment variables
Create a `.env.local` in the project root (and set these in Vercel for production):
| Variable | Description |
|----------|-------------|
| `NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY` | Paystack public key (required for payments) |
| `PAYSTACK_SECRET_KEY` | Optional; for server-side payment verification |
| `DATA_SUPPLIER_API_URL` | Optional; data supplier API base URL (e.g. RemaData/DataPlug) |
| `DATA_SUPPLIER_API_KEY` | Optional; API key for supplier |
| `NEXT_PUBLIC_WHATSAPP_LINK` | Optional; WhatsApp chat link (e.g. `
wa.me...`) |
| `NEXT_PUBLIC_JOIN_CHANNEL_URL` | Optional; Join Channel button URL (e.g. Telegram) |
| `NEXT_PUBLIC_CONTACT_URL` | Optional; Contact button URL (e.g. `mailto:...`) |
## Bundles and expiry flag
- Bundle data lives in **`data/bundles.json`**.
- Each bundle has: `id`, `network`, `title`, `sizeMB` (optional), `price`, `badge`, **`expires`** (boolean), **`expiry_note`** (e.g. `"No expiry"`), `description`.
- **Default for all bundles:** set `expires: false` and `expiry_note: "No expiry"`.
- To add or edit bundles: update `data/bundles.json`, then redeploy.
- To change the expiry flag: set `expires: true` and adjust `expiry_note` in the JSON for that bundle; redeploy.
- The **Admin** page (`/dashboard/admin`) lists all bundles and their current `expires` value (read-only; edits are done in the JSON file).
## Setup
1. Install dependencies:
```bas …