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)
Executive Summary
Section titled βExecutive Summaryβ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
-mobileproject is ONE Nx project that builds BOTH Android and iOS - Mobile projects have separate
android,ios,run-android,run-iostargets (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/webformat - Others use
normalized-name-mobile/webformat (e.g.,greenhost_appβgreenhost-mobile) - Both are validβNx handles normalization
Detailed Breakdown
Section titled βDetailed Breakdownβ1. Brand Apps Inventory
Section titled β1. Brand Apps Inventoryβ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)2. Nx Detected Projects (86 total)
Section titled β2. Nx Detected Projects (86 total)βApp Projects (62 total)
Section titled βApp Projects (62 total)β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)Package Projects (23 total)
Section titled βPackage Projects (23 total)β@cloudalt-frontend/hooks@cloudalt-frontend/services@cloudalt-frontend/testing@cloudalt-frontend/theme@cloudalt-frontend/types@cloudalt/assets@cloudalt/universal-typesbrandscommondesign-tokensstorybookuiui-altfinderui-bonjour-servicesui-greenhostui-guestroomui-homestayui-hostguestui-pride-cityui-room-lgbtui-roommateui-stay-matchui-webRoot Project (1 total)
Section titled βRoot Project (1 total)βcloudalt-frontendArchitecture Confirmation
Section titled βArchitecture Confirmationββ
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-mobileproject shows these targets:android- Build for Androidios- Build for iOSrun-android- Run on Android device/emulatorrun-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 codeKey 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 β
Anomalies to Address
Section titled βAnomalies to Addressβ1. Duplicate: @cloudalt/pinkguest-mobile
Section titled β1. Duplicate: @cloudalt/pinkguest-mobileβ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
2. Naming: ui-web Package
Section titled β2. Naming: ui-web Packageβ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
-websuffix - Causes web project count to be 31 instead of 30
Recommendation:
- Consider renaming to
ui-shared-weborui-web-componentsto avoid confusion - OR: Update validation scripts to exclude package projects from app counts
3. Naming Variations
Section titled β3. Naming VariationsβIssue: Inconsistent normalization of app names to project names
greenhost_appβgreenhost-mobile,greenhost-webpride_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
Validation Commands
Section titled βValidation CommandsβCheck Current Project Count
Section titled βCheck Current Project Countβyarn nx show projects --json | jq -r '.[]' | wc -lList All Projects by Type
Section titled βList All Projects by Typeβ# 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 projectsyarn 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β# Example: Check any mobile projectyarn nx show project pinkguest-mobile --json | jq '.targets | keys | map(select(. == "android" or . == "ios"))'# Should output: ["android", "ios"]Find Brand Apps and Their Projects
Section titled βFind Brand Apps and Their Projectsβ# List all brand apps in apps/ directoryfind apps -type d -maxdepth 3 | grep -E "apps/[^/]+/[^/]+$" | sort
# Count themfind apps -type d -maxdepth 3 | grep -E "apps/[^/]+/[^/]+$" | wc -l# Should be: 30Next Steps
Section titled βNext Stepsβ- β
RESOLVED: Confirmed
-mobileprojects handle both Android + iOS via separate targets - Clean Up: Investigate and potentially remove duplicate
@cloudalt/pinkguest-mobileincompany/cloudalt/ - Clarify: Decide if
packages/ui-webshould be renamed to avoid naming confusion - Document: Add ADR for mobile platform architecture (1 mobile project = Android + iOS targets)
- Proceed: Continue with redundant
project.jsoncleanup (separate task, not blocked by this)
Impact on Current Work
Section titled βImpact on Current Workββ
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
Appendix: Full Project List
Section titled βAppendix: Full Project ListβTo see the complete list of all 86 Nx projects:
yarn nx show projects --json | jq -r '.[]' | sortReport 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