Iris Portal Configuration Settings
The Iris Portal is the front-end gateway for Olympus-Grid’s micro-frontend architecture. It enables dynamic routing of domain-based requests to appropriate static resource bundles, allowing virtually unlimited site deployments from a single configuration file.
The configuration allows a flexible front-end routing engine for Olympus-Grid that enables micro-frontend rendering across multiple domains and namespaces using declarative routing rules. Its core power lies in its ability to host unlimited client-facing sites through a single JSON configuration file, with clean separation of resources and namespaces.
This document outlines all configuration options available within the Iris Portal JSON model, including default settings, router rules, and architectural considerations.
Default Site Settings
{
"pageTitle": "Iris | Olympus-Grid",
"portalName": "Iris",
"bundleNamespace": "",
"bundleResource": "portal",
"allowedOrigins": "https://app.olympus-grid.com\nhttps://support.olympus-grid.com",
"crossSiteAuthProvider": "https://auth.olympus-grid.com",
"allowCrossSiteAuth": true,
"proteusLeadObject": "sfLead",
"allowBundleDomain": true,
"bannerTimeOff": "2025-01-22 11:58:00",
"bannerTimeOn": "2025-01-20 11:58:00",
"bannerCanClose": true,
"textColor": "#000000",
"bannerColor": "#FFAB00",
"bannerText": "We are performing scheduled maintenance on 01/25/2026. We should be back online shortly after the maintenance.",
"banner": true,
"maintenanceMode": true,
"maintenanceImageUrl": "https://smearch-media-dev-us-west-2.s3.us-west-2.amazonaws.com/public/assets/img/portal.jpg",
"maintenanceModeText": "Temporarily Down for Maintenance",
"maintenanceModeSubText": "We are performing scheduled maintenance. We should be back online shortly.",
"maintenanceModeCanClose": true,
"maintenanceModeBypass": "portal",
"bundleId": ".jlxlpcnf"
}
Portal Metadata
pageTitle
string
Sets the page’s browser tab title. Example: `"Iris
portalName
string
Short display name for the portal (used in branding and headers). Example: "Iris"
Bundle Configuration
bundleResource
string
The name of the resource bundle to load. Example: "portal"
bundleNamespace
string
Namespace under which the bundle is loaded. An empty string (""
) implies default behavior or legacy mode.
bundleId
string
Optional bundle version or identifier (e.g., a cache buster or build hash). Example: ".jlxlpcnf"
allowBundleDomain
boolean
Whether to allow loading of resource bundles from domains (e.g., CDNs or external asset sources).
Cross-Site Authentication Settings
allowedOrigins
string
(newline-separated list)
Specifies the origins allowed to interact with this portal. Each origin must be listed on a new line. Example:https://app.olympus-grid.comhttps://support.olympus-grid.com
crossSiteAuthProvider
string
URL of the external authentication provider used for cross-site login. Example: https://auth.olympus-grid.com
allowCrossSiteAuth
boolean
Enables (true
) or disables (false
) cross-site authentication.
Maintenance Configuration
maintenanceMode
boolean
Enables maintenance mode. When true
, users may see a maintenance screen.
maintenanceImageUrl
string
URL to a branded image shown during maintenance.
maintenanceModeText
string
Headline text shown during maintenance. Example: "Temporarily Down for Maintenance"
maintenanceModeSubText
string
Additional explanation text.
maintenanceModeCanClose
boolean
Allows users to dismiss the maintenance overlay, if supported.
maintenanceModeBypass
string
Path or keyword that bypasses maintenance mode (e.g., for internal or admin access).
Banner Configuration
banner
boolean
Enables the banner message UI.
bannerText
string
Message displayed to users. Often used for maintenance notifications.
bannerColor
string
Background color for the banner, in hex format. Example: "#FFAB00"
textColor
string
Text color used within the banner. Example: "#000000"
bannerCanClose
boolean
Allows users to dismiss the banner manually.
bannerTimeOn
string
Time when the banner becomes visible (format: YYYY-MM-DD HH:mm:ss
).
bannerTimeOff
string
Time when the banner is hidden.
Routing Rules
Router rules dynamically determine which static bundle to serve based on domain and traffic conditions. Each rule is evaluated in order of sequence
.
{
"description": "100% traffic from domain",
"sequence": 100,
"active": true,
"conditions": {
"domain": "app.olympus-grid.com",
"ip": "39.37.187.50",
"header": "header[x-user-role] = VIP",
"cookie": "cookie[ab] = A"
},
"percent": 100,
"bundleResource": "portal",
"bundleNamespace": "og_node_beta_1",
"startTime": "2025-07-31T19:00:00.000Z",
"endTime": "2025-09-29T19:00:00.000Z",
"maintenanceMode": true,
"maintenanceImageUrl": "https://smearch-media-dev-us-west-2.s3.us-west-2.amazonaws.com/public/assets/img/portal.jpg",
"maintenanceModeText": "Temporarily Down for Maintenance",
"maintenanceModeSubText": "We are performing scheduled maintenance. We should be back online shortly.",
"maintenanceModeCanClose": true,
"maintenanceModeBypass": "portal",
"banner": true,
"bannerText": "We are performing scheduled maintenance on 01/25/2026. We should be back online shortly after the maintenance.",
"bannerColor": "#FFAB00",
"bundleDomain": "https://d360pm4g7qodzt.cloudfront.net/assets/iris/olympus_grid/PROD",
"bundleId": ".jlxlpcnf"
}
Router Rule Settings
General Settings
description
string
Human-readable name for the configuration scenario. Useful for admin visibility and debugging. Example: "100% traffic from domain"
sequence
number
Priority order when evaluating multiple rules. Lower values have higher priority.
active
boolean
Whether this configuration is currently enabled. If false
, it will be ignored even if conditions match.
percent
number
Percentage of eligible users (matching the conditions
) to whom this configuration will apply. Example: 100
= apply to all matched users.
Targeting Conditions
These define who will receive the configuration based on request attributes.
conditions.domain
string
Domain the request must originate from. Example: "app.olympus-grid.com"
conditions.ip
string
IP address filter to restrict the configuration to specific clients. Example: "39.37.187.50"
conditions.header
string
HTTP header condition used for feature targeting (e.g. user roles, client version). Example: "header[x-user-role] = VIP"
conditions.cookie
string
Cookie-based targeting for A/B testing or personalized experiences. Example: "cookie[ab] = A"
Bundle Configuration
These keys define what frontend bundle to load and where to fetch it from.
bundleResource
string
Identifier for the application module. Example: "portal"
bundleNamespace
string
Logical namespace to separate bundles (e.g. environment-specific: dev, beta, prod). Example: "og_node_beta_1"
bundleDomain
string
Full CDN or asset domain for serving bundle resources. Example: CloudFront URL for production bundles.
bundleId
string
Optional unique identifier or hash used to differentiate bundle versions. May support cache busting or version locking. Example: ".jlxlpcnf"
Time-Based Activation
startTime
ISO 8601 string
UTC time at which the configuration becomes active. Example: "2025-07-31T19:00:00.000Z"
endTime
ISO 8601 string
UTC time after which the configuration is deactivated. Example: "2025-09-29T19:00:00.000Z"
Maintenance Configuration
This section customizes the look and logic of the maintenance experience for users affected by this configuration.
maintenanceMode
true
Enables the maintenance overlay.
maintenanceImageUrl
URL to a hosted image
Provides a branded maintenance visual.
maintenanceModeText
"Temporarily Down for Maintenance"
Headline message during downtime.
maintenanceModeSubText
"We are performing scheduled maintenance..."
Further explanation for users.
maintenanceModeCanClose
true
Users can close/dismiss the message (if UI supports it).
maintenanceModeBypass
"portal"
Allows internal access via a known bypass path for devs or admins.
Banner Configuration
Key
Type
Description
banner
boolean
Enables the banner notification UI element.
bannerText
string
Content of the banner. Often used for downtime warnings or system status.
bannerColor
string
HEX color for the banner’s background. Example: "#FFAB00"
Micro Front-End Architecture
Each route can serve a completely different application (or version) via:
Same Namespace: Default bundles deployed in the host org.
Cross-Namespace: Serve bundles from other managed packages.
Development Mode: If
allowBundleDomain
is true, the bundle can come directly from the developers local workstation supporting rapid development with hot reloading.
This makes it easy to:
White-label portals per customer
A/B test frontend bundles
Canary or multi-variable testing
Roll out region-specific portals
Allow customers to own their own deployment
Runtime switching between versions
Seamless multitenant experiences
Allow react developers to iterate faster than ever
All from a single Force.com Site (or Digital Experience)
Sticky Sessions
Once a routing rule has responded with a bundle, that bundle will continue to be served without further evaluation of the routing rules for the duration of the sticky session (currently 24 hours).
To remove the sticky session manually, delete the bundleResource cookie
SSL Certificate Considerations
Salesforce currently supports a maximum of 50 active SSL certificates per org. To scale beyond this:
Use wildcard certificates (e.g.,
*.olympus-grid.ai) (if supported by Salesforce)
Delegate some routing to CloudFront or other CDNs
Utilize the Salesforce domain name endpoint which is already protected by TLS
Consider routing low-traffic or internal domains without SSL termination at Salesforce
Best Practices
Use consistent domain naming (e.g.,
region.client.olympus-grid.ai
)Keep
bundleNamespace
blank for client-hosted bundlesApply
sequence
carefully to ensure fallbacks are respectedUse
percent
for rolling deployments or canary testing
Known Limitations
SSL Certificates
50
Limited by Salesforce certificates for custom domains. Consider using a wildcard or external CDN (if supported)
Rule Count
Not hard-limited
Practical limit depends on performance and deployment size.
Static Resource Size
5MB per file
Use GZIP + modular bundling.
Salesforce does not support installing full certificate chains (i.e., root + intermediate certs).
Only the main certificate.pem
file is supported, and it's expected to be leaf-only.
As a result, some browsers or org-level security tools may flag certificates as incomplete or untrusted because they can’t verify the full chain when hitting a Salesforce-hosted domain (e.g., *.force.com
, *.live.siteforce.com
).
⚠️ Corporate networks with strict SSL validation might show warnings.
⚠️ Browsers may display untrusted certs if intermediate roots are missing and cannot be inferred.
✅ Most modern systems will still work, since browsers typically cache or infer the root chain.
We have not encountered issues, however some browsers or organizational policies may flag security warnings. Workaround:
Use CDNs like CloudFront or Cloudflare to terminate SSL externally, where you can install full chains.
Last updated