# msr82302-arch/traveleasily architecture

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

- Interactive diagram: https://gitdiagram.com/msr82302-arch/traveleasily
- Repository: https://github.com/msr82302-arch/traveleasily

## Overview

EasyTravels is a visa-processing portal and consular operations console. Travelers explore destinations, prepare an application with passport scanning, submit it, and track application status, grants, and notification receipts in a wallet; staff manage applications, verification, permissions, and notifications. The frontend application context owns application state and generates lifecycle notifications, while the Django application API invokes backend notification services. The README also documents Gemini-powered visa advice and an administrative command center. Sampled frontend state appears partly simulated; excerpts do not establish how it connects to the backend, payment processing, or external email delivery.

Main entry points: [`src/context/ApplicationContext.tsx`](https://github.com/msr82302-arch/traveleasily/blob/main/src/context/ApplicationContext.tsx) (Application Context), [`src/components/admin/AdminDashboard.tsx`](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/AdminDashboard.tsx) (Admin Dashboard), [`src/components/apply/ApplicationWizard.tsx`](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/ApplicationWizard.tsx) (Application Wizard), [`src/App.tsx`](https://github.com/msr82302-arch/traveleasily/blob/main/src/App.tsx) (Portal Router)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Traveler Portal"]
  node_app["Portal Router<br/>[App.tsx]"]
  node_destinations["Visa Destinations<br/>[destinations.ts]"]
  node_wallet["Document Wallet<br/>[DocumentWallet.tsx]"]
  node_pdf_viewer["Visa PDF Viewer<br/>[PdfVisaViewer.tsx]"]
  node_ai["AI Visa Concierge"]
end

subgraph group_workflow["Application Workflow"]
  node_wizard["Application Wizard"]
  node_scanner["Passport Scanner<br/>[OcrScannerStep.tsx]"]
  node_form["Application Form"]
  node_checkout["Application Checkout<br/>[CheckoutStep.tsx]"]
  node_application_state["Application Context"]
end

subgraph group_operations["Consular Operations"]
  node_auth_state["Staff Auth Context<br/>[AuthContext.tsx]"]
  node_admin["Admin Dashboard<br/>[AdminDashboard.tsx]"]
  node_verifier["Document Verifier"]
  node_staff_management["Staff Management"]
  node_roles["Roles and Permissions"]
  node_notification_admin["Notification Management"]
end

subgraph group_backend["Backend Services"]
  node_api["Application API<br/>[views.py]"]
  node_application_models[("Application Records<br/>[models.py]")]
  node_account_api["Accounts API<br/>[views.py]"]
  node_account_models[("Account Records<br/>[models.py]")]
  node_notification_service["Notification Service<br/>[services.py]"]
  node_notification_records[("Notification Records<br/>[models.py]")]
  node_notification_tasks["Notification Tasks<br/>[tasks.py]"]
end

subgraph group_shared["Shared Capabilities"]
  node_language["Language Context"]
  node_visa_types["Application Types<br/>[visa.ts]"]
  node_country_knowledge["Country Guidance"]
  node_frontend_email["Frontend Notifications<br/>[emailService.ts]"]
  node_notifications_types["Notification Types<br/>[notifications.ts]"]
end

node_traveler(("Traveler"))
node_gemini{{"Gemini AI"}}

node_traveler -->|"uses portal"| node_app
node_app -->|"wraps provider"| node_application_state
node_app -->|"routes to"| node_wizard
node_app -->|"routes to"| node_wallet
node_app -->|"routes to"| node_admin
node_wizard -->|"renders step"| node_scanner
node_wizard -->|"renders step"| node_form
node_wizard -->|"renders step"| node_checkout
node_wizard -->|"uses state"| node_application_state
node_wizard -->|"reads options"| node_destinations
node_form -->|"updates draft"| node_application_state
node_application_state -->|"generates notifications"| node_frontend_email
node_application_state -->|"uses types"| node_visa_types
node_wallet -->|"reads applications"| node_application_state
node_wallet -->|"renders grants"| node_pdf_viewer
node_ai -->|"uses context"| node_application_state
node_ai -->|"reads guidance"| node_country_knowledge
node_ai -.->|"requests advice"| node_gemini
node_admin -->|"reads applications"| node_application_state
node_admin -->|"uses permissions"| node_auth_state
node_admin -->|"renders drawer"| node_verifier
node_admin -->|"renders tab"| node_staff_management
node_admin -->|"renders tab"| node_roles
node_admin -->|"renders tab"| node_notification_admin
node_admin -->|"uses email service"| node_frontend_email
node_staff_management -->|"manages staff"| node_auth_state
node_staff_management -->|"dispatches invitation"| node_frontend_email
node_application_state -.->|"backend link unclear"| node_api
node_api -->|"uses records"| node_application_models
node_api -->|"triggers notifications"| node_notification_service
node_account_api -->|"uses records"| node_account_models
node_notification_service -->|"creates records"| node_notification_records
node_notification_tasks -->|"calls service"| node_notification_service

click node_app "https://github.com/msr82302-arch/traveleasily/blob/main/src/App.tsx"
click node_destinations "https://github.com/msr82302-arch/traveleasily/blob/main/src/data/destinations.ts"
click node_language "https://github.com/msr82302-arch/traveleasily/blob/main/src/context/LanguageContext.tsx"
click node_wizard "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/ApplicationWizard.tsx"
click node_scanner "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/OcrScannerStep.tsx"
click node_form "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/ApplicationFormStep.tsx"
click node_checkout "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/CheckoutStep.tsx"
click node_application_state "https://github.com/msr82302-arch/traveleasily/blob/main/src/context/ApplicationContext.tsx"
click node_visa_types "https://github.com/msr82302-arch/traveleasily/blob/main/src/types/visa.ts"
click node_wallet "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/wallet/DocumentWallet.tsx"
click node_pdf_viewer "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/common/PdfVisaViewer.tsx"
click node_ai "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/ai/AiConciergeModal.tsx"
click node_country_knowledge "https://github.com/msr82302-arch/traveleasily/blob/main/src/data/countryKnowledge.ts"
click node_auth_state "https://github.com/msr82302-arch/traveleasily/blob/main/src/context/AuthContext.tsx"
click node_admin "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/AdminDashboard.tsx"
click node_verifier "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/DocumentVerifierDrawer.tsx"
click node_staff_management "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/StaffManagementTab.tsx"
click node_roles "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/RolesManagementTab.tsx"
click node_notification_admin "https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/NotificationManagementTab.tsx"
click node_frontend_email "https://github.com/msr82302-arch/traveleasily/blob/main/src/services/emailService.ts"
click node_api "https://github.com/msr82302-arch/traveleasily/blob/main/backend/applications/views.py"
click node_application_models "https://github.com/msr82302-arch/traveleasily/blob/main/backend/applications/models.py"
click node_account_api "https://github.com/msr82302-arch/traveleasily/blob/main/backend/accounts/views.py"
click node_account_models "https://github.com/msr82302-arch/traveleasily/blob/main/backend/accounts/models.py"
click node_notification_service "https://github.com/msr82302-arch/traveleasily/blob/main/backend/notifications/services.py"
click node_notification_records "https://github.com/msr82302-arch/traveleasily/blob/main/backend/notifications/models.py"
click node_notification_tasks "https://github.com/msr82302-arch/traveleasily/blob/main/backend/notifications/tasks.py"
click node_notifications_types "https://github.com/msr82302-arch/traveleasily/blob/main/src/types/notifications.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_app,node_destinations,node_wallet,node_pdf_viewer,node_ai toneBlue
class node_wizard,node_scanner,node_form,node_checkout,node_application_state toneAmber
class node_auth_state,node_admin,node_verifier,node_staff_management,node_roles,node_notification_admin toneMint
class node_api,node_application_models,node_account_api,node_account_models,node_notification_service,node_notification_records,node_notification_tasks toneRose
class node_language,node_visa_types,node_country_knowledge,node_frontend_email,node_notifications_types,node_traveler,node_gemini toneIndigo
```

## Components

### Traveler Portal

- [Portal Router](https://github.com/msr82302-arch/traveleasily/blob/main/src/App.tsx): `src/App.tsx`
- [Visa Destinations](https://github.com/msr82302-arch/traveleasily/blob/main/src/data/destinations.ts): `src/data/destinations.ts`
- [Document Wallet](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/wallet/DocumentWallet.tsx): `src/components/wallet/DocumentWallet.tsx`
- [Visa PDF Viewer](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/common/PdfVisaViewer.tsx): `src/components/common/PdfVisaViewer.tsx`
- [AI Visa Concierge](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/ai/AiConciergeModal.tsx): `src/components/ai/AiConciergeModal.tsx`

### Application Workflow

- [Application Wizard](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/ApplicationWizard.tsx): `src/components/apply/ApplicationWizard.tsx`
- [Passport Scanner](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/OcrScannerStep.tsx): `src/components/apply/OcrScannerStep.tsx`
- [Application Form](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/ApplicationFormStep.tsx): `src/components/apply/ApplicationFormStep.tsx`
- [Application Checkout](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/apply/CheckoutStep.tsx): `src/components/apply/CheckoutStep.tsx`
- [Application Context](https://github.com/msr82302-arch/traveleasily/blob/main/src/context/ApplicationContext.tsx): `src/context/ApplicationContext.tsx`

### Consular Operations

- [Staff Auth Context](https://github.com/msr82302-arch/traveleasily/blob/main/src/context/AuthContext.tsx): `src/context/AuthContext.tsx`
- [Admin Dashboard](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/AdminDashboard.tsx): `src/components/admin/AdminDashboard.tsx`
- [Document Verifier](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/DocumentVerifierDrawer.tsx): `src/components/admin/DocumentVerifierDrawer.tsx`
- [Staff Management](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/StaffManagementTab.tsx): `src/components/admin/StaffManagementTab.tsx`
- [Roles and Permissions](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/RolesManagementTab.tsx): `src/components/admin/RolesManagementTab.tsx`
- [Notification Management](https://github.com/msr82302-arch/traveleasily/blob/main/src/components/admin/NotificationManagementTab.tsx): `src/components/admin/NotificationManagementTab.tsx`

### Backend Services

- [Application API](https://github.com/msr82302-arch/traveleasily/blob/main/backend/applications/views.py): `backend/applications/views.py`
- [Application Records](https://github.com/msr82302-arch/traveleasily/blob/main/backend/applications/models.py): `backend/applications/models.py`
- [Accounts API](https://github.com/msr82302-arch/traveleasily/blob/main/backend/accounts/views.py): `backend/accounts/views.py`
- [Account Records](https://github.com/msr82302-arch/traveleasily/blob/main/backend/accounts/models.py): `backend/accounts/models.py`
- [Notification Service](https://github.com/msr82302-arch/traveleasily/blob/main/backend/notifications/services.py): `backend/notifications/services.py`
- [Notification Records](https://github.com/msr82302-arch/traveleasily/blob/main/backend/notifications/models.py): `backend/notifications/models.py`
- [Notification Tasks](https://github.com/msr82302-arch/traveleasily/blob/main/backend/notifications/tasks.py): `backend/notifications/tasks.py`

### Shared Capabilities

- [Language Context](https://github.com/msr82302-arch/traveleasily/blob/main/src/context/LanguageContext.tsx): `src/context/LanguageContext.tsx`
- [Application Types](https://github.com/msr82302-arch/traveleasily/blob/main/src/types/visa.ts): `src/types/visa.ts`
- [Country Guidance](https://github.com/msr82302-arch/traveleasily/blob/main/src/data/countryKnowledge.ts): `src/data/countryKnowledge.ts`
- [Frontend Notifications](https://github.com/msr82302-arch/traveleasily/blob/main/src/services/emailService.ts): `src/services/emailService.ts`
- [Notification Types](https://github.com/msr82302-arch/traveleasily/blob/main/src/types/notifications.ts): `src/types/notifications.ts`

### Other components

- **Traveler**
- **Gemini AI**

## Connections

- Traveler → Portal Router: uses portal (evidence: `README.md`)
- Portal Router → Application Context: wraps provider (evidence: `src/App.tsx`)
- Portal Router → Application Wizard: routes to (evidence: `src/App.tsx`)
- Portal Router → Document Wallet: routes to (evidence: `src/App.tsx`)
- Portal Router → Admin Dashboard: routes to (evidence: `src/App.tsx`)
- Application Wizard → Passport Scanner: renders step (evidence: `src/components/apply/ApplicationWizard.tsx`)
- Application Wizard → Application Form: renders step (evidence: `src/components/apply/ApplicationWizard.tsx`)
- Application Wizard → Application Checkout: renders step (evidence: `src/components/apply/ApplicationWizard.tsx`)
- Application Wizard → Application Context: uses state (evidence: `src/components/apply/ApplicationWizard.tsx`)
- Application Wizard → Visa Destinations: reads options (evidence: `src/components/apply/ApplicationWizard.tsx`)
- Application Form → Application Context: updates draft (evidence: `src/components/apply/ApplicationFormStep.tsx`)
- Application Context → Frontend Notifications: generates notifications (evidence: `src/context/ApplicationContext.tsx`)
- Application Context → Application Types: uses types (evidence: `src/context/ApplicationContext.tsx`)
- Document Wallet → Application Context: reads applications (evidence: `src/components/wallet/DocumentWallet.tsx`)
- Document Wallet → Visa PDF Viewer: renders grants (evidence: `src/components/wallet/DocumentWallet.tsx`)
- AI Visa Concierge → Application Context: uses context (evidence: `src/components/ai/AiConciergeModal.tsx`)
- AI Visa Concierge → Country Guidance: reads guidance (evidence: `src/components/ai/AiConciergeModal.tsx`)
- AI Visa Concierge → Gemini AI: requests advice (evidence: `README.md`)
- Admin Dashboard → Application Context: reads applications (evidence: `src/components/admin/AdminDashboard.tsx`)
- Admin Dashboard → Staff Auth Context: uses permissions (evidence: `src/components/admin/AdminDashboard.tsx`)
- Admin Dashboard → Document Verifier: renders drawer (evidence: `src/components/admin/AdminDashboard.tsx`)
- Admin Dashboard → Staff Management: renders tab (evidence: `src/components/admin/AdminDashboard.tsx`)
- Admin Dashboard → Roles and Permissions: renders tab (evidence: `src/components/admin/AdminDashboard.tsx`)
- Admin Dashboard → Notification Management: renders tab (evidence: `src/components/admin/AdminDashboard.tsx`)
- Admin Dashboard → Frontend Notifications: uses email service (evidence: `src/components/admin/AdminDashboard.tsx`)
- Staff Management → Staff Auth Context: manages staff
- Staff Management → Frontend Notifications: dispatches invitation
- Application Context → Application API: backend link unclear
- Application API → Application Records: uses records (evidence: `backend/applications/views.py`)
- Application API → Notification Service: triggers notifications (evidence: `backend/applications/views.py`)
- Accounts API → Account Records: uses records (evidence: `backend/accounts/views.py`)
- Notification Service → Notification Records: creates records (evidence: `backend/notifications/services.py`)
- Notification Tasks → Notification Service: calls service (evidence: `backend/notifications/tasks.py`)
