# bornaboyafraz/opportunityos architecture

> Architecture diagram of the GitHub repository bornaboyafraz/opportunityos, 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/bornaboyafraz/opportunityos
- Repository: https://github.com/bornaboyafraz/opportunityos

## Overview

OpportunityOS is a student opportunity-tracking application. The main workflow is registration or login, followed by loading and managing a user’s private opportunities in a dashboard; records include status, deadline, link, and notes. The React app calls a Spring Boot API, whose controllers use repositories to persist users and opportunities in PostgreSQL. The dashboard also supports search, status filtering, deadline display, and status statistics. The README documents these capabilities; wiring not evidenced in the sampled frontend/API excerpts is left unconnected.

Main entry points: [`frontend/src/App.jsx`](https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/App.jsx) (App and dashboard), [`frontend/src/api.js`](https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/api.js) (API client), [`src/main/java/com/bornaboyafraz/opportunityos/controller/UserController.java`](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/controller/UserController.java) (User controller), [`src/main/java/com/bornaboyafraz/opportunityos/controller/OpportunityController.java`](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/controller/OpportunityController.java) (Opportunity controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["React frontend"]
  node_app["App and dashboard<br/>[App.jsx]"]
  node_helpers["Opportunity helpers<br/>[opportunities.js]"]
  node_api["API client<br/>[api.js]"]
end

subgraph group_backend["Spring API"]
  node_user_controller["User controller"]
  node_opportunity_controller["Opportunity controller"]
end

subgraph group_domain["Domain model"]
  node_user_model["User model<br/>[User.java]"]
  node_opportunity_model["Opportunity model<br/>[Opportunity.java]"]
end

subgraph group_persistence["Persistence"]
  node_user_repository["User repository"]
  node_opportunity_repository["Opportunity repository"]
end

node_student(("Student"))
node_postgres[("PostgreSQL")]

node_student -->|"uses"| node_app
node_app -->|"calls"| node_api
node_app -->|"filters and counts"| node_helpers
node_api -->|"HTTP auth requests"| node_user_controller
node_api -->|"HTTP record requests"| node_opportunity_controller
node_user_controller -->|"saves and looks up"| node_user_repository
node_opportunity_controller -->|"queries and mutates"| node_opportunity_repository
node_user_controller -->|"accepts and returns"| node_user_model
node_opportunity_controller -->|"accepts and returns"| node_opportunity_model
node_user_repository -->|"persists users"| node_postgres
node_opportunity_repository -->|"persists opportunities"| node_postgres

click node_app "https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/App.jsx"
click node_helpers "https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/lib/opportunities.js"
click node_api "https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/api.js"
click node_user_controller "https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/controller/UserController.java"
click node_opportunity_controller "https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/controller/OpportunityController.java"
click node_user_model "https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/model/User.java"
click node_opportunity_model "https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/model/Opportunity.java"
click node_user_repository "https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/repository/UserRepository.java"
click node_opportunity_repository "https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/repository/OpportunityRepository.java"

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_helpers,node_api toneBlue
class node_user_controller,node_opportunity_controller,node_postgres toneAmber
class node_user_model,node_opportunity_model toneMint
class node_user_repository,node_opportunity_repository toneRose
class node_student toneIndigo
```

## Components

### React frontend

- [App and dashboard](https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Opportunity helpers](https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/lib/opportunities.js): `frontend/src/lib/opportunities.js`
- [API client](https://github.com/bornaboyafraz/opportunityos/blob/main/frontend/src/api.js): `frontend/src/api.js`

### Spring API

- [User controller](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/controller/UserController.java): `src/main/java/com/bornaboyafraz/opportunityos/controller/UserController.java`
- [Opportunity controller](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/controller/OpportunityController.java): `src/main/java/com/bornaboyafraz/opportunityos/controller/OpportunityController.java`

### Domain model

- [User model](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/model/User.java): `src/main/java/com/bornaboyafraz/opportunityos/model/User.java`
- [Opportunity model](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/model/Opportunity.java): `src/main/java/com/bornaboyafraz/opportunityos/model/Opportunity.java`

### Persistence

- [User repository](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/repository/UserRepository.java): `src/main/java/com/bornaboyafraz/opportunityos/repository/UserRepository.java`
- [Opportunity repository](https://github.com/bornaboyafraz/opportunityos/blob/main/src/main/java/com/bornaboyafraz/opportunityos/repository/OpportunityRepository.java): `src/main/java/com/bornaboyafraz/opportunityos/repository/OpportunityRepository.java`

### Other components

- **Student**
- **PostgreSQL**

## Connections

- Student → App and dashboard: uses
- App and dashboard → API client: calls
- App and dashboard → Opportunity helpers: filters and counts
- API client → User controller: HTTP auth requests
- API client → Opportunity controller: HTTP record requests
- User controller → User repository: saves and looks up
- Opportunity controller → Opportunity repository: queries and mutates
- User controller → User model: accepts and returns
- Opportunity controller → Opportunity model: accepts and returns
- User repository → PostgreSQL: persists users
- Opportunity repository → PostgreSQL: persists opportunities
