PromucFlow_constructor/app/client/src
Jacques Ikot a93521b87f
feat: add multi-org domain tracking (#40938)
# 🏢 Multi-Org Domain Tracking System

## 🎯 Problem Statement

Users with access to multiple Appsmith organizations often forget the
exact domain names of their different workspaces (e.g.,
`company1.appsmith.com`, `team2.appsmith.com`). This creates friction
during login as users need to remember or guess the specific subdomain
for each organization they belong to.

##  Solution Overview

This PR implements a lightweight domain tracking system that remembers
the organization domains users have successfully accessed in the last 30
days. When users visit `login.appsmith.com` or signup pages, they can
see and quickly navigate to their recently visited organizations.

## 🏗️ Technical Approach

### Why Cookies Over localStorage?

We chose **cookies with `.appsmith.com` domain** over localStorage for
the following critical reasons:

| Feature | Cookies | localStorage | Winner |
|---------|---------|--------------|--------|
| Cross-subdomain access |  `.appsmith.com` |  Origin-specific | 🍪
Cookies |
| Built-in expiration |  30-day TTL |  Manual cleanup | 🍪 Cookies |
| Storage requirements |  Small domains only |  Large capacity | 🤝
Both adequate |
| Browser support |  Universal |  Universal | 🤝 Both good |

### 🛠️ Implementation Details

#### Core Utility (`utils/multiOrgDomains.ts`)

```typescript
// Key configuration:
const COOKIE_NAME = "appsmith_recent_domains";
const EXPIRY_DAYS = 30;
const MAX_DOMAINS = 10;

interface DomainEntry {
  domain: string;      // e.g., "company.appsmith.com"
  timestamp: number;   // Unix timestamp
}
```

#### 📊 Domain Tracking Logic

- ** When**: Automatically triggered when users successfully reach
`/applications` page
- **📝 What**: Current domain (e.g., `company.appsmith.com`) + timestamp
- **🔍 Filtering**: Only tracks multi-org domains (excludes
`login.appsmith.com`)
- **🔄 Deduplication**: Prevents duplicate entries, moves existing
domains to top

## Automation

/ok-to-test tags="@tag.Authentication, @tag.Sanity"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/15676451597>
> Commit: 935ccef2d320e5c7641b1bd31c39d69068259914
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=15676451597&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Authentication, @tag.Sanity`
> Spec:
> <hr>Mon, 16 Jun 2025 09:43:36 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced tracking and display of recently visited organization
domains for users, allowing quick access to previously signed-in
organizations.
- Added a section in the sign-up page to show recent domains with
organization names and direct login options.
- **Enhancements**
  - Improved messaging related to user sign-in and account status.
- Enabled multi-organization domain tracking on the applications page
for better domain management.
- **Chores**
  - Updated internal messaging constants for consistency and future use.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-16 04:00:42 -07:00
..
actions Merge branch 'release' into feat/reactive-actions-run-behaviour 2025-05-07 21:29:10 +01:00
api fix: logout user if the session has expired between page switches (#40718) 2025-05-21 16:32:19 +05:30
assets feat: add action resp viz (#39690) 2025-03-12 13:59:36 +01:00
ce feat: add multi-org domain tracking (#40938) 2025-06-16 04:00:42 -07:00
components fix: code editor changes (#40239) 2025-06-09 11:21:27 +05:30
constants fix: Reverting the change to add debounce to onValueChange for input widgets (#40922) 2025-06-11 12:48:54 +00:00
Datasource/components
ee chore: Update flags for self-hosting agents (#40639) 2025-05-13 17:36:58 +05:30
enterprise
entities chore: Updating the spelling for runBehaviour (#40490) 2025-05-02 17:58:26 +05:30
git chore: re-instate status call for protected branches in git connected apps (#40880) 2025-06-06 13:53:37 +05:30
git-artifact-helpers/application chore: git pkg - package integration with git (#39342) 2025-02-19 13:42:58 +01:00
globalStyles
hooks chore: Updating google authentication config to support Multi Org flow on EE (#39985) 2025-03-31 18:33:11 +05:30
icons chore:delete unused files (#36368) 2024-09-19 16:01:03 +03:00
IDE chore: Updating the dropdown width for the run behavior settings of JS object (#40691) 2025-05-19 19:33:27 +05:30
instrumentation fix: Upgrade packages (#40935) 2025-06-16 12:12:55 +05:30
layoutSystems chore: fix container query bug in ai chat widget (#40607) 2025-05-08 13:37:58 +05:30
mockResponses
mocks chore: delete unused code (#36461) 2024-09-23 13:52:00 +03:00
navigation chore: update import of AppState to DefaultReduxState (#40494) 2025-05-01 15:53:37 +05:30
pages feat: add multi-org domain tracking (#40938) 2025-06-16 04:00:42 -07:00
PluginActionEditor chore: added automatic option to run behaviour behind feature flag (#40608) 2025-05-16 16:29:31 +05:30
plugins/Linting fix: Reduce cycle deps by removing wrong exports (#39268) 2025-02-14 18:26:31 +05:30
polyfills
reducers chore: Changes for supporting input in UI modules property pane (#40546) 2025-05-07 19:21:09 +05:30
reflow
sagas fix: enhance null handling in action parameter evaluation and rendering (#40910) 2025-06-11 09:53:36 -05:00
selectors chore: Update list and form widget to work with UI modules (#40711) 2025-05-22 18:02:47 +05:30
templates
theme
usagePulse fix: Upgrade packages (#40935) 2025-06-16 12:12:55 +05:30
utils feat: add multi-org domain tracking (#40938) 2025-06-16 04:00:42 -07:00
WidgetProvider chore: Update list and form widget to work with UI modules (#40711) 2025-05-22 18:02:47 +05:30
WidgetQueryGenerators fix: JSON form generate form flow broken for tables without primaryKey and READ_WRITE permissions (#40275) 2025-04-24 03:57:03 -07:00
widgets fix: Upgrade packages (#40935) 2025-06-16 12:12:55 +05:30
workers chore: add feature flag for app computation cache (#40543) 2025-05-05 17:55:25 +05:30
App.css
AppErrorBoundry.tsx chore: refactor faro (CE) (#40350) 2025-04-29 10:32:36 +05:30
config.d.ts
Globals.d.ts
index.css fix: Revert "Revert "feat: Added focus ring for focus visible (#37700)" (#… (#38655) 2025-02-03 11:12:29 +05:30
index.tsx chore: update import of AppState to DefaultReduxState (#40494) 2025-05-01 15:53:37 +05:30
LandingScreen.tsx fix: handle undefined user object in LandingScreen for non-existent cloud billing domains (#40855) 2025-06-04 06:02:30 -07:00
preload-route-chunks.ts
react-app-env.d.ts chore: Eject CRA (#39264) 2025-02-14 14:24:41 +05:30
RouteChangeListener.tsx
serviceWorker.ts chore: add etag caching in consolidated api for application view mode (#38873) 2025-01-30 13:54:34 +05:30
store.ts chore: update import of AppState to DefaultReduxState (#40494) 2025-05-01 15:53:37 +05:30
wdyr.ts