# monash-fit3170/2025w1-commitment architecture

> Architecture diagram of the GitHub repository monash-fit3170/2025w1-commitment, 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/monash-fit3170/2025w1-commitment
- Repository: https://github.com/monash-fit3170/2025w1-commitment

## Overview

gitgauge is a native desktop app for assessing student contributions in Git repositories. The main workflow is to select or enter a repository, verify and clone it when needed, load branches and contributor data, inspect and adjust contribution-based scores, then populate and save an uploaded grading sheet. The overview also supports branch/date/regex filtering and configuration-based identity mapping. Backend command ownership is visible in the Tauri registration and frontend call sites; several backend implementations and route details were not sampled, so uncertain internal links are omitted.

Main entry points: [`src/routes/overview-page/+page.svelte`](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/routes/overview-page/%2Bpage.svelte) (Analysis workspace), [`src/routes/+page.svelte`](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/routes/%2Bpage.svelte) (Repository entry), [`src/lib/metrics.ts`](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/metrics.ts) (Repository operations), [`src-tauri/src/repositories.rs`](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/repositories.rs) (Clone and refresh)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_repository["Repository access"]
  node_home["Repository entry<br/>[+page.svelte]"]
  node_repo_metrics["Repository operations<br/>[metrics.ts]"]
  node_url_check["URL verification"]
  node_auth["Token retry<br/>[auth.ts]"]
end

subgraph group_analysis["Contribution analysis"]
  node_overview["Analysis workspace<br/>[+page.svelte]"]
  node_metrics["Contribution metrics<br/>[metrics.ts]"]
  node_controls["Analysis controls<br/>[Heading.svelte]"]
  node_commit_graph["Commit graph<br/>[CommitGraph.svelte]"]
  node_metric_graph["Metric visualization<br/>[Graph.svelte]"]
  node_contributor_view["Contributor analysis"]
end

subgraph group_grading["Grading workflow"]
  node_grading_upload["Grading sheet upload"]
  node_csv["Sheet parsing<br/>[csv.ts]"]
  node_grading["Score population<br/>[grading.ts]"]
end

subgraph group_runtime["Desktop backend"]
  node_repo_commands["Clone and refresh<br/>[repositories.rs]"]
  node_branch_commands["Branch loading<br/>[branches.rs]"]
  node_contributor_commands["Contributor loading<br/>[contributor.rs]"]
  node_manifest[("Manifest state<br/>[manifest.rs]")]
  node_state_cache[("Workspace persistence<br/>[localstorage.ts]")]
end

node_user(("Teaching assistant"))
node_file_system[("Local repository files")]
node_git_hosts["Git hosting service"]
node_grading_file["Grading file"]

node_user -->|"selects repository"| node_home
node_home -->|"checks URL"| node_url_check
node_home -->|"loads repository"| node_repo_metrics
node_home -->|"reads manifest"| node_manifest
node_repo_metrics -->|"clones repository"| node_repo_commands
node_repo_metrics -->|"loads branches"| node_branch_commands
node_repo_metrics -->|"loads contributors"| node_contributor_commands
node_repo_commands -->|"writes repository"| node_file_system
node_repo_commands -->|"clones from"| node_git_hosts
node_home -->|"requests token retry"| node_auth
node_auth -->|"retries clone"| node_repo_commands
node_home -->|"opens workspace"| node_overview
node_overview -->|"reloads data"| node_repo_metrics
node_overview -->|"configures analysis"| node_controls
node_controls -->|"checks regex"| node_contributor_commands
node_controls -->|"saves mapping"| node_manifest
node_overview -->|"filters contributors"| node_metrics
node_overview -->|"supplies commit data"| node_commit_graph
node_overview -->|"supplies contributors"| node_contributor_view
node_contributor_view -->|"renders metrics"| node_metric_graph
node_metrics -->|"calculates scaling"| node_metric_graph
node_user -->|"uploads sheet"| node_grading_upload
node_grading_upload -->|"parses headers"| node_csv
node_overview -->|"populates scores"| node_grading
node_grading -->|"saves populated file"| node_grading_file
node_overview -->|"loads and saves state"| node_state_cache
node_grading_upload -->|"reads sheet"| node_grading_file

click node_home "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/routes/%2Bpage.svelte"
click node_repo_metrics "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/metrics.ts"
click node_url_check "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/github_url_verifier.js"
click node_auth "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/stores/auth.ts"
click node_repo_commands "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/repositories.rs"
click node_branch_commands "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/branches.rs"
click node_contributor_commands "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/contributor.rs"
click node_manifest "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/manifest.rs"
click node_overview "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/routes/overview-page/%2Bpage.svelte"
click node_metrics "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/metrics.ts"
click node_controls "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/Heading.svelte"
click node_commit_graph "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/CommitGraph.svelte"
click node_metric_graph "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/Graph.svelte"
click node_contributor_view "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/ContributorAnalysis.svelte"
click node_grading_upload "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/UploadFileModal.svelte"
click node_csv "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/utils/csv.ts"
click node_grading "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/utils/grading.ts"
click node_state_cache "https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/utils/localstorage.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_home,node_repo_metrics,node_url_check,node_auth toneBlue
class node_overview,node_metrics,node_controls,node_commit_graph,node_metric_graph,node_contributor_view,node_file_system toneAmber
class node_grading_upload,node_csv,node_grading toneMint
class node_repo_commands,node_branch_commands,node_contributor_commands,node_manifest,node_state_cache toneRose
class node_user,node_git_hosts,node_grading_file toneIndigo
```

## Components

### Repository access

- [Repository entry](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/routes/%2Bpage.svelte): `src/routes/+page.svelte`
- [Repository operations](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/metrics.ts): `src/lib/metrics.ts`
- [URL verification](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/github_url_verifier.js): `src/lib/github_url_verifier.js`
- [Token retry](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/stores/auth.ts): `src/lib/stores/auth.ts`

### Contribution analysis

- [Analysis workspace](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/routes/overview-page/%2Bpage.svelte): `src/routes/overview-page/+page.svelte`
- [Contribution metrics](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/metrics.ts): `src/lib/metrics.ts`
- [Analysis controls](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/Heading.svelte): `src/lib/components/overview-page/Heading.svelte`
- [Commit graph](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/CommitGraph.svelte): `src/lib/components/overview-page/CommitGraph.svelte`
- [Metric visualization](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/Graph.svelte): `src/lib/components/overview-page/Graph.svelte`
- [Contributor analysis](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/ContributorAnalysis.svelte): `src/lib/components/overview-page/ContributorAnalysis.svelte`

### Grading workflow

- [Grading sheet upload](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/components/overview-page/UploadFileModal.svelte): `src/lib/components/overview-page/UploadFileModal.svelte`
- [Sheet parsing](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/utils/csv.ts): `src/lib/utils/csv.ts`
- [Score population](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/utils/grading.ts): `src/lib/utils/grading.ts`

### Desktop backend

- [Clone and refresh](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/repositories.rs): `src-tauri/src/repositories.rs`
- [Branch loading](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/branches.rs): `src-tauri/src/branches.rs`
- [Contributor loading](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/contributor.rs): `src-tauri/src/contributor.rs`
- [Manifest state](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src-tauri/src/manifest.rs): `src-tauri/src/manifest.rs`
- [Workspace persistence](https://github.com/monash-fit3170/2025w1-commitment/blob/devel/src/lib/utils/localstorage.ts): `src/lib/utils/localstorage.ts`

### Other components

- **Teaching assistant**
- **Local repository files**
- **Git hosting service**
- **Grading file**

## Connections

- Teaching assistant → Repository entry: selects repository
- Repository entry → URL verification: checks URL
- Repository entry → Repository operations: loads repository
- Repository entry → Manifest state: reads manifest
- Repository operations → Clone and refresh: clones repository
- Repository operations → Branch loading: loads branches
- Repository operations → Contributor loading: loads contributors
- Clone and refresh → Local repository files: writes repository
- Clone and refresh → Git hosting service: clones from
- Repository entry → Token retry: requests token retry
- Token retry → Clone and refresh: retries clone
- Repository entry → Analysis workspace: opens workspace
- Analysis workspace → Repository operations: reloads data
- Analysis workspace → Analysis controls: configures analysis
- Analysis controls → Contributor loading: checks regex
- Analysis controls → Manifest state: saves mapping
- Analysis workspace → Contribution metrics: filters contributors
- Analysis workspace → Commit graph: supplies commit data
- Analysis workspace → Contributor analysis: supplies contributors
- Contributor analysis → Metric visualization: renders metrics
- Contribution metrics → Metric visualization: calculates scaling
- Teaching assistant → Grading sheet upload: uploads sheet
- Grading sheet upload → Sheet parsing: parses headers
- Analysis workspace → Score population: populates scores
- Score population → Grading file: saves populated file
- Analysis workspace → Workspace persistence: loads and saves state
- Grading sheet upload → Grading file: reads sheet
