# loicqra12/soutraai architecture

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

- Interactive diagram: https://gitdiagram.com/loicqra12/soutraai
- Repository: https://github.com/loicqra12/soutraai

## Overview

Soutra AI is a Flutter marketplace assistant for connecting service seekers with local providers. The documented client workflow starts with role selection, captures a request by text or voice, then uses AI-supported matching and price estimates to suggest providers; providers use a dashboard, statistics, and profile management. The graph preserves the documented AI, voice, geolocation, matching, pricing, and dataset capabilities. Most Dart implementation files were not excerpted, so unverified runtime links are dashed and have no evidence path.

Main entry points: [`lib/screens/service_request_screen.dart`](https://github.com/loicqra12/soutraai/blob/master/lib/screens/service_request_screen.dart) (Request entry), [`lib/services/matching_service.dart`](https://github.com/loicqra12/soutraai/blob/master/lib/services/matching_service.dart) (Provider matching), [`lib/screens/provider_dashboard.dart`](https://github.com/loicqra12/soutraai/blob/master/lib/screens/provider_dashboard.dart) (Provider dashboard), [`lib/services/advanced_ai_service.dart`](https://github.com/loicqra12/soutraai/blob/master/lib/services/advanced_ai_service.dart) (AI assistance)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["App experience"]
  node_app["Flutter app<br/>[main.dart]"]
  node_role["Role selection"]
  node_request["Request entry"]
  node_results["Provider results"]
  node_chat["AI chat"]
  node_dashboard["Provider dashboard"]
  node_profile["Provider profile"]
  node_statistics["Admin statistics"]
end

subgraph group_domain["Service marketplace"]
  node_data[("Local datasets")]
  node_data_service["Data access<br/>[data_service.dart]"]
  node_provider_model["Provider model<br/>[provider.dart]"]
  node_request_model["Request model"]
  node_user_model["User model<br/>[user.dart]"]
  node_csv["CSV conversion<br/>[csv_converter.dart]"]
end

subgraph group_intelligence["AI and matching"]
  node_matching["Provider matching"]
  node_ai["AI assistance"]
  node_pricing["Price estimation"]
  node_voice["Voice input<br/>[voice_service.dart]"]
end

subgraph group_integrations["External integrations"]
  node_gemini["Gemini client"]
  node_speech["Speech services"]
  node_maps["Maps and location"]
end

node_user(("Client or provider"))

node_user -->|"selects role"| node_role
node_role -.->|"client workflow"| node_request
node_user -->|"provider workflow"| node_dashboard
node_dashboard -->|"manage profile"| node_profile
node_dashboard -->|"view statistics"| node_statistics
node_request -->|"voice input"| node_voice
node_request -->|"match request"| node_matching
node_request -->|"request guidance"| node_ai
node_matching -->|"suggest providers"| node_results
node_ai -->|"uses Gemini"| node_gemini
node_ai -->|"estimate price"| node_pricing
node_voice -->|"speech support"| node_speech
node_matching -->|"use geolocation"| node_maps
node_data_service -.->|"reads datasets"| node_data
node_matching -.->|"loads match data"| node_data_service
node_matching -.->|"uses provider data"| node_provider_model
node_request -.->|"represents request"| node_request_model
node_app -.->|"opens workflow"| node_role
node_app -.->|"opens assistant"| node_chat
node_csv -.->|"converts data"| node_data

click node_app "https://github.com/loicqra12/soutraai/blob/master/lib/main.dart"
click node_role "https://github.com/loicqra12/soutraai/blob/master/lib/screens/role_selection_screen.dart"
click node_request "https://github.com/loicqra12/soutraai/blob/master/lib/screens/service_request_screen.dart"
click node_results "https://github.com/loicqra12/soutraai/blob/master/lib/screens/results_screen.dart"
click node_chat "https://github.com/loicqra12/soutraai/blob/master/lib/screens/ai_chat_screen.dart"
click node_dashboard "https://github.com/loicqra12/soutraai/blob/master/lib/screens/provider_dashboard.dart"
click node_profile "https://github.com/loicqra12/soutraai/blob/master/lib/screens/provider_profile_screen.dart"
click node_statistics "https://github.com/loicqra12/soutraai/blob/master/lib/screens/admin_statistics_screen.dart"
click node_matching "https://github.com/loicqra12/soutraai/blob/master/lib/services/matching_service.dart"
click node_ai "https://github.com/loicqra12/soutraai/blob/master/lib/services/advanced_ai_service.dart"
click node_gemini "https://github.com/loicqra12/soutraai/blob/master/lib/services/gemini_service.dart"
click node_pricing "https://github.com/loicqra12/soutraai/blob/master/lib/services/pricing_service.dart"
click node_voice "https://github.com/loicqra12/soutraai/blob/master/lib/services/voice_service.dart"
click node_speech "https://github.com/loicqra12/soutraai/blob/master/lib/services/advanced_tts_service.dart"
click node_maps "https://github.com/loicqra12/soutraai/blob/master/lib/services/google_maps_service.dart"
click node_data "https://github.com/loicqra12/soutraai/tree/master/assets/data"
click node_data_service "https://github.com/loicqra12/soutraai/blob/master/lib/services/data_service.dart"
click node_provider_model "https://github.com/loicqra12/soutraai/blob/master/lib/models/provider.dart"
click node_request_model "https://github.com/loicqra12/soutraai/blob/master/lib/models/service_request.dart"
click node_user_model "https://github.com/loicqra12/soutraai/blob/master/lib/models/user.dart"
click node_csv "https://github.com/loicqra12/soutraai/blob/master/lib/services/csv_converter.dart"

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_role,node_request,node_results,node_chat,node_dashboard,node_profile,node_statistics,node_user toneBlue
class node_data,node_data_service,node_provider_model,node_request_model,node_user_model,node_csv toneAmber
class node_matching,node_ai,node_pricing,node_voice toneMint
class node_gemini,node_speech,node_maps toneRose
```

## Components

### App experience

- [Flutter app](https://github.com/loicqra12/soutraai/blob/master/lib/main.dart): `lib/main.dart`
- [Role selection](https://github.com/loicqra12/soutraai/blob/master/lib/screens/role_selection_screen.dart): `lib/screens/role_selection_screen.dart`
- [Request entry](https://github.com/loicqra12/soutraai/blob/master/lib/screens/service_request_screen.dart): `lib/screens/service_request_screen.dart`
- [Provider results](https://github.com/loicqra12/soutraai/blob/master/lib/screens/results_screen.dart): `lib/screens/results_screen.dart`
- [AI chat](https://github.com/loicqra12/soutraai/blob/master/lib/screens/ai_chat_screen.dart): `lib/screens/ai_chat_screen.dart`
- [Provider dashboard](https://github.com/loicqra12/soutraai/blob/master/lib/screens/provider_dashboard.dart): `lib/screens/provider_dashboard.dart`
- [Provider profile](https://github.com/loicqra12/soutraai/blob/master/lib/screens/provider_profile_screen.dart): `lib/screens/provider_profile_screen.dart`
- [Admin statistics](https://github.com/loicqra12/soutraai/blob/master/lib/screens/admin_statistics_screen.dart): `lib/screens/admin_statistics_screen.dart`

### Service marketplace

- [Local datasets](https://github.com/loicqra12/soutraai/tree/master/assets/data): `assets/data`
- [Data access](https://github.com/loicqra12/soutraai/blob/master/lib/services/data_service.dart): `lib/services/data_service.dart`
- [Provider model](https://github.com/loicqra12/soutraai/blob/master/lib/models/provider.dart): `lib/models/provider.dart`
- [Request model](https://github.com/loicqra12/soutraai/blob/master/lib/models/service_request.dart): `lib/models/service_request.dart`
- [User model](https://github.com/loicqra12/soutraai/blob/master/lib/models/user.dart): `lib/models/user.dart`
- [CSV conversion](https://github.com/loicqra12/soutraai/blob/master/lib/services/csv_converter.dart): `lib/services/csv_converter.dart`

### AI and matching

- [Provider matching](https://github.com/loicqra12/soutraai/blob/master/lib/services/matching_service.dart): `lib/services/matching_service.dart`
- [AI assistance](https://github.com/loicqra12/soutraai/blob/master/lib/services/advanced_ai_service.dart): `lib/services/advanced_ai_service.dart`
- [Price estimation](https://github.com/loicqra12/soutraai/blob/master/lib/services/pricing_service.dart): `lib/services/pricing_service.dart`
- [Voice input](https://github.com/loicqra12/soutraai/blob/master/lib/services/voice_service.dart): `lib/services/voice_service.dart`

### External integrations

- [Gemini client](https://github.com/loicqra12/soutraai/blob/master/lib/services/gemini_service.dart): `lib/services/gemini_service.dart`
- [Speech services](https://github.com/loicqra12/soutraai/blob/master/lib/services/advanced_tts_service.dart): `lib/services/advanced_tts_service.dart`
- [Maps and location](https://github.com/loicqra12/soutraai/blob/master/lib/services/google_maps_service.dart): `lib/services/google_maps_service.dart`

### Other components

- **Client or provider**

## Connections

- Client or provider → Role selection: selects role (evidence: `README.md`)
- Role selection → Request entry: client workflow
- Client or provider → Provider dashboard: provider workflow (evidence: `README.md`)
- Provider dashboard → Provider profile: manage profile (evidence: `README.md`)
- Provider dashboard → Admin statistics: view statistics (evidence: `README.md`)
- Request entry → Voice input: voice input (evidence: `README.md`)
- Request entry → Provider matching: match request (evidence: `README.md`)
- Request entry → AI assistance: request guidance (evidence: `README.md`)
- Provider matching → Provider results: suggest providers (evidence: `README.md`)
- AI assistance → Gemini client: uses Gemini (evidence: `README.md`)
- AI assistance → Price estimation: estimate price (evidence: `README.md`)
- Voice input → Speech services: speech support (evidence: `README.md`)
- Provider matching → Maps and location: use geolocation (evidence: `README.md`)
- Data access → Local datasets: reads datasets
- Provider matching → Data access: loads match data
- Provider matching → Provider model: uses provider data
- Request entry → Request model: represents request
- Flutter app → Role selection: opens workflow
- Flutter app → AI chat: opens assistant
- CSV conversion → Local datasets: converts data
