# jeevandeepsaini/snapmechanic architecture

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

- Interactive diagram: https://gitdiagram.com/jeevandeepsaini/snapmechanic
- Repository: https://github.com/jeevandeepsaini/snapmechanic

## Overview

SnapMechanic is an Android garage-discovery and vehicle-service booking app. Users sign up or log in, browse/search paginated garages, inspect a garage, select services and a validated appointment time, then create and review bookings; account and profile tools complement that flow. The README documents Firebase authentication, Firestore profiles/bookings, and MockAPI garage data. Relationships for sampled flows follow source; additional UI capabilities use documented subsystem paths where exact wiring was not sampled.

Main entry points: [`app/src/main/java/com/snapmechanic/app/repository/UserRepository.kt`](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/UserRepository.kt) (User repository), [`app/src/main/java/com/snapmechanic/app/ui/ProfileActivity.kt`](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/ProfileActivity.kt) (Profile management), [`app/src/main/java/com/snapmechanic/app/repository/GarageRepository.kt`](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/GarageRepository.kt) (Garage repository), [`app/src/main/java/com/snapmechanic/app/network/GarageApi.kt`](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/network/GarageApi.kt) (Garage API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and profile"]
  node_signup["Sign up<br/>[SignupActivity.kt]"]
  node_login["Login and reset<br/>[LoginActivity.kt]"]
  node_profile["Profile management<br/>[ProfileActivity.kt]"]
  node_update_profile["Edit profile"]
  node_change_password["Change password"]
  node_help["Help and support"]
end

subgraph group_discovery["Garage discovery"]
  node_home["Garage home<br/>[HomeActivity.kt]"]
  node_garageadapter["Garage list adapter<br/>[GarageAdapter.kt]"]
  node_garage["Garage details"]
end

subgraph group_booking["Service booking"]
  node_request["Request service"]
  node_timevalidator["Time validation<br/>[TimeValidator.kt]"]
  node_bookings["Booking history"]
end

subgraph group_data["Data access"]
  node_auth["Authentication<br/>[AuthRepository.kt]"]
  node_garage_repo["Garage repository"]
  node_api_client["API client<br/>[ApiClient.kt]"]
  node_garage_api["Garage API<br/>[GarageApi.kt]"]
  node_garage_model["Garage data<br/>[Garage.kt]"]
  node_user_repo["User repository<br/>[UserRepository.kt]"]
  node_user_model["User and booking models<br/>[User.kt]"]
  node_booking_model["Booking model<br/>[Booking.kt]"]
end

node_customer(("App user"))
node_firebaseauth(("Firebase Auth"))
node_mockapi(("MockAPI garages"))
node_firestore[("Firestore")]

node_customer -->|"creates account"| node_signup
node_customer -->|"signs in"| node_login
node_signup -->|"creates credentials"| node_auth
node_login -->|"authenticates"| node_auth
node_auth -->|"calls"| node_firebaseauth
node_signup -->|"saves profile"| node_user_repo
node_customer -->|"browses garages"| node_home
node_home -->|"loads pages"| node_garage_repo
node_home -->|"displays results"| node_garageadapter
node_garageadapter -->|"opens selection"| node_garage
node_garage_repo -->|"uses client"| node_api_client
node_api_client -->|"creates service"| node_garage_api
node_garage_repo -->|"requests garages"| node_garage_api
node_garage_api -->|"fetches data"| node_mockapi
node_garage_api -->|"decodes response"| node_garage_model
node_garage -->|"loads details"| node_garage_repo
node_garage -->|"starts request"| node_request
node_request -->|"validates time"| node_timevalidator
node_request -->|"creates booking"| node_user_repo
node_customer -->|"manages account"| node_profile
node_profile -->|"loads profile"| node_user_repo
node_profile -->|"edits details"| node_update_profile
node_update_profile -->|"updates profile"| node_user_repo
node_profile -->|"changes password"| node_change_password
node_change_password -->|"updates password"| node_auth
node_profile -->|"views bookings"| node_bookings
node_profile -->|"opens support"| node_help
node_bookings -->|"loads history"| node_user_repo
node_user_repo -->|"reads and writes"| node_firestore
node_user_repo -->|"maps profile data"| node_user_model
node_user_repo -->|"maps booking data"| node_booking_model

click node_signup "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/SignupActivity.kt"
click node_login "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/LoginActivity.kt"
click node_auth "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/AuthRepository.kt"
click node_home "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/HomeActivity.kt"
click node_garageadapter "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/adapter/GarageAdapter.kt"
click node_garage "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/GarageDetailActivity.kt"
click node_garage_repo "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/GarageRepository.kt"
click node_api_client "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/network/ApiClient.kt"
click node_garage_api "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/network/GarageApi.kt"
click node_garage_model "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/model/Garage.kt"
click node_request "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/RequestServiceActivity.kt"
click node_timevalidator "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/utils/TimeValidator.kt"
click node_profile "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/ProfileActivity.kt"
click node_update_profile "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/UpdateProfileActivity.kt"
click node_change_password "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/ChangePasswordActivity.kt"
click node_help "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/HelpSupportActivity.kt"
click node_bookings "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/MyBookingsActivity.kt"
click node_user_repo "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/UserRepository.kt"
click node_user_model "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/model/User.kt"
click node_booking_model "https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/model/Booking.kt"

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_signup,node_login,node_profile,node_update_profile,node_change_password,node_help,node_customer toneBlue
class node_home,node_garageadapter,node_garage,node_firestore toneAmber
class node_request,node_timevalidator,node_bookings,node_mockapi toneMint
class node_auth,node_garage_repo,node_api_client,node_garage_api,node_garage_model,node_user_repo,node_user_model,node_booking_model toneRose
class node_firebaseauth toneIndigo
```

## Components

### Identity and profile

- [Sign up](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/SignupActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/SignupActivity.kt`
- [Login and reset](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/LoginActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/LoginActivity.kt`
- [Profile management](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/ProfileActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/ProfileActivity.kt`
- [Edit profile](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/UpdateProfileActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/UpdateProfileActivity.kt`
- [Change password](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/ChangePasswordActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/ChangePasswordActivity.kt`
- [Help and support](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/HelpSupportActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/HelpSupportActivity.kt`

### Garage discovery

- [Garage home](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/HomeActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/HomeActivity.kt`
- [Garage list adapter](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/adapter/GarageAdapter.kt): `app/src/main/java/com/snapmechanic/app/adapter/GarageAdapter.kt`
- [Garage details](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/GarageDetailActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/GarageDetailActivity.kt`

### Service booking

- [Request service](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/RequestServiceActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/RequestServiceActivity.kt`
- [Time validation](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/utils/TimeValidator.kt): `app/src/main/java/com/snapmechanic/app/utils/TimeValidator.kt`
- [Booking history](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/ui/MyBookingsActivity.kt): `app/src/main/java/com/snapmechanic/app/ui/MyBookingsActivity.kt`

### Data access

- [Authentication](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/AuthRepository.kt): `app/src/main/java/com/snapmechanic/app/repository/AuthRepository.kt`
- [Garage repository](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/GarageRepository.kt): `app/src/main/java/com/snapmechanic/app/repository/GarageRepository.kt`
- [API client](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/network/ApiClient.kt): `app/src/main/java/com/snapmechanic/app/network/ApiClient.kt`
- [Garage API](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/network/GarageApi.kt): `app/src/main/java/com/snapmechanic/app/network/GarageApi.kt`
- [Garage data](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/model/Garage.kt): `app/src/main/java/com/snapmechanic/app/model/Garage.kt`
- [User repository](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/repository/UserRepository.kt): `app/src/main/java/com/snapmechanic/app/repository/UserRepository.kt`
- [User and booking models](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/model/User.kt): `app/src/main/java/com/snapmechanic/app/model/User.kt`
- [Booking model](https://github.com/jeevandeepsaini/snapmechanic/blob/main/app/src/main/java/com/snapmechanic/app/model/Booking.kt): `app/src/main/java/com/snapmechanic/app/model/Booking.kt`

### Other components

- **App user**
- **Firebase Auth**
- **MockAPI garages**
- **Firestore**

## Connections

- App user → Sign up: creates account
- App user → Login and reset: signs in
- Sign up → Authentication: creates credentials
- Login and reset → Authentication: authenticates
- Authentication → Firebase Auth: calls
- Sign up → User repository: saves profile
- App user → Garage home: browses garages
- Garage home → Garage repository: loads pages
- Garage home → Garage list adapter: displays results
- Garage list adapter → Garage details: opens selection
- Garage repository → API client: uses client
- API client → Garage API: creates service
- Garage repository → Garage API: requests garages
- Garage API → MockAPI garages: fetches data
- Garage API → Garage data: decodes response
- Garage details → Garage repository: loads details
- Garage details → Request service: starts request
- Request service → Time validation: validates time
- Request service → User repository: creates booking
- App user → Profile management: manages account
- Profile management → User repository: loads profile
- Profile management → Edit profile: edits details
- Edit profile → User repository: updates profile
- Profile management → Change password: changes password
- Change password → Authentication: updates password
- Profile management → Booking history: views bookings
- Profile management → Help and support: opens support
- Booking history → User repository: loads history
- User repository → Firestore: reads and writes
- User repository → User and booking models: maps profile data
- User repository → Booking model: maps booking data
