# aayush-ariato/prop101-mobile architecture

> Architecture diagram of the GitHub repository aayush-ariato/prop101-mobile, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aayush-ariato/prop101-mobile
- Repository: https://github.com/aayush-ariato/prop101-mobile

## Overview

Prop101 mobile is a native Expo app for property education and planning. A member signs in or previews the app, lands on a personalized home screen, then studies courses and lessons, practices with calculators, and explores a portfolio or suburb research; community, coaching, and account features extend that journey. Admin users have separate management screens. The app reuses an existing REST backend, with session and query state managed on-device. Feature routes and API details are only partly sampled, so the graph shows documented capabilities but omits uncertain route-to-service wiring.

Main entry points: [`src/lib/data.ts`](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/data.ts) (Resource and action hooks), [`src/providers/session.tsx`](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/providers/session.tsx) (Session provider), [`src/lib/api.ts`](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/api.ts) (REST transport), [`src/app/(app)/calculator/[id].tsx`](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/calculator/%5Bid%5D.tsx) (Calculators)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and navigation"]
  node_auth["Sign-in and onboarding<br/>[login.tsx]"]
  node_navigation["Protected navigation<br/>[_layout.tsx]"]
  node_session["Session provider<br/>[session.tsx]"]
  node_home["Member home<br/>[index.tsx]"]
end

subgraph group_learning["Learning"]
  node_courses["Course catalogue<br/>[courses.tsx]"]
  node_lesson["Lesson experience<br/>[lesson.tsx]"]
  node_course_routes["Course and lesson routes<br/>[&#91;lessonId&#93;.tsx]"]
  node_progress["Progress and certificates<br/>[progress.tsx]"]
end

subgraph group_property["Property planning"]
  node_calculator["Calculators<br/>[&#91;id&#93;.tsx]"]
  node_calculator_logic["Calculator logic<br/>[calculators.ts]"]
  node_portfolio["Portfolio workspace<br/>[portfolio.ts]"]
  node_portfolio_routes["Portfolio screens<br/>[index.tsx]"]
  node_research["Suburb research<br/>[research.tsx]"]
end

subgraph group_community["Community and coaching"]
  node_community["Community screens<br/>[community.tsx]"]
  node_coaching["Coaching booking<br/>[coaching.tsx]"]
  node_admin["Admin management<br/>[index.tsx]"]
end

subgraph group_runtime["App runtime"]
  node_data["Resource and action hooks<br/>[data.ts]"]
  node_api["REST transport<br/>[api.ts]"]
  node_query["Query cache<br/>[query-client.ts]"]
  node_session_store["Secure session storage<br/>[session-storage.ts]"]
end

node_member(("Member"))
node_backend{{"Existing REST backend"}}

node_member -->|"signs in"| node_auth
node_auth -->|"submits credentials"| node_session
node_session -->|"requests session"| node_api
node_session -->|"restores or clears"| node_session_store
node_session_store -->|"provides cookie"| node_session
node_session -->|"sets access state"| node_navigation
node_navigation -->|"opens signed-in app"| node_home
node_home -->|"loads resources"| node_data
node_courses -->|"loads courses"| node_data
node_course_routes -->|"renders lesson"| node_lesson
node_lesson -->|"submits activities"| node_data
node_progress -->|"loads progress"| node_data
node_calculator -->|"computes results"| node_calculator_logic
node_calculator -->|"saves examples"| node_data
node_portfolio_routes -->|"uses portfolio operations"| node_portfolio
node_portfolio_routes -->|"loads and saves"| node_data
node_research -->|"searches suburbs"| node_data
node_community -->|"loads and changes posts"| node_data
node_coaching -->|"books and manages slots"| node_data
node_admin -->|"manages records"| node_data
node_data -->|"uses cached queries"| node_query
node_data -->|"sends requests"| node_api
node_api -->|"calls REST API"| node_backend
node_session -->|"authenticates"| node_backend

click node_auth "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(auth)/login.tsx"
click node_navigation "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/_layout.tsx"
click node_session "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/providers/session.tsx"
click node_home "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/(tabs)/index.tsx"
click node_courses "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/(tabs)/courses.tsx"
click node_lesson "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/features/lesson.tsx"
click node_course_routes "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/lesson/%5BcourseId%5D/%5BlessonId%5D.tsx"
click node_progress "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/progress.tsx"
click node_calculator "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/calculator/%5Bid%5D.tsx"
click node_calculator_logic "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/domain/calculators.ts"
click node_portfolio "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/features/portfolio.ts"
click node_portfolio_routes "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/portfolio/index.tsx"
click node_research "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/research.tsx"
click node_community "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/(tabs)/community.tsx"
click node_coaching "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/coaching.tsx"
click node_admin "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/admin/index.tsx"
click node_data "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/data.ts"
click node_api "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/api.ts"
click node_query "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/query-client.ts"
click node_session_store "https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/session-storage.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_auth,node_navigation,node_session,node_home toneBlue
class node_courses,node_lesson,node_course_routes,node_progress toneAmber
class node_calculator,node_calculator_logic,node_portfolio,node_portfolio_routes,node_research toneMint
class node_community,node_coaching,node_admin toneRose
class node_data,node_api,node_query,node_session_store,node_member,node_backend toneIndigo
```

## Components

### Access and navigation

- [Sign-in and onboarding](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(auth)/login.tsx): `src/app/(auth)/login.tsx`
- [Protected navigation](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/_layout.tsx): `src/app/_layout.tsx`
- [Session provider](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/providers/session.tsx): `src/providers/session.tsx`
- [Member home](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/(tabs)/index.tsx): `src/app/(app)/(tabs)/index.tsx`

### Learning

- [Course catalogue](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/(tabs)/courses.tsx): `src/app/(app)/(tabs)/courses.tsx`
- [Lesson experience](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/features/lesson.tsx): `src/features/lesson.tsx`
- [Course and lesson routes](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/lesson/%5BcourseId%5D/%5BlessonId%5D.tsx): `src/app/(app)/lesson/[courseId]/[lessonId].tsx`
- [Progress and certificates](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/progress.tsx): `src/app/(app)/progress.tsx`

### Property planning

- [Calculators](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/calculator/%5Bid%5D.tsx): `src/app/(app)/calculator/[id].tsx`
- [Calculator logic](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/domain/calculators.ts): `src/domain/calculators.ts`
- [Portfolio workspace](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/features/portfolio.ts): `src/features/portfolio.ts`
- [Portfolio screens](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/portfolio/index.tsx): `src/app/(app)/portfolio/index.tsx`
- [Suburb research](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/research.tsx): `src/app/(app)/research.tsx`

### Community and coaching

- [Community screens](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/(tabs)/community.tsx): `src/app/(app)/(tabs)/community.tsx`
- [Coaching booking](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/coaching.tsx): `src/app/(app)/coaching.tsx`
- [Admin management](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/app/(app)/admin/index.tsx): `src/app/(app)/admin/index.tsx`

### App runtime

- [Resource and action hooks](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/data.ts): `src/lib/data.ts`
- [REST transport](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/api.ts): `src/lib/api.ts`
- [Query cache](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/query-client.ts): `src/lib/query-client.ts`
- [Secure session storage](https://github.com/aayush-ariato/prop101-mobile/blob/codex/expo-app/src/lib/session-storage.ts): `src/lib/session-storage.ts`

### Other components

- **Member**
- **Existing REST backend**

## Connections

- Member → Sign-in and onboarding: signs in
- Sign-in and onboarding → Session provider: submits credentials
- Session provider → REST transport: requests session
- Session provider → Secure session storage: restores or clears
- Secure session storage → Session provider: provides cookie
- Session provider → Protected navigation: sets access state
- Protected navigation → Member home: opens signed-in app
- Member home → Resource and action hooks: loads resources
- Course catalogue → Resource and action hooks: loads courses
- Course and lesson routes → Lesson experience: renders lesson
- Lesson experience → Resource and action hooks: submits activities
- Progress and certificates → Resource and action hooks: loads progress
- Calculators → Calculator logic: computes results
- Calculators → Resource and action hooks: saves examples
- Portfolio screens → Portfolio workspace: uses portfolio operations
- Portfolio screens → Resource and action hooks: loads and saves
- Suburb research → Resource and action hooks: searches suburbs
- Community screens → Resource and action hooks: loads and changes posts
- Coaching booking → Resource and action hooks: books and manages slots
- Admin management → Resource and action hooks: manages records
- Resource and action hooks → Query cache: uses cached queries
- Resource and action hooks → REST transport: sends requests
- REST transport → Existing REST backend: calls REST API
- Session provider → Existing REST backend: authenticates
