A web platform connecting South African youth with learnerships and skills development opportunities
# SA Learnerships and Skills Development Portal - Oportunet
## Architecture Used
Our application uses a **hybrid client-server architecture** with a **page-based frontend** and a partial **layered service-repository structure**.
The browser acts as the client, while Firebase Authentication, Firestore, Firebase Functions, and EmailJS act as backend/server services. The frontend is organised into separate page folders for applicants, recruiters, admins, authentication, settings, profiles, notifications, and opportunities.
Internally, the application also follows a **layered structure**:
- **UI Layer:** HTML, CSS, and page-specific JavaScript files.
- **Shared Layer:** reusable helpers such as routes, constants, popup/modal logic, app shell logic, and notification rendering.
- **Service Layer:** handles application/business logic.
- **Repository Layer:** handles Firebase/Firestore data access.
- **Backend Layer:** Firebase Cloud Functions for backend tasks such as account cleanup.
The application is also **MVC-like**, although it does not use a formal MVC framework. The HTML/CSS files act as the **View**, the page scripts act like **Controllers**, and the services/repositories/Firebase data act as the **Model**.
## Main Structure
| Folder/Layer | Purpose |
|---|---|
| `Applicant_*`, `APPLICANT_*` | Applicant pages such as homepage, settings, profile, applications, and notifications |
| `Recruiter_*`, `RECRUITER_*` | Recruiter pages such as homepage, posts, applications, settings, and notifications |
| `ADMIN_*` | Admin dashboard, settings, and notification pages |
| `SignUp_LogIn_pages` | Authentication and role selection pages |
| `services` | Business/application logic |
| `repositories` | Firestore database access |
| `shared` | Reusable helpers, constants, routes, popups, session actions, and notification renderers |
| `functions` | Firebase Cloud Functions |
| `tests` | Jest tests for pages, services, repositories, and shared modules |
## Design Patterns …