# disomimba/resumatch-backup architecture

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

- Interactive diagram: https://gitdiagram.com/disomimba/resumatch-backup
- Repository: https://github.com/disomimba/resumatch-backup

## Overview

ResuMatch is a role-based recruiting and candidate-profile product. Users sign up or sign in, then enter candidate or recruiter dashboards; candidates can manage profiles and upload resumes. The backend parses uploaded resume files with Gemini, creates embeddings, and stores extracted data for candidate profiles. Authentication and profile operations use Supabase, with an optional OTP email hook. Dashboard and filter behavior is represented at the page/component level because those sources were not sampled; the available excerpts do not establish how resume upload triggers parsing or how recruiter search uses candidate data.

Main entry points: [`src/App.jsx`](https://github.com/disomimba/resumatch-backup/blob/main/src/App.jsx) (Route application), [`src/presentation/pages/Login.jsx`](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/Login.jsx) (Sign-in and recovery), [`server.js`](https://github.com/disomimba/resumatch-backup/blob/main/server.js) (API and resume parser), [`src/presentation/pages/CandidateDashboard.jsx`](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/CandidateDashboard.jsx) (Candidate dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_app["Route application<br/>[App.jsx]"]
  node_signup["Sign-up<br/>[Signup.jsx]"]
  node_login["Sign-in and recovery<br/>[Login.jsx]"]
  node_candidate["Candidate dashboard"]
  node_recruiter["Recruiter dashboard"]
  node_profile["Profile editor<br/>[ProfileModal.jsx]"]
  node_filters["Filter modal<br/>[FIlterModal.jsx]"]
end

subgraph group_identity["Identity and profiles"]
  node_authservice["Auth service<br/>[authService.js]"]
  node_supabaseclient["Browser client<br/>[supabaseClient.js]"]
  node_otp["OTP email hook<br/>[index.ts]"]
end

subgraph group_resume["Resume processing"]
  node_server["API and resume parser<br/>[server.js]"]
end

subgraph group_integrations["External services"]
  node_supabase[("Supabase")]
  node_storage[("Resume storage")]
  node_gemini["Gemini AI"]
  node_emailjs["EmailJS"]
end

node_user(("Candidate or recruiter"))

node_user -->|"opens"| node_app
node_app -->|"routes to"| node_signup
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_candidate
node_app -->|"routes to"| node_recruiter
node_signup -->|"registers or redirects"| node_authservice
node_login -->|"authenticates and recovers"| node_authservice
node_authservice -->|"uses"| node_supabaseclient
node_supabaseclient -->|"calls"| node_supabase
node_login -->|"role navigation"| node_candidate
node_login -->|"role navigation"| node_recruiter
node_candidate -->|"opens profile"| node_profile
node_recruiter -->|"uses"| node_filters
node_profile -->|"uploads resume"| node_supabaseclient
node_server -->|"signs in and updates profile"| node_supabase
node_server -->|"downloads resume"| node_storage
node_server -->|"extracts and embeds"| node_gemini
node_supabase -->|"provides storage"| node_storage
node_supabase -.->|"dispatches OTP hook"| node_otp
node_otp -.->|"sends OTP email"| node_emailjs

click node_app "https://github.com/disomimba/resumatch-backup/blob/main/src/App.jsx"
click node_signup "https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/Signup.jsx"
click node_login "https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/Login.jsx"
click node_candidate "https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/CandidateDashboard.jsx"
click node_recruiter "https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/RecruiterDashboard.jsx"
click node_profile "https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/components/ProfileModal.jsx"
click node_filters "https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/components/FIlterModal.jsx"
click node_authservice "https://github.com/disomimba/resumatch-backup/blob/main/src/data/services/authService.js"
click node_supabaseclient "https://github.com/disomimba/resumatch-backup/blob/main/supabaseClient.js"
click node_server "https://github.com/disomimba/resumatch-backup/blob/main/server.js"
click node_otp "https://github.com/disomimba/resumatch-backup/blob/main/supabase/functions/send-emailjs-otp/index.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_signup,node_login,node_candidate,node_recruiter,node_profile,node_filters toneBlue
class node_authservice,node_supabaseclient,node_otp toneAmber
class node_server toneMint
class node_supabase,node_storage,node_gemini,node_emailjs toneRose
class node_user toneIndigo
```

## Components

### Web experience

- [Route application](https://github.com/disomimba/resumatch-backup/blob/main/src/App.jsx): `src/App.jsx`
- [Sign-up](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/Signup.jsx): `src/presentation/pages/Signup.jsx`
- [Sign-in and recovery](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/Login.jsx): `src/presentation/pages/Login.jsx`
- [Candidate dashboard](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/CandidateDashboard.jsx): `src/presentation/pages/CandidateDashboard.jsx`
- [Recruiter dashboard](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/pages/RecruiterDashboard.jsx): `src/presentation/pages/RecruiterDashboard.jsx`
- [Profile editor](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/components/ProfileModal.jsx): `src/presentation/components/ProfileModal.jsx`
- [Filter modal](https://github.com/disomimba/resumatch-backup/blob/main/src/presentation/components/FIlterModal.jsx): `src/presentation/components/FIlterModal.jsx`

### Identity and profiles

- [Auth service](https://github.com/disomimba/resumatch-backup/blob/main/src/data/services/authService.js): `src/data/services/authService.js`
- [Browser client](https://github.com/disomimba/resumatch-backup/blob/main/supabaseClient.js): `supabaseClient.js`
- [OTP email hook](https://github.com/disomimba/resumatch-backup/blob/main/supabase/functions/send-emailjs-otp/index.ts): `supabase/functions/send-emailjs-otp/index.ts`

### Resume processing

- [API and resume parser](https://github.com/disomimba/resumatch-backup/blob/main/server.js): `server.js`

### External services

- **Supabase**
- **Resume storage**
- **Gemini AI**
- **EmailJS**

### Other components

- **Candidate or recruiter**

## Connections

- Candidate or recruiter → Route application: opens
- Route application → Sign-up: routes to
- Route application → Sign-in and recovery: routes to
- Route application → Candidate dashboard: routes to
- Route application → Recruiter dashboard: routes to
- Sign-up → Auth service: registers or redirects
- Sign-in and recovery → Auth service: authenticates and recovers
- Auth service → Browser client: uses
- Browser client → Supabase: calls
- Sign-in and recovery → Candidate dashboard: role navigation
- Sign-in and recovery → Recruiter dashboard: role navigation
- Candidate dashboard → Profile editor: opens profile
- Recruiter dashboard → Filter modal: uses
- Profile editor → Browser client: uploads resume
- API and resume parser → Supabase: signs in and updates profile
- API and resume parser → Resume storage: downloads resume
- API and resume parser → Gemini AI: extracts and embeds
- Supabase → Resume storage: provides storage
- Supabase → OTP email hook: dispatches OTP hook
- OTP email hook → EmailJS: sends OTP email
