# 🚶 Hashtag Orange GMB Dashboard Walkthrough

> **Last Updated**: April 27, 2026 — 4:30 PM IST

---

## 1. The 3-Tier Hierarchy

```text
Agency (Hashtag Orange)
  └── Client (Fenesta Corporate)
        ├── Dealer (Fenesta Dealer Gurugram)
        ├── Dealer (Fenesta Dealer Noida)
        └── Dealer (Fenesta Dealer Jaipur)
```

### Tier 1: Agency (`admin@hashtagorang.in`)

- **Role**: `agency`
- **Dashboard**: Client management table
- **Key Features**:
  - View all Clients with their dealer count and status
  - Add new Client → auto-generates temp password, shown in toast notification
  - Soft-delete (deactivate) clients
  - See dealer counts per client

### Tier 2: Client (`fenesta@example.com`)

- **Role**: `client`
- **Dashboard**: 3-tab layout (Overview / Dealers / Manage)
- **Key Features**:
  - **Overview Tab**: 7 cumulative KPI cards + weighted average rating
  - **Dealers Tab**: Click any dealer row to drill-down into their individual metrics
  - **Manage Tab**: Add new dealer locations with auto-generated temp passwords
  - All metrics aggregated across ALL active dealers

### Tier 3: Dealer (`dealer.gurugram@fenesta.com`)

- **Role**: `dealer`
- **Dashboard**: Individual store metrics + posting
- **Key Features**:
  - **7 KPI Cards**: Views, Search, Maps, Clicks, Calls, Direction Clicks, Rating
  - **6-Month Trend Chart**: Chart.js line chart with view history
  - **Google Post Creator**: Modal to publish updates to Google (mock in Phase 5)
  - Can ONLY see their own location data

---

## 2. Authentication Flow

1. **Unified Login**: One dark-themed login page with email/password + Google button
2. **First Login**: New users (clients/dealers) see a **forced password change** screen before accessing dashboards
3. **Secure Access**: JWT (24h expiry) stored in localStorage, sent as Bearer token
4. **Google OAuth**: Stub that auto-activates when credentials are provided in `.env`
5. **Logout**: Clears localStorage and reloads the page

---

## 3. All 8 Tracked Metrics

| # | Metric | Source |
| --- | --- | --- |
| 1 | Total Views | `total_views` |
| 2 | Search Impressions | `search_impressions` |
| 3 | Map Views | `map_views` |
| 4 | Website Clicks | `website_clicks` |
| 5 | Calls Made | `calls_made` |
| 6 | Direction Clicks | `direction_clicks` |
| 7 | Average Rating | `average_rating` (weighted avg for client cumulative) |
| 8 | Total Reviews | `total_reviews` |

---

## 4. Security Model

| Action | Agency | Client | Dealer |
| --- | --- | --- | --- |
| View/manage clients | ✅ | ❌ 403 | ❌ 403 |
| View/manage dealers | ❌ 403 | ✅ (own) | ❌ 403 |
| View own dashboard | N/A | ✅ | ✅ |
| Create Google posts | ❌ | ❌ | ✅ |

---

## 5. Test Credentials

| Role | Email | Password | First Login? |
| --- | --- | --- | --- |
| Agency | `admin@hashtagorang.in` | `Admin@123` | No |
| Client | `fenesta@example.com` | `Client@123` | Yes → forced change |
| Dealer 1 | `dealer.gurugram@fenesta.com` | `Dealer@123` | Yes → forced change |
| Dealer 2 | `dealer.noida@fenesta.com` | `Dealer@123` | Yes → forced change |
| Dealer 3 | `dealer.jaipur@fenesta.com` | `Dealer@123` | Yes → forced change |
