Skip to main content

EP-019: Platform Administration (SaaS)

FieldValue
Epic IDEP-019
Epic NamePlatform Administration (SaaS)
OwnerPlatform Engineering Lead
Created2026-03-05
Last Updated2026-03-05
StatusIn Progress
PriorityP1 - High

1. Business Objective​

Manage HMP as a multi-tenant SaaS platform with automated billing, tenant lifecycle management, and platform health monitoring. Currently, tenant onboarding requires developer intervention for database provisioning, configuration, and initial setup -- taking 2-3 days per new tenant. Billing is disconnected from the platform, with invoices managed manually in spreadsheets. As HMP scales beyond 50 tenants, automated SaaS operations become critical. Target: reduce tenant onboarding from 3 days to 30 minutes, automate billing via Razorpay Subscriptions (INR), and provide real-time platform health visibility. For the Indian SaaS market, plans range from INR 4,999/month (Budget) to INR 49,999/month (Chain), with MRR tracking and churn analysis essential for business sustainability.


2. Audience​

RoleInteraction
Super AdminFull platform management: tenant CRUD, billing, feature flags, health monitoring, data export

3. Scope​

3.1 In Scope​

  • Super admin dashboard (platform-level overview, not tenant-level)
  • Tenant management: create, read, update, suspend, reactivate, delete
  • SaaS billing via Razorpay Subscriptions (INR plans, auto-debit, invoicing)
  • Feature flags per tenant (enable/disable modules per subscription tier)
  • Usage metering (API calls, storage, active users per tenant)
  • Tenant onboarding automation (database provisioning, initial config, admin user creation)
  • Platform health monitoring (service status, error rates, latency, uptime)
  • MRR/ARR tracking with churn and expansion revenue analytics
  • Tenant data export (compliance with data portability regulations)
  • White-labeling (custom branding per tenant: logo, colors, domain)

3.2 Out of Scope​

  • Individual tenant hotel operations (managed within each tenant's scope)
  • Infrastructure provisioning (Kubernetes, cloud resources -- covered in EP-020)
  • Customer support / ticketing system (use external tool like Freshdesk)
  • Marketplace / third-party app integrations

4. Current Implementation Status​

4.1 Backend (01-hmp-backend)​

ComponentStatusNotes
Tenant CRUD APIBuiltCreate, read, update with status management
Tenant Suspend/ReactivateBuiltStatus toggle with cascade to auth service
Billing ControllerPartialEndpoints defined, Razorpay integration not complete
Feature Flag APIBuiltPer-tenant flag CRUD with module-level granularity
Usage MeteringNot StartedSchema defined, data collection not implemented
Tenant Onboarding AutomationNot StartedManual process: DB, config, admin user
Platform Health APIPartialBasic health endpoint per service, no aggregation
MRR/ARR CalculationNot StartedNo financial analytics pipeline
Data Export APINot StartedNo tenant data export endpoint

4.2 Dashboard (02-hmp-web-dashboard)​

ComponentStatusNotes
Super Admin Tenant ListBuiltTenant grid with status, plan, created date
Tenant Detail ViewBuiltTenant info, status, feature flags
Billing PagePartialPlan display, invoice list (mock data)
Feature Flag Toggle UIBuiltToggle switches per module per tenant
Usage Metering DashboardNot StartedNo usage data visualization
Onboarding WizardNot StartedNo self-service tenant onboarding
Platform Health DashboardPartialBasic service status indicators
MRR/ARR AnalyticsNot StartedNo financial dashboards
Data Export UINot StartedNo export interface
White-Label ConfigNot StartedNo branding customization interface

5. Gap Analysis​

#GapImpactEffortPriority
1Razorpay Subscriptions not connectedCritical - billing is entirely manualLP0
2Usage metering not implementedHigh - cannot enforce plan limits or bill overagesLP1
3Tenant onboarding is manualHigh - 2-3 day onboarding blocks growthLP1
4MRR/ARR not automatedHigh - business metrics tracked in spreadsheetsMP1
5Data export not builtMedium - compliance risk for data portabilityMP2
6White-labeling not implementedMedium - limits enterprise/chain salesLP3
7Platform health monitoring basicMedium - issues detected reactivelyMP2

6. User Stories Summary​

Story IDTitlePriorityPointsSprintStatus
US-019-01Tenant CRUD ManagementP051Built
US-019-02Tenant Suspension & ReactivationP051Built
US-019-03SaaS Billing (Razorpay)P0132Partial
US-019-04Feature Flag ManagementP151Built
US-019-05Tenant Onboarding AutomationP1133Not Started
US-019-06Usage Metering & LimitsP1133Not Started
US-019-07Platform Health MonitoringP284Partial
US-019-08MRR/ARR & SaaS AnalyticsP184Not Started
US-019-09Tenant Data ExportP285Not Started
US-019-10White-LabelingP3136Not Started
US-019-11Tenant Communication & AnnouncementsP255Partial

7. Dependencies​

DependencyTypeEpic/ServiceStatus
Auth service (tenant-scoped RBAC)UpstreamEP-001 / authAvailable
All microservices (health endpoints)PeerAll servicesAvailable
Razorpay Subscriptions APIExternalPayment providerNot Ready
PostgreSQL (tenant databases)InfraDocker / PostgreSQLAvailable
Kafka (tenant events)InfraDocker / KafkaAvailable
Redis (usage counters)InfraDocker / RedisAvailable
DNS provider (custom domains)ExternalCloud DNSNot Ready
Infrastructure / DevOpsPeerEP-020 / infraPartial

8. Epic-Level Acceptance Criteria​

  1. AC-EP-019-01: A super admin can create a new tenant, and the system automatically provisions the database schema, creates the admin user, and configures default settings within 30 minutes (target: 5 minutes automated).
  2. AC-EP-019-02: Razorpay Subscriptions handles recurring billing in INR with plan upgrades, downgrades, and cancellations reflected in the platform within 1 hour.
  3. AC-EP-019-03: Feature flags control module access per tenant, and toggling a flag takes effect within 60 seconds without service restart.
  4. AC-EP-019-04: Usage metering tracks API calls, storage, and active users per tenant with real-time dashboard and automated limit enforcement.
  5. AC-EP-019-05: MRR, ARR, churn rate, and expansion revenue are calculated automatically and displayed on the SaaS analytics dashboard.
  6. AC-EP-019-06: A tenant can be suspended (blocking all user access) and reactivated without data loss.

9. KPIs​

KPITargetMeasurement Method
Tenant onboarding time< 30 minutesSignup to first login timestamp
Billing automation rate100%Auto-billed / total active tenants
Monthly churn rate< 5%Churned tenants / total at start
Platform uptime> 99.9%Uptime monitoring
Feature flag propagation time< 60 secondsToggle to effect timestamp
MRR growth (month-over-month)> 10%Current MRR / previous MRR
Support tickets for billing< 5/monthBilling-related tickets count

10. Detailed User Stories​


US-019-01: Tenant CRUD Management​

As a Super Admin, I want to create, view, update, and manage tenant organizations on the platform, So that new hotels can be onboarded and existing tenant information stays current.

Priority: P0 | Points: 5 | Sprint: 1 | Status: Built

Implementation Status​

Tenant CRUD API fully built. Creates tenant record with: name, legal entity, GSTIN, contact info, plan tier, status. Dashboard shows tenant list with search, filter by status/plan, and sort options. Tenant detail page shows all configuration and associated users.

Acceptance Criteria​

Scenario: Create new tenant for an Indian hotel
Given the super admin is on the tenant management page
When they create a new tenant:
| Field | Value |
| Hotel Name | Hotel Sapphire, Pune |
| Legal Entity | Sapphire Hospitality Pvt Ltd |
| GSTIN | 27AADCS1234F1Z5 |
| Contact Email | admin@hotelsapphire.in |
| Contact Phone | +91 98765 43210 |
| Plan | Professional (INR 14,999/month)|
| Modules | PMS, POS, CRM, Channel Manager |
Then the tenant is created with status "ACTIVE"
And a unique tenant ID (UUID) is generated
And the tenant appears in the tenant list with all details
And a Kafka event "tenant.created" is published

Scenario: Search and filter tenants
Given 150 tenants are registered on the platform
When the super admin searches for "Sapphire"
Then matching tenants are displayed (e.g., "Hotel Sapphire, Pune", "Sapphire Resort, Goa")
And the super admin can filter by: status (Active/Suspended), plan tier, city, state
And the list shows: tenant name, plan, status, MRR, last active date

US-019-02: Tenant Suspension & Reactivation​

As a Super Admin, I want to suspend a tenant (blocking all user access) and reactivate them later without data loss, So that non-paying or policy-violating tenants can be managed.

Priority: P0 | Points: 5 | Sprint: 1 | Status: Built

Implementation Status​

Suspension API sets tenant status to SUSPENDED and cascades to auth service, which blocks all JWT token validation for that tenant's users. Reactivation sets status back to ACTIVE and restores access. Tenant data is preserved during suspension. Suspension reason is recorded.

Acceptance Criteria​

Scenario: Suspend tenant for non-payment
Given tenant "Hotel Sapphire, Pune" has failed to pay for 2 consecutive months
When the super admin suspends the tenant with reason "Non-payment - 60 days overdue"
Then the tenant status changes to "SUSPENDED"
And all users of "Hotel Sapphire, Pune" are immediately logged out
And any login attempt shows "Your account has been suspended. Please contact support."
And the tenant's data remains intact (no deletion)
And a notification email is sent to the tenant's admin: "Your HMP subscription has been suspended due to non-payment of INR 29,998 (2 months). Contact billing@hmpcloud.com to resolve."
And a Kafka event "tenant.suspended" is published

Scenario: Reactivate suspended tenant
Given tenant "Hotel Sapphire, Pune" has cleared their outstanding balance
When the super admin reactivates the tenant
Then the tenant status changes to "ACTIVE"
And all users can log in and access the platform immediately
And data continuity is verified (no missing records during suspension period)
And a reactivation email is sent to the tenant's admin

US-019-03: SaaS Billing (Razorpay Subscriptions)​

As a Super Admin, I want to manage subscription billing via Razorpay Subscriptions with automated recurring payments in INR, So that revenue collection is automated and tenants have a seamless payment experience.

Priority: P0 | Points: 13 | Sprint: 2 | Status: Partial

Implementation Status​

Billing controller endpoints defined for: create subscription, cancel subscription, change plan, list invoices. Razorpay SDK imported but not connected with live API keys. Plan definitions exist in the database (Budget: INR 4,999, Professional: INR 14,999, Enterprise: INR 29,999, Chain: INR 49,999). Invoice display in dashboard uses mock data. Webhook handler for Razorpay payment events not implemented.

Acceptance Criteria​

Scenario: Create subscription for new tenant
Given tenant "Hotel Sunrise, Mumbai" is being onboarded on the "Professional" plan
When the super admin creates a Razorpay subscription:
| Field | Value |
| Plan | Professional |
| Amount | INR 14,999/month |
| Billing Cycle | Monthly |
| Payment Method | Auto-debit (UPI/Card/Netbanking)|
| Start Date | 2026-03-05 |
Then a Razorpay Subscription is created via API
And the tenant receives a payment link to authorize auto-debit
And the subscription status is "CREATED" until payment authorization
And upon authorization, status changes to "ACTIVE" and first invoice is generated

Scenario: Upgrade plan from Professional to Enterprise
Given tenant "Hotel Sapphire, Pune" is on "Professional" (INR 14,999/month)
When the super admin upgrades to "Enterprise" (INR 29,999/month)
Then Razorpay proration is calculated for the remaining billing period
And the difference (pro-rated amount) is charged immediately
And the next billing cycle uses the new "Enterprise" rate
And feature flags are updated to enable Enterprise-tier modules
And the tenant admin is notified of the plan change

Scenario: Handle failed payment
Given tenant "Budget Inn, Delhi" has a monthly auto-debit on the 1st
And the March 1st payment of INR 4,999 fails (insufficient funds)
When Razorpay sends a "payment.failed" webhook
Then the platform records the failed payment attempt
And a retry is scheduled per Razorpay's retry policy (Day 3, Day 5, Day 7)
And the tenant admin receives an email: "Payment of INR 4,999 failed. Please update your payment method to avoid service disruption."
And if all retries fail after Day 7, the tenant is auto-suspended

US-019-04: Feature Flag Management​

As a Super Admin, I want to enable or disable platform modules per tenant based on their subscription tier, So that tenants only access features they are paying for.

Priority: P1 | Points: 5 | Sprint: 1 | Status: Built

Implementation Status​

Feature flag API supports per-tenant, per-module flags. Modules: PMS, POS, CRM, CHANNEL_MANAGER, BANQUET, BOOKING_ENGINE, AI, SPA, REPORTS, API_ACCESS. Dashboard toggle UI allows super admin to enable/disable modules with instant effect. Auth middleware checks feature flags before granting access to module endpoints.

Acceptance Criteria​

Scenario: Configure feature flags by plan tier
Given the plan tiers have default module access:
| Plan | Modules Included |
| Budget | PMS, REPORTS |
| Professional | PMS, POS, CRM, REPORTS, BOOKING_ENGINE |
| Enterprise | All modules except AI |
| Chain | All modules including AI |
When the super admin creates a new tenant on "Professional" plan
Then feature flags are automatically set per the plan defaults
And the tenant's dashboard only shows menus for enabled modules
And API calls to disabled modules return 403 Forbidden

Scenario: Override feature flag for specific tenant
Given tenant "Hotel Sapphire, Pune" is on "Professional" plan (no AI module)
And the hotel wants to trial the AI module for 30 days
When the super admin enables the AI flag for this tenant
And sets an expiry date of April 5, 2026
Then the AI module becomes accessible to the tenant immediately
And after April 5, the flag auto-disables
And the override is logged with reason and expiry date

Scenario: Feature flag propagation speed
Given the super admin disables the POS module for tenant "Budget Inn"
When the flag is toggled in the dashboard
Then within 60 seconds, all active sessions for Budget Inn lose POS access
And the POS menu item disappears from their dashboard
And any in-flight POS API calls receive 403 after the propagation

US-019-05: Tenant Onboarding Automation​

As a Super Admin, I want to onboard a new tenant with automated database provisioning, default configuration, and admin user creation, So that new hotels can start using HMP within minutes instead of days.

Priority: P1 | Points: 13 | Sprint: 3 | Status: Not Started

Implementation Status​

Not started. Currently, onboarding a new tenant requires: (1) manual database schema creation via Prisma migrate, (2) manual insertion of default data (room types, rate plans, roles), (3) manual admin user creation, (4) manual feature flag configuration. This takes 2-3 days with developer involvement. Needs full automation pipeline.

Acceptance Criteria​

Scenario: Automated tenant onboarding
Given the super admin initiates onboarding for "Hotel Sunrise, Mumbai"
When the onboarding wizard is completed with:
| Field | Value |
| Hotel Name | Hotel Sunrise |
| City | Mumbai |
| State | Maharashtra |
| GSTIN | 27AADHS5678G1Z2 |
| Admin Name | Rajesh Kumar |
| Admin Email | rajesh@hotelsunrise.in |
| Plan | Professional |
| Room Count | 80 |
Then the system automatically:
1. Creates the tenant record with unique ID
2. Provisions the database schema (Prisma migrate)
3. Seeds default data: room types, rate plans, tax slabs (GST), roles
4. Creates the admin user with temporary password
5. Configures feature flags per plan tier
6. Sends welcome email to rajesh@hotelsunrise.in with login credentials
And the entire process completes within 5 minutes
And the admin can log in and start configuring their hotel

Scenario: Onboarding with Indian hotel defaults
Given the hotel is located in Maharashtra
When the onboarding seeds default data
Then Indian-specific defaults are configured:
| Default | Value |
| Currency | INR |
| Tax Structure | GST (CGST + SGST for MH) |
| GST Rates | 12% (< 7500), 18% (>= 7500) |
| Check-in Time | 2:00 PM IST |
| Check-out Time | 12:00 PM IST |
| Date Format | DD/MM/YYYY |
| FSSAI Placeholder | (to be filled by hotel) |
| Default Roles | 9 RBAC roles pre-configured |

US-019-06: Usage Metering & Limits​

As a Super Admin, I want to track resource usage per tenant (API calls, storage, active users) and enforce plan limits, So that tenants operate within their subscription boundaries and overages are billable.

Priority: P1 | Points: 13 | Sprint: 3 | Status: Not Started

Implementation Status​

Not started. Usage metering requires: API gateway middleware to count requests per tenant, storage tracking per tenant (S3/filesystem), active user counting per billing period, and threshold alerting. Plan limits not defined in the database. Overage billing logic not designed.

Acceptance Criteria​

Scenario: Track API usage per tenant
Given tenant "Hotel Sapphire" is on "Professional" plan with limit of 100,000 API calls/month
When the API gateway processes requests for this tenant
Then each request increments the tenant's monthly API counter (stored in Redis)
And the super admin dashboard shows:
| Tenant | API Calls (MTD) | Limit | Usage % |
| Hotel Sapphire | 65,432 | 100,000 | 65.4% |
And at 80% usage (80,000 calls), the tenant admin receives a warning email
And at 100% usage, API calls are either throttled (429 Too Many Requests) or billed as overage

Scenario: Track storage usage per tenant
Given each plan tier has a storage limit:
| Plan | Storage Limit |
| Budget | 5 GB |
| Professional | 25 GB |
| Enterprise | 100 GB |
| Chain | 500 GB |
When the tenant uploads documents, photos, and reports
Then storage usage is tracked per tenant (guest photos, invoices, reports)
And the usage dashboard shows current consumption vs limit
And at 90% storage, the tenant admin receives a notification

Scenario: Enforce active user limits
Given "Budget" plan allows 5 active users
And tenant "Budget Inn" has 5 active users
When the tenant admin tries to create a 6th user
Then the system rejects with "Active user limit reached. Upgrade to Professional for up to 25 users."
And the error includes an upgrade link
And the super admin can see which tenants are at user capacity

US-019-07: Platform Health Monitoring​

As a Super Admin, I want to monitor the health of all platform services in real-time, So that I can detect and respond to outages before they impact tenants.

Priority: P2 | Points: 8 | Sprint: 4 | Status: Partial

Implementation Status​

Basic health endpoint (/health) exists on each microservice returning UP/DOWN status. No aggregated platform health dashboard. No historical uptime tracking. No error rate monitoring. No latency tracking. Needs: health aggregator service, uptime calculation, error rate dashboards, alerting for degraded services.

Acceptance Criteria​

Scenario: View platform health dashboard
Given 16 microservices are running
When the super admin opens the platform health dashboard
Then each service shows:
| Service | Status | Uptime (30d) | Avg Latency | Error Rate |
| API Gateway | UP | 99.95% | 45ms | 0.02% |
| Auth Service | UP | 99.99% | 30ms | 0.01% |
| Reservation | UP | 99.90% | 120ms | 0.05% |
| Frontdesk | UP | 99.92% | 85ms | 0.03% |
| Kafka | UP | 99.99% | N/A | 0.00% |
| PostgreSQL | UP | 99.99% | 15ms | 0.00% |
| Redis | UP | 99.99% | 5ms | 0.00% |
And overall platform uptime is displayed (99.93%)
And a status timeline shows incidents over the last 30 days

Scenario: Alert on service degradation
Given the Reservation service error rate exceeds 1% (threshold)
When the health monitor detects the spike
Then a critical alert is generated on the dashboard
And the super admin receives a push notification and email
And the alert includes: service name, error rate, sample error messages, and affected tenants
And a suggested action is shown (e.g., "Check Reservation service logs, possible database connection issue")

US-019-08: MRR/ARR & SaaS Analytics​

As a Super Admin, I want to track Monthly Recurring Revenue (MRR), Annual Recurring Revenue (ARR), churn rate, and expansion revenue, So that I can monitor business health and make data-driven growth decisions.

Priority: P1 | Points: 8 | Sprint: 4 | Status: Not Started

Implementation Status​

Not started. Financial metrics are currently tracked manually in spreadsheets. Needs: automated MRR calculation from active subscriptions, ARR projection, churn tracking (cancelled/suspended tenants), expansion revenue (plan upgrades), contraction revenue (plan downgrades), and cohort analysis.

Acceptance Criteria​

Scenario: View SaaS metrics dashboard
Given 120 active tenants across all plan tiers
When the super admin opens the SaaS analytics dashboard
Then the following metrics are displayed:
| Metric | Value |
| Active Tenants | 120 |
| MRR | INR 18,50,000 |
| ARR | INR 2,22,00,000 |
| New MRR (this month) | INR 1,20,000 |
| Churned MRR (this month) | INR 45,000 |
| Expansion MRR (upgrades) | INR 60,000 |
| Net New MRR | INR 1,35,000 |
| Monthly Churn Rate | 2.4% |
| ARPU (Avg Revenue/Tenant) | INR 15,417 |
And a trend chart shows MRR over the last 12 months
And a cohort chart shows retention by signup month

Scenario: Track churn reasons
Given 3 tenants cancelled their subscriptions in February
When the churn analysis is viewed
Then each churned tenant shows:
| Tenant | Plan | MRR Lost (INR) | Reason | Duration |
| Budget Inn Delhi | Budget | 4,999 | Price too high | 3 months |
| Star Lodge | Professional | 14,999 | Switched competitor | 8 months |
| Palm Resort | Budget | 4,999 | Business closed | 2 months |
And churn reasons are categorized for aggregate analysis
And a recommendation is shown: "2 of 3 churns are price-related - consider retention offers"

Scenario: Revenue forecast
Given current MRR is INR 18,50,000 and growth rate is 8% MoM
When the super admin views the forecast
Then a 12-month projection shows:
| Month | Projected MRR (INR) |
| April | 19,98,000 |
| May | 21,58,000 |
| June | 23,30,000 |
| ... | ... |
| March'27 | 47,50,000 |
And the projection assumes constant churn rate and growth rate
And the super admin can adjust assumptions (growth rate, churn) for scenario planning

US-019-09: Tenant Data Export​

As a Super Admin, I want to export all data for a specific tenant in a machine-readable format, So that the platform complies with data portability requirements and tenants can migrate if needed.

Priority: P2 | Points: 8 | Sprint: 5 | Status: Not Started

Implementation Status​

Not started. Data export requires: querying all tenant-scoped tables (reservations, guests, folios, invoices, housekeeping, banquet events, etc.), packaging into structured format (JSON/CSV), handling file sizes (potentially large for long-running tenants), and providing a secure download link. Must comply with India's Digital Personal Data Protection Act (DPDPA) 2023.

Acceptance Criteria​

Scenario: Export tenant data for migration
Given tenant "Hotel Sapphire, Pune" requests a full data export
When the super admin initiates the export
Then the system packages all tenant data:
| Data Category | Format | Records |
| Reservations | JSON | 15,432 |
| Guest Profiles | JSON | 8,210 |
| Folios/Invoices | JSON | 12,875 |
| Housekeeping | JSON | 45,000 |
| Banquet Events | JSON | 342 |
| Channel Mappings | JSON | 40 |
| Configuration | JSON | 1 |
And the export is compressed into a ZIP file
And a secure download link is generated (valid for 72 hours)
And the tenant admin is notified when the export is ready
And personal data is marked as per DPDPA requirements

Scenario: Scheduled periodic export for compliance
Given tenant "Luxury Chain" requires monthly data backups for regulatory compliance
When the super admin configures a monthly export schedule
Then on the 1st of each month, a full data export is generated automatically
And the export is stored in the tenant's designated S3 bucket
And an export log is maintained with file size, record counts, and checksum

US-019-10: White-Labeling​

As a Super Admin, I want to configure custom branding (logo, colors, domain) per tenant, So that hotels can present HMP as their own branded system to staff and guests.

Priority: P3 | Points: 13 | Sprint: 6 | Status: Not Started

Implementation Status​

Not started. White-labeling requires: per-tenant theme configuration (primary color, secondary color, logo URL, favicon), custom domain mapping (CNAME/DNS), email sender customization (from address, reply-to), and booking engine branding. The dashboard and booking engine need dynamic theme loading based on tenant context.

Acceptance Criteria​

Scenario: Configure custom branding for tenant
Given tenant "The Taj Group" wants their branding on the dashboard
When the super admin configures:
| Field | Value |
| Primary Color | #C4A265 (Taj Gold) |
| Secondary Color | #1A1A2E (Taj Dark Blue) |
| Logo URL | https://cdn.tajhotels.com/logo |
| Favicon URL | https://cdn.tajhotels.com/icon |
| Dashboard Title | Taj Hotel Management System |
Then all users of "The Taj Group" tenant see the custom branding
And the login page shows the Taj logo and colors
And the dashboard header displays "Taj Hotel Management System"
And email notifications use Taj branding in the header/footer

Scenario: Configure custom domain
Given tenant "The Taj Group" wants to use pms.tajhotels.com
When the super admin adds custom domain "pms.tajhotels.com"
And The Taj Group configures a CNAME record pointing to hmpcloud.com
Then users accessing pms.tajhotels.com see the Taj-branded dashboard
And SSL certificate is automatically provisioned (Let's Encrypt)
And the booking engine at booking.tajhotels.com also reflects Taj branding

US-019-11: Tenant Communication & Announcements​

As a Super Admin, I want to send platform announcements and maintenance notifications to all or selected tenants, So that tenants are informed about updates, downtime, and new features.

Priority: P2 | Points: 5 | Sprint: 5 | Status: Partial

Implementation Status​

Basic announcement model exists in the database. Display in tenant dashboard as a banner/notification bell is partially implemented. Email broadcast to tenant admins not connected. No scheduling or targeting (all or selected tenants) in the UI.

Acceptance Criteria​

Scenario: Send maintenance notification
Given a planned maintenance window on March 10, 2026 from 2:00 AM to 4:00 AM IST
When the super admin creates an announcement:
| Field | Value |
| Title | Scheduled Maintenance - March 10 |
| Message | HMP will be under maintenance from 2:00 AM to 4:00 AM IST on March 10. During this period, the platform will be unavailable. We apologize for the inconvenience. |
| Priority | High |
| Target | All Tenants |
| Channels | Dashboard Banner + Email |
| Schedule | Immediately + reminder 24 hours before |
Then all tenant admin users see the banner on their dashboard
And an email is sent to all tenant admin email addresses
And a reminder email is sent on March 9 at 2:00 AM IST
And the announcement is logged with delivery statistics

Scenario: Feature release announcement to specific plan tiers
Given a new AI module is being released for Enterprise and Chain plan tenants
When the super admin creates a targeted announcement:
| Field | Value |
| Title | New: AI Revenue Optimization Module |
| Target | Enterprise and Chain plan tenants only |
Then only tenants on Enterprise and Chain plans receive the announcement
And Budget and Professional tenants do not see the announcement
And the announcement includes a "Learn More" link to documentation

Document generated: 2026-03-05 | Epic Owner: Platform Engineering Lead | Review Cycle: Bi-weekly