Skip to content

Nx Project Count Investigation

Date: October 20, 2025 (Updated post-division-consolidation)
Previous: 87 projects (before consolidation)
Current: 88 projects (after adding ui-stay-overnight)


Finding: We have 88 Nx projects after division consolidation (October 2025).

Division Consolidation (Oct 2025):

  • Consolidated 4 divisions (Homestay, Guestroom, Greenhost, Room LGBT) β†’ Stay Overnight
  • Moved HostGuest to internal-platform (not customer-facing)
  • Result: 10 divisions β†’ 6 divisions + internal platform

Key Architecture Insight:

  • Each -mobile project is ONE Nx project that builds BOTH Android and iOS
  • Mobile projects have separate android, ios, run-android, run-ios targets (build commands)
  • Nx does NOT create separate Android and iOS projectsβ€”it’s one project with multiple platform targets

Current Architecture:

  • 30 brand apps Γ— 2 Nx projects per app (-mobile + -web) = 60 app projects
  • 25 package projects (including new ui-stay-overnight, deprecated packages)
  • 1 root project (cloudalt-frontend)
  • 2 docs/tooling projects
  • Total: 88 projects βœ“

Naming Variations:

  • Some apps use app_name-mobile/web format
  • Others use normalized-name-mobile/web format (e.g., greenhost_app β†’ greenhost-mobile)
  • Both are validβ€”Nx handles normalization

Total brand apps in apps/ directory: 30

Division: altfinder (3 apps)
- altFinder_app
- orangeFinder
- pinkFinder
Division: bonjour-services (3 apps)
- bonjour_it_com
- bonjour_locker
- lingua_it_com
Division: stay-overnight (13 apps) πŸ†• CONSOLIDATED
πŸ“ Former Homestay brands:
- homestay_international
- homestay_lgbt
- stayovernight
πŸ“ Former Guestroom brands:
- guestroom_city
- guestroom_help
- guestroom_host
- guestroom_lgbt
- guestroom_pink
- guestroom_travel
πŸ“ Former Greenhost brand:
- greenhost_app ⚠️ MISSING iOS
πŸ“ Former Room LGBT brands:
- room_lgbt
- roomlgbt_app
- rooms_gay
Division: pride-city (1 app)
- pride_city_app ⚠️ MISSING iOS
Division: roommate (3 apps)
- roommate_guru
- roommate_help
- roommate_works
Division: stay-match (5 apps)
- orangeguest
- pinkguest
- purpleguest
- rainbowhost
- staymatch_app
Internal Platform (2 apps) πŸ”§ NON-CUSTOMER-FACING
- hostguest_click (moved from division)
- hostguest_cloud (moved from division)

Mobile Projects (31):

βœ“ altFinder_app-mobile
βœ“ bonjour_it_com-mobile
βœ“ bonjour_locker-mobile
βœ“ guestroom_city-mobile
βœ“ guestroom_help-mobile
βœ“ guestroom_host-mobile
βœ“ guestroom_lgbt-mobile
βœ“ guestroom_pink-mobile
βœ“ guestroom_travel-mobile
βœ“ greenhost-mobile (normalized from greenhost_app)
βœ“ homestay_international-mobile
βœ“ homestay_lgbt-mobile
βœ“ hostguest_cloud-mobile
βœ“ hostguest-click-mobile
βœ“ lingua_it_com-mobile
βœ“ orangeFinder-mobile
βœ“ orangeguest-mobile
βœ“ pinkFinder-mobile
βœ“ pinkguest-mobile
βœ“ pride_city_app-mobile
βœ“ purpleguest-mobile
βœ“ rainbowhost-mobile
βœ“ room_lgbt-mobile
βœ“ roomlgbt_app-mobile
βœ“ roommate_guru-mobile
βœ“ roommate_help-mobile
βœ“ roommate_works-mobile
βœ“ rooms_gay-mobile
βœ“ staymatch_app-mobile
βœ“ stayovernight-mobile
⚠️ @cloudalt/pinkguest-mobile (duplicate in company/cloudalt/)

Web Projects (31):

βœ“ altFinder_app-web
βœ“ bonjour_it_com-web
βœ“ bonjour_locker-web
βœ“ guestroom_city-web
βœ“ guestroom_help-web
βœ“ guestroom_host-web
βœ“ guestroom_lgbt-web
βœ“ guestroom_pink-web
βœ“ guestroom_travel-web
βœ“ greenhost-web (normalized from greenhost_app)
βœ“ homestay_international-web
βœ“ homestay_lgbt-web
βœ“ hostguest_cloud-web
βœ“ hostguest-click-web
βœ“ lingua_it_com-web
βœ“ orangeFinder-web
βœ“ orangeguest-web
βœ“ pinkFinder-web
βœ“ pinkguest-web
βœ“ pride-city-web (normalized from pride_city_app)
βœ“ purpleguest-web
βœ“ rainbowhost-web
βœ“ room_lgbt-web
βœ“ roomlgbt_app-web
βœ“ roommate_guru-web
βœ“ roommate_help-web
βœ“ roommate_works-web
βœ“ rooms-gay-web
βœ“ staymatch_app-web
βœ“ stayovernight-web
⚠️ ui-web (package project, not brand app)
@cloudalt-frontend/hooks
@cloudalt-frontend/services
@cloudalt-frontend/testing
@cloudalt-frontend/theme
@cloudalt-frontend/types
@cloudalt/assets
@cloudalt/universal-types
brands
common
design-tokens
storybook
ui
ui-altfinder
ui-bonjour-services
ui-greenhost
ui-guestroom
ui-homestay
ui-hostguest
ui-pride-city
ui-room-lgbt
ui-roommate
ui-stay-match
ui-web
cloudalt-frontend

βœ… Platform Strategy: -mobile = Android + iOS Combined

Section titled β€œβœ… Platform Strategy: -mobile = Android + iOS Combined”

Verified: Each -mobile project is ONE Nx project that handles BOTH Android and iOS platforms.

Evidence:

  • Inspecting pinkguest-mobile project shows these targets:
    • android - Build for Android
    • ios - Build for iOS
    • run-android - Run on Android device/emulator
    • run-ios - Run on iOS simulator/device
    • Plus: start, build, export, test, etc.

Architecture:

apps/stay_match/pinkguest/
β”œβ”€β”€ mobile/ ← ONE Nx project: "pinkguest-mobile"
β”‚ β”œβ”€β”€ android/ ← Platform-specific native code
β”‚ β”œβ”€β”€ ios/ ← Platform-specific native code
β”‚ β”œβ”€β”€ src/ ← Shared React Native code
β”‚ └── package.json ← Defines "android" and "ios" scripts
└── web/ ← ONE Nx project: "pinkguest-web"
└── src/ ← Web-specific code

Key Insight:

  • Nx counts this as 2 projects (mobile + web), not 3
  • The mobile project has multiple platform targets (Android, iOS)
  • This is standard for React Native + Expo monorepos

Math:

  • 30 brand apps Γ— 2 Nx projects per app = 60 app projects
  • 23 packages + 1 root + 2 anomalies = 26 other projects
  • Total: 86 projects βœ“

Issue: Extra mobile project detected at company/cloudalt/cloudalt-frontend/apps/stay_match/pinkguest/mobile

Impact:

  • Causes mobile project count to be 31 instead of 30
  • Potential confusion about canonical app location

Recommendation:

  • Verify if company/cloudalt/ is legacy/archived code
  • Remove company/cloudalt/cloudalt-frontend/ folder if not needed
  • Ensure all active brand apps live in canonical apps/ directory

Issue: Package project packages/ui-web ends with -web suffix, matching brand app naming pattern

Impact:

  • Appears in counts of β€œweb projects” when filtered by -web suffix
  • Causes web project count to be 31 instead of 30

Recommendation:

  • Consider renaming to ui-shared-web or ui-web-components to avoid confusion
  • OR: Update validation scripts to exclude package projects from app counts

Issue: Inconsistent normalization of app names to project names

  • greenhost_app β†’ greenhost-mobile, greenhost-web
  • pride_city_app β†’ pride_city_app-mobile, pride-city-web

Impact:

  • Makes project discovery slightly harder
  • No functional issueβ€”Nx handles it correctly

Recommendation:

  • Document that Nx auto-normalizes some names (underscores β†’ hyphens)
  • Consider standardizing on one format in future app generation

Terminal window
yarn nx show projects --json | jq -r '.[]' | wc -l
Terminal window
# Mobile projects (should be ~30, currently 31 due to duplicate)
yarn nx show projects --json | jq -r '.[]' | grep -E "\-mobile$"
# Web projects (should be ~30, currently 31 due to ui-web package)
yarn nx show projects --json | jq -r '.[]' | grep -E "\-web$"
# Package projects
yarn nx show projects --json | jq -r '.[]' | grep -E "^(ui-|@cloudalt|brands|common|design-tokens|storybook)"

Verify Mobile Project Has Both Android and iOS Targets

Section titled β€œVerify Mobile Project Has Both Android and iOS Targets”
Terminal window
# Example: Check any mobile project
yarn nx show project pinkguest-mobile --json | jq '.targets | keys | map(select(. == "android" or . == "ios"))'
# Should output: ["android", "ios"]
Terminal window
# List all brand apps in apps/ directory
find apps -type d -maxdepth 3 | grep -E "apps/[^/]+/[^/]+$" | sort
# Count them
find apps -type d -maxdepth 3 | grep -E "apps/[^/]+/[^/]+$" | wc -l
# Should be: 30

  1. βœ… RESOLVED: Confirmed -mobile projects handle both Android + iOS via separate targets
  2. Clean Up: Investigate and potentially remove duplicate @cloudalt/pinkguest-mobile in company/cloudalt/
  3. Clarify: Decide if packages/ui-web should be renamed to avoid naming confusion
  4. Document: Add ADR for mobile platform architecture (1 mobile project = Android + iOS targets)
  5. Proceed: Continue with redundant project.json cleanup (separate task, not blocked by this)

βœ… This investigation does NOT block the redundant project.json cleanup:

  • The 11 ui-* packages cleanup is still safe to proceed
  • Plugin inference works regardless of project count
  • This is a separate architectural question about project structure

Key Takeaway:

  • 86 projects is the correct count for our architecture
  • Each mobile project handles both Android and iOS via separate build targets
  • No projects are actually missing

To see the complete list of all 86 Nx projects:

Terminal window
yarn nx show projects --json | jq -r '.[]' | sort

Report Generated: October 12, 2025
Status: βœ… RESOLVED - 86 projects is correct for 30 apps Γ— 2 Nx projects (mobile + web)
Next Actions: Clean up duplicate pinkguest-mobile, clarify ui-web naming, proceed with project.json cleanup