One way of organising the app that I felt the right balance across small and big apps is this
| app (for expo router)
|-- (public)
|-- (auth)
|-- (protected)
|-- (tabs)
|-- home
|-- settings
|-- profile
|-- notifications
|-- messages
|-- (common)
| src
|-- components
|-- containers
|-- providers
|-- state-management
|-- infra
|-- storage
|-- database
|-- services (apis)
|-- utils