Adapted from the Echo (ExpoBase) reference structure. Source: https://docs.expobase.dev/guide/project-structure
🏗️ Project Structure
This page explains in detail the architecture and code organization in Echo, helping you understand where to find each element and how everything fits together.📂 Overview
Copy
├── app/
│ ├── (auth)/
│ │ ├── resetPassword.tsx
│ │ ├── sign-in.tsx
│ │ ├── sign-up.tsx
│ │ └── welcome.tsx
│ ├── (protected)/
│ │ ├── (tabs)/
│ │ │ ├── _layout.tsx
│ │ │ ├── ai.tsx
│ │ │ ├── index.tsx
│ │ │ ├── notifications.tsx
│ │ │ ├── offline.tsx
│ │ │ ├── payment.tsx
│ │ │ ├── premium.tsx
│ │ │ ├── profile.tsx
│ │ │ ├── settings.tsx
│ │ │ └── tasks.tsx
│ │ ├── _layout.tsx
│ │ ├── privacy-policy.tsx
│ │ └── terms-of-service.tsx
│ ├── onboarding/
│ │ ├── _layout.tsx
│ │ └── index.tsx
│ ├── _layout.tsx
│ ├── +not-found.tsx
│ └── index.tsx
├── assets/
│ ├── fonts/
│ │ ├── InstrumentSerif-Italic.ttf
│ │ └── InstrumentSerif-Regular.ttf
│ ├── icons/
│ │ ├── adaptive_icon.png
│ │ ├── icon_base.png
│ │ ├── icon_dark.png
│ │ └── icon_light.png
│ ├── logo/
│ │ ├── revenuecat.png
│ │ └── stripe.jpeg
│ ├── splashscreen/
│ │ ├── splashscreen_dark.png
│ │ └── splashscreen_light.png
│ └── icon.png
├── components/
│ ├── ai/
│ │ ├── AIThinkingLoader.tsx
│ │ ├── AutoResizingInput.tsx
│ │ ├── ChatHeader.tsx
│ │ ├── index.ts
│ │ ├── MessageActions.tsx
│ │ ├── MessageBubble.tsx
│ │ ├── PromptLabels.tsx
│ │ ├── ThinkingAnimation.tsx
│ │ └── TypewriterText.tsx
│ ├── auth/
│ │ ├── appleProviderButton.tsx
│ │ ├── EmailLoginForm.tsx
│ │ ├── EmailLoginToggle.tsx
│ │ ├── googleProviderButton.tsx
│ │ ├── index.ts
│ │ ├── Separator.tsx
│ │ └── SocialLoginButtons.tsx
│ ├── email/
│ │ └── buttonSendEmail.tsx
│ ├── layout/
│ │ └── LayoutWrapper.tsx
│ ├── notifications/
│ │ ├── DebugInfo.tsx
│ │ ├── DeviceInfoCard.tsx
│ │ ├── index.ts
│ │ ├── NotificationCenter.tsx
│ │ ├── NotificationHeader.tsx
│ │ ├── NotificationSettings.tsx
│ │ ├── PermissionStatusCard.tsx
│ │ ├── push.tsx
│ │ └── TestButtonsSection.tsx
│ ├── onboarding/
│ │ ├── index.ts
│ │ ├── NotificationSettings.tsx
│ │ ├── OnboardingFeatureCard.tsx
│ │ ├── OnboardingNavigationButtons.tsx
│ │ ├── OnboardingProgressBar.tsx
│ │ ├── OnboardingStep1.tsx
│ │ ├── OnboardingStep2.tsx
│ │ └── OnboardingStep3.tsx
│ ├── payment/
│ │ ├── index.ts
│ │ ├── PaymentButton.tsx
│ │ ├── PaymentSheet.tsx
│ │ ├── paywall.tsx
│ │ └── stripeButtonPay.tsx
│ ├── premium/
│ │ ├── index.ts
│ │ ├── PaywallScreen.tsx
│ │ ├── PremiumGate.tsx
│ │ ├── PremiumStatus.tsx
│ │ └── RestorePurchaseButton.tsx
│ ├── profile/
│ │ ├── EditFieldModal.tsx
│ │ ├── index.ts
│ │ ├── ProfileActionsSection.tsx
│ │ ├── ProfileEditSection.tsx
│ │ ├── ProfileHeaderSection.tsx
│ │ ├── ProfileInfoSection.tsx
│ │ └── ProfileStatusSection.tsx
│ ├── settings/
│ │ ├── AssistanceSection.tsx
│ │ ├── index.ts
│ │ ├── NotificationsSection.tsx
│ │ ├── PreferencesSection.tsx
│ │ ├── ProfileSection.tsx
│ │ ├── SettingsRow.tsx
│ │ ├── SettingsSection.tsx
│ │ └── SubscriptionSection.tsx
│ ├── tasks/
│ │ ├── CreateTaskForm.tsx
│ │ ├── EditTaskModal.tsx
│ │ ├── index.ts
│ │ ├── StatusBadges.tsx
│ │ ├── TaskCard.tsx
│ │ └── TaskList.tsx
│ └── ui/
│ ├── avatar.tsx
│ ├── badge.tsx
│ ├── button.tsx
│ ├── card.tsx
│ ├── checkbox.tsx
│ ├── dialog.tsx
│ ├── dynamic-header.tsx
│ ├── header-menu.tsx
│ ├── header-title.tsx
│ ├── input.tsx
│ ├── label.tsx
│ ├── ProgressBar.tsx
│ ├── select.tsx
│ ├── sidebar.tsx
│ ├── table.tsx
│ ├── tabs.tsx
│ ├── text.tsx
│ └── toggle.tsx
├── config/
│ ├── i18n.ts
│ ├── linking.ts
│ └── supabase.ts
├── constants/
│ ├── colors.ts
│ ├── emailTemplates.ts
│ ├── navigation.ts
│ ├── notifications.ts
│ ├── onboarding.ts
│ ├── promptData.ts
│ └── quickActions.ts
├── context/
│ ├── AuthContext.tsx
│ ├── RevenuCatContext.tsx
│ ├── SidebarContext.tsx
│ ├── StripeContext.tsx
│ └── ThemeContext.tsx
├── fetch/
│ ├── profile.ts
│ └── tasks.ts
├── hooks/
│ ├── useAIChat.ts
│ ├── useCache.ts
│ ├── useColorScheme.ts
│ ├── useIconColors.ts
│ ├── useImageUpload.ts
│ ├── useNetworkStatus.ts
│ ├── useNotifications.ts
│ ├── useOnboarding.ts
│ ├── usePremiumStatus.ts
│ ├── useProfile.ts
│ ├── useSounds.ts
│ ├── useTasks.ts
│ ├── useTheme.tsx
│ └── useTranslation.ts
├── icons/
│ └── index.tsx
├── lib/
│ ├── storage/
│ │ ├── index.ts
│ │ ├── supabase.ts
│ │ └── zustand.ts
│
├── queryClient.ts
└── utils.ts
├── locales/
│ ├── en.json
│ ├── es.json
│ ├── fr.json
│ └── pt.json
├── stores/
│ ├── offlineStore.ts
│ ├── onboardingStore.ts
│ ├── profileStore.ts
│ └── README.md
├── supabase/
│ ├── functions/
│ │ ├── ai-completion/
│ │ │ └── index.ts
│ │ ├── create-payment-intent/
│ │ │ └── index.ts
│ │ ├── create-stripe-checkout/
│ │ │ └── index.ts
│ │ ├── resend-email/
│ │ │ └── index.ts
│ │ ├── send-notifications/
│ │ │ └── index.ts
│ │ └── stripe-webhooks/
│ │ └── index.ts
│
├── migrations/
│ └── 20250202000000_init_supabase.sql
│
├── templates/
│ └── invite.html
│
└── config.toml
📁 Main Folders Detail
📱 /app
- Expo Router Structure
The main application structure using Expo Router file-based routing.
Copy
app/
├── (auth)/ # Authentication group
│ ├── resetPassword.tsx # Password reset screen
│ ├── sign-in.tsx # Sign in screen
│ ├── sign-up.tsx # Sign up screen
│ └── welcome.tsx # Welcome screen
│
├── (protected)/ # Protected routes group
│ ├── (tabs)/ # Tab navigation
│ │ ├── _layout.tsx # Tab layout configuration
│ │ ├── ai.tsx # AI chat screen
│ │ ├── index.tsx # Home screen
│ │ ├── notifications.tsx # Notifications screen
│ │ ├── offline.tsx # Offline mode screen
│ │ ├── payment.tsx # Payment screen
│ │ ├── premium.tsx # Premium features screen
│ │ ├── profile.tsx # Profile screen
│ │ ├── settings.tsx # Settings screen
│ │ └── tasks.tsx # Tasks screen
│ ├── _layout.tsx # Protected layout
│ ├── privacy-policy.tsx # Privacy policy
│ └── terms-of-service.tsx # Terms of service
│
├── onboarding/ # Onboarding flow
│ ├── _layout.tsx # Onboarding layout
│ └── index.tsx # Onboarding screens
│
├── _layout.tsx # Root layout
├── +not-found.tsx # 404 page
└── index.tsx # App entry point
For the full breakdown of remaining folders (
assets
, components
, config
, constants
, context
, fetch
, hooks
, icons
, lib
, locales
, stores
, supabase
, types
, utils
), see the Echo repo structure and the reference article.