Files
lamp/docs/architecture.md

1.8 KiB

Project Architecture

This project uses Expo Router and follows a route-first + feature-module structure.

Directory Design

  • app/: Routing layer only (Expo Router pages and layouts).
  • features/: Business modules grouped by domain.
  • providers/: App-level providers and bootstrap orchestration.
  • components/: Reusable presentational components.
  • hooks/: Shared generic hooks (cross-feature).
  • constants/: Shared constants and theme tokens.

Current Module Split

  • app/_layout.tsx

    • Root navigation composition.
    • Theme provider and route stack config.
    • App bootstrap provider wiring.
  • app/index.tsx and app/modal.tsx

    • Route shells only.
    • Delegate screen implementation to features/*/screens.
  • providers/app-bootstrap-provider.tsx

    • Central app bootstrap orchestration.
    • Triggers feature bootstrap hooks.
  • features/im/openim-bootstrap.ts

    • OpenIM SDK initialization and listener registration.
    • One-time initialization guard.
    • Local data directory creation and reuse.
  • features/im/hooks/use-openim-bootstrap.ts

    • React lifecycle bridge for IM bootstrap.
  • features/home/screens/home-screen.tsx

    • Home page UI implementation.
  • features/system/screens/modal-screen.tsx

    • Modal page UI implementation.

Why This Structure

  • Keeps routing files focused on navigation.
  • Moves SDK side effects out of render paths.
  • Makes IM bootstrap testable and reusable.
  • Scales better when adding features/chat, features/contact, and features/conversation.

Next Suggested Refactors

  1. Move IM API wrappers into features/im/services/.
  2. Add features/chat/hooks/use-chat-list.ts and features/chat/hooks/use-messages.ts.
  3. Add route groups when chat modules are introduced, for example app/(chat) and app/(auth).