Files
lamp/docs/architecture.md

55 lines
1.8 KiB
Markdown

# 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)`.