# nandan-108/resume-submission-portal architecture

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

- Interactive diagram: https://gitdiagram.com/nandan-108/resume-submission-portal
- Repository: https://github.com/nandan-108/resume-submission-portal

## Overview

This is a resume-submission portal: an applicant completes a browser form, uploads a PDF, and receives a generated application ID on the success page. The browser validates fields and sends multipart data; the API validates the upload, checks application details, stores the resume and applicant record, and returns the ID. The graph distinguishes browser behavior, HTTP routing, submission handling, and persistence. Source excerpts support the main submission path; page markup and database schema details were not sampled, so their internal wiring is not expanded.

Main entry points: [`public/js/script.js`](https://github.com/nandan-108/resume-submission-portal/blob/main/public/js/script.js) (Form behavior), [`server.js`](https://github.com/nandan-108/resume-submission-portal/blob/main/server.js) (Express server), [`controllers/applicantController.js`](https://github.com/nandan-108/resume-submission-portal/blob/main/controllers/applicantController.js) (Application handling), [`routes/applicantRoutes.js`](https://github.com/nandan-108/resume-submission-portal/blob/main/routes/applicantRoutes.js) (Applicant routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_browser["Browser experience"]
  node_form["Application form<br/>[index.html]"]
  node_client["Form behavior<br/>[script.js]"]
  node_success["Success page<br/>[success.html]"]
end

subgraph group_http["HTTP server"]
  node_server["Express server<br/>[server.js]"]
  node_routes["Applicant routes<br/>[applicantRoutes.js]"]
end

subgraph group_submission["Submission handling"]
  node_upload["PDF upload<br/>[upload.js]"]
  node_controller["Application handling"]
end

subgraph group_persistence["Persistence"]
  node_files[("Resume files<br/>[.gitkeep]")]
  node_pool["MySQL pool<br/>[db.js]"]
  node_mysql[("MySQL database")]
end

node_applicant(("Applicant"))

node_applicant -->|"fills form"| node_form
node_form -->|"loads behavior"| node_client
node_client -->|"requests pages"| node_server
node_server -->|"serves form"| node_form
node_server -->|"serves success"| node_success
node_client -->|"posts multipart"| node_routes
node_server -->|"mounts API"| node_routes
node_routes -->|"accepts PDF"| node_upload
node_upload -->|"writes resume"| node_files
node_routes -->|"dispatches submission"| node_controller
node_controller -->|"removes invalid upload"| node_files
node_controller -->|"executes queries"| node_pool
node_pool -->|"connects"| node_mysql
node_controller -->|"returns application ID"| node_client
node_client -->|"redirects with ID"| node_success

click node_server "https://github.com/nandan-108/resume-submission-portal/blob/main/server.js"
click node_form "https://github.com/nandan-108/resume-submission-portal/blob/main/views/index.html"
click node_client "https://github.com/nandan-108/resume-submission-portal/blob/main/public/js/script.js"
click node_success "https://github.com/nandan-108/resume-submission-portal/blob/main/views/success.html"
click node_routes "https://github.com/nandan-108/resume-submission-portal/blob/main/routes/applicantRoutes.js"
click node_upload "https://github.com/nandan-108/resume-submission-portal/blob/main/middleware/upload.js"
click node_controller "https://github.com/nandan-108/resume-submission-portal/blob/main/controllers/applicantController.js"
click node_files "https://github.com/nandan-108/resume-submission-portal/blob/main/uploads/.gitkeep"
click node_pool "https://github.com/nandan-108/resume-submission-portal/blob/main/config/db.js"

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_form,node_client,node_success toneBlue
class node_server,node_routes toneAmber
class node_upload,node_controller toneMint
class node_files,node_pool,node_mysql toneRose
class node_applicant toneIndigo
```

## Components

### Browser experience

- [Application form](https://github.com/nandan-108/resume-submission-portal/blob/main/views/index.html): `views/index.html`
- [Form behavior](https://github.com/nandan-108/resume-submission-portal/blob/main/public/js/script.js): `public/js/script.js`
- [Success page](https://github.com/nandan-108/resume-submission-portal/blob/main/views/success.html): `views/success.html`

### HTTP server

- [Express server](https://github.com/nandan-108/resume-submission-portal/blob/main/server.js): `server.js`
- [Applicant routes](https://github.com/nandan-108/resume-submission-portal/blob/main/routes/applicantRoutes.js): `routes/applicantRoutes.js`

### Submission handling

- [PDF upload](https://github.com/nandan-108/resume-submission-portal/blob/main/middleware/upload.js): `middleware/upload.js`
- [Application handling](https://github.com/nandan-108/resume-submission-portal/blob/main/controllers/applicantController.js): `controllers/applicantController.js`

### Persistence

- [Resume files](https://github.com/nandan-108/resume-submission-portal/blob/main/uploads/.gitkeep): `uploads/.gitkeep`
- [MySQL pool](https://github.com/nandan-108/resume-submission-portal/blob/main/config/db.js): `config/db.js`
- **MySQL database**

### Other components

- **Applicant**

## Connections

- Applicant → Application form: fills form
- Application form → Form behavior: loads behavior
- Form behavior → Express server: requests pages
- Express server → Application form: serves form
- Express server → Success page: serves success
- Form behavior → Applicant routes: posts multipart
- Express server → Applicant routes: mounts API
- Applicant routes → PDF upload: accepts PDF
- PDF upload → Resume files: writes resume
- Applicant routes → Application handling: dispatches submission
- Application handling → Resume files: removes invalid upload
- Application handling → MySQL pool: executes queries
- MySQL pool → MySQL database: connects
- Application handling → Form behavior: returns application ID
- Form behavior → Success page: redirects with ID
