Skip to content

DanielTRZ/Cs50_Final_Project

Repository files navigation

# 🌈 Inclusive Job Board (Inkluzywne Oferty Pracy)

#### Video Demo:https://youtu.be/BIzb4YF1XJc

https://www.youtube.com/watch?v=BIzb4YF1XJc


## 📄 Project Description

### 🇺🇸 English

The "Inclusive Job Board" is an advanced, full-fledged web platform created as a final project for CS50. Its primary goal is to **connect job seekers looking for diversity and inclusion (D&I)** with companies that actively promote such values. The project surpasses standard job portals by offering a wide range of **user experience personalization tools**, advanced job filtering capabilities, and a digital CV builder.

The project addresses the market gap for dedicated, easily accessible resources for individuals seeking employment in environments that truly value equality and respect. It is a **Full-Stack application** built on the foundation of **Python and the Flask framework**, featuring full database integration to manage users, job postings, profiles, and application statuses.

### 🇵🇱 Polski

"Inkluzywne Oferty Pracy" to zaawansowana, pełnoprawna platforma internetowa stworzona w ramach Finałowego Projektu CS50. Jej głównym celem jest **połączenie kandydatów poszukujących inkluzji i różnorodności (D&I)** z firmami, które aktywnie promują takie wartości. Projekt wykracza poza standardowe portale pracy, oferując szereg narzędzi do **personalizacji doświadczenia użytkownika**, zaawansowanego filtrowania ofert oraz budowania cyfrowego CV.

Projekt rozwiązuje problem luki rynkowej dla dedykowanych, łatwo dostępnych źródeł dla osób szukających pracy w środowisku, które ceni równość i szacunek. Jest to **aplikacja typu Full-Stack**, zbudowana na fundamencie **Pythona i frameworka Flask**, z pełną integracją z bazą danych do zarządzania użytkownikami, ofertami pracy, profilami i statusami aplikacji.


## 🔑 Key Features

### 🇺🇸 English

The application distinguishes itself with complexity across four main areas: Search, Profiling, Interaction, and Accessibility.

#### A. Advanced Job Search (Inclusive Filtering)

* **Multifaceted Search:** Beyond standard search by **position, company, and location**, users can filter jobs by **contract type** and **experience level**.

* **Inclusivity (Friendliness) Filters:** The most critical feature is the advanced filtering system, allowing users to find offers friendly to specific groups, including: **LGBTQ+ friendly/inclusive**, **Neurodiverse inclusive**, **Disability-friendly**, **Gender equality**, **Equal pay commitment**, **Parent-friendly**, **Remote-friendly**, and **Open to juniors/seniors**.

* **Saving Job Postings:** Users can **save interesting job postings** to a dedicated **"Saved Jobs"** section for later application.

#### B. Profile Management and Personalization

* **Registration and Login:** Secure user authentication with password hashing.

* **"About Me" Section:** Allows users to build a detailed profile by entering data such as: **First Name, Last Name, Date of Birth, Education, Professional Experience, Courses, and Certificates**.

* **"My CV" Section (CV Upload):** Users can upload their CV document. **The APPLY function is strictly conditional on this step** – without an uploaded CV, application through the platform is blocked (see Design Choices).

* **"My Applications" Section:** Automatically tracks all job postings the user has applied to via the platform.

#### C. Interaction Tools

* **Inclusivity Quiz:** A short quiz designed to raise user awareness about D&I in the workplace. It serves as an educational component of the platform.

* **Subscription List:** The ability to subscribe to a newsletter to receive notifications about new, matching job offers or D&I content.

* **Useful Links:** A section featuring external, valuable links and resources related to career development and inclusivity.

#### D. Accessibility Features

* **Font Size Adjustment:** The capability to **increase and decrease font size** for users with varying visual needs.

* **Dark/Light Mode (Background):** A function to switch the **background to black**, enhancing reading comfort in low-light conditions and addressing accessibility needs.

* **Multilingual Support:** Full support for both **Polish and English** languages, which is essential for a D&I focused platform.

## 🔑 Kluczowe Funkcjonalności

### 🇵🇱 Polski

Aplikacja wyróżnia się złożonością w czterech głównych obszarach: Wyszukiwanie, Profilowanie, Interakcja i Dostępność.

#### A. Zaawansowane Wyszukiwanie Ofert (Filtrowanie Inkluzywne)

* **Wyszukiwanie Wielopłaszczyznowe:** Oprócz standardowego wyszukiwania po **stanowisku, firmie i lokalizacji**, użytkownicy mogą filtrować oferty według **typu umowy** oraz **poziomu doświadczenia**.

* **Filtry Inkluzywności (Przyjazności):** Najważniejszą cechą są zaawansowane filtry, pozwalające na wyszukiwanie ofert przyjaznych konkretnym grupom, m.in.: **LGBTQ+ friendly/inclusive**, **Neurodiverse inclusive**, **Disability-friendly**, **Gender equality**, **Equal pay commitment**, **Parent-friendly**, **Remote-friendly** oraz **Open to juniors/seniors**.

* **Zapisywanie Ofert:** Użytkownicy mogą **zapisywać interesujące oferty** do dedykowanej sekcji **"Zapisane oferty"** w celu późniejszego aplikowania.

#### B. Personalizacja i Zarządzanie Profilem

* **Rejestracja i Logowanie:** Bezpieczna autentykacja użytkowników z haszowaniem haseł.

* **Sekcja "O Mnie":** Umożliwia użytkownikom zbudowanie szczegółowego profilu, wprowadzając dane takie jak: **Imię, Nazwisko, Data urodzenia, Ukończone szkoły, Doświadczenie zawodowe, Kursy i certyfikaty**.

* **Sekcja "Moje CV" (Wgrywanie CV):** Użytkownicy mogą wgrać swój dokument CV. **Funkcja APLIKOWANIA na oferty jest ściśle uzależniona od tego kroku** – bez wgranego CV, aplikowanie przez platformę jest blokowane (patrz Wybory Projektowe).

* **Sekcja "Moje aplikacje":** Automatycznie śledzi wszystkie oferty, na które użytkownik zaaplikował za pośrednictwem platformy.

#### C. Narzędzia Interakcji

* **Quiz Inkluzywności:** Krótki quiz, który ma na celu zwiększenie świadomości użytkownika na temat różnorodności i inkluzywności w miejscu pracy. Stanowi element edukacyjny platformy.

* **Lista Subskrypcyjna:** Możliwość zapisu do listy subskrypcyjnej (newsletter) w celu otrzymywania powiadomień o nowych, pasujących ofertach lub treściach związanych z D&I.

* **Przydatne Linki:** Sekcja zawierająca zewnętrzne, wartościowe odnośniki i zasoby związane z karierą i inkluzywnością.

#### D. Funkcje Dostępności

* **Dostosowanie Rozmiaru Czcionki:** Możliwość **zwiększania i zmniejszania czcionki** dla użytkowników z różnymi potrzebami wzrokowymi.

* **Tryb Ciemny/Jasny (Tło):** Funkcja przełączania **tła na czarne**, co poprawia komfort czytania w warunkach słabego oświetlenia i jest istotne dla dostępności.

* **Wielojęzyczność:** Pełne wsparcie dla języka **polskiego i angielskiego**, co jest kluczowe dla platformy D&I.


## 💻 File Structure and Component Contribution

### 🇺🇸 English

The project is structured according to best practices for Flask applications. Each file serves a specific and critical role in the application's architecture:

* **app.py**: The core Flask application module and **the heart of the project**. It defines the application instance, database configuration, and the main user interface routes (e.g., homepage, search, profile management, accessibility controls). It handles business logic, database connection (SQLite), password hashing, **CV file management logic**, and rendering of dynamic templates.

* **\_\_init\_\_.py**: A blank but **critical** file. It informs the Python interpreter that the **Cs50-Final-Project-main** directory should be treated as a **Python package**, resolving import issues for modules like tests/test\_app.py.

* **tests/test\_app.py**: Contains the logic for unit and integration tests. Tests verify successful user registration and login, password hashing integrity, and crucially, the logic dependency—specifically, ensuring that the application logic **blocks job application if no CV is present**.

* **requirements.txt**: Lists all required Python libraries and dependencies, including Flask, database connectors, and **pytest** for testing.

* **Auxiliary files (add\_saved\_job.py, add\_test\_user.py):** Scripts for **database initialization**, used for quickly loading mock data and pre-hashed test users for rapid development and testing.

## 💻 Struktura Plików i Wkład Poszczególnych Komponentów

### 🇵🇱 Polski

Projekt jest zorganizowany zgodnie z najlepszymi praktykami dla aplikacji Flask. Każdy plik pełni specyficzną i kluczową rolę w architekturze aplikacji:

* **app.py**: Główny plik modułu aplikacji Flask i **serca projektu**. Zawiera definicje instancji aplikacji, konfigurację bazy danych oraz główne ścieżki interfejsu (np. strona główna, wyszukiwanie, zarządzanie profilem, kontrola dostępności). Zarządza logiką biznesową, połączeniem z bazą danych (SQLite), hashowaniem haseł, **logiką zarządzania plikami CV** oraz renderowaniem dynamicznych szablonów.

* **\_\_init\_\_.py**: Pusty, ale **krytyczny** plik. Informuje interpreter Pythona, że katalog **Cs50-Final-Project-main** ma być traktowany jako **pakiet Pythona**, co rozwiązuje problemy z importem dla modułów takich jak tests/test\_app.py.

* **tests/test\_app.py**: Zawiera logikę testów jednostkowych i integracyjnych. Testy weryfikują pomyślną rejestrację i logowanie, integralność hashowania haseł, a co najważniejsze, weryfikują zależność logiczną — upewniając się, że aplikacja **blokuje aplikowanie na ofertę, jeśli CV nie jest obecne**.

* **requirements.txt**: Lista wszystkich wymaganych bibliotek Pythona i zależności, w tym Flask, konektory do bazy danych i **pytest** do testowania.

* **Pliki Pomocnicze (add\_saved\_job.py, add\_test\_user.py):** Skrypty do **inicjalizacji bazy danych**, używane do szybkiego ładowania danych wzorcowych i wstępnie hashowanych użytkowników testowych w celu usprawnienia rozwoju i testowania.


## ⚙️ Design Choices and Rationale

### 🇺🇸 English

Key design decisions were made to optimize security, user experience, and to fulfill the platform's core mission of inclusivity and accessibility.

#### 1. Application Dependency on CV Upload (Critical Path Design)

* **Decision:** Blocking the "Apply" function if the user has not uploaded a CV to their profile.

* **Rationale:** This critical design choice ensures that applications sent via the platform are **complete and professional**. By enforcing the upload of the necessary document first, the system improves the **quality and reliability** of data submitted to hiring companies, which is essential for maintaining business partner trust and user credibility.

#### 2. Advanced Inclusivity Filters (Core Feature)

* **Decision:** Implementing highly detailed filters (e.g., "Neurodiverse inclusive," "Equal pay commitment").

* **Rationale:** This represents the **core value proposition of the platform**. Detailed filtering allows job seekers to precisely find a work environment that matches their specific needs, directly reinforcing the platform's mission to facilitate inclusion rather than just offering a general "D&I" tag.

#### 3. Dedicated Accessibility Features (Accessibility First)

* **Decision:** Implementation of font size adjustment and Dark Mode switching.

* **Rationale:** Consistent with the ethos of inclusivity, the application must be **accessible to all users**. These critical features ensure that users with different visual needs or light sensitivities can comfortably use the portal, making accessibility a fundamental design choice.

#### 4. Multilingual and Multi-Themed Design

* **Decision:** Full support for Polish/English and Light/Dark themes.

* **Rationale:** This decision significantly broadens the platform's reach and inclusivity. Multilingual support caters to a diverse user base, while the ability to toggle themes enhances user comfort and legal accessibility compliance.

#### 5. Using python -m pytest for Testing (Reliability)

* **Decision:** Adopting python -m pytest as the standard command for running tests.

* **Rationale:** Following initial path configuration challenges, this method was chosen because it reliably ensures the project's root directory is correctly added to sys.path. This guarantees successful import of the core app.py module by the test files, making the testing process **robust and portable**.

## ⚙️ Wybory Projektowe i Uzasadnienie

### 🇵🇱 Polski

Kluczowe decyzje projektowe zostały podjęte w celu optymalizacji bezpieczeństwa, użyteczności oraz spełnienia podstawowej misji platformy w zakresie inkluzywności i dostępności.

#### 1. Zależność Aplikowania od Wgranego CV (Krytyczna Ścieżka Projektowa)

* **Decyzja:** Blokowanie funkcji "Aplikuj" w przypadku, gdy użytkownik nie wgrał CV do swojego profilu.

* **Uzasadnienie:** Ten krytyczny wybór projektowy zapewnia, że aplikacje wysyłane za pośrednictwem platformy są **kompletne i profesjonalne**. Wymuszając wgranie niezbędnego dokumentu, system poprawia **jakość i wiarygodność** danych przesyłanych do firm rekrutujących, co jest kluczowe dla utrzymania zaufania partnerów biznesowych i wiarygodności użytkowników.

#### 2. Zaawansowane Filtry Inkluzywności (Główna Funkcja)

* **Decyzja:** Implementacja wysoce szczegółowych filtrów (np. "Neurodiverse inclusive", "Equal pay commitment").

* **Uzasadnienie:** Stanowi to **rdzeń wartości platformy**. Szczegółowe filtrowanie pozwala kandydatom precyzyjnie znaleźć środowisko pracy, które odpowiada ich konkretnym potrzebom, bezpośrednio wzmacniając misję platformy, jaką jest ułatwianie inkluzji, zamiast oferowania ogólnego tagu "D&I".

#### 3. Dedykowane Funkcje Dostępności (Dostępność Przede Wszystkim)

* **Decyzja:** Implementacja zmiany rozmiaru czcionki i Trybu Ciemnego.

* **Uzasadnienie:** Zgodnie z etosem inkluzywności, aplikacja musi być **dostępna dla wszystkich użytkowników**. Te krytyczne funkcje zapewniają użytkownikom z różnymi potrzebami wzroku lub wrażliwością na światło możliwość komfortowego korzystania z portalu, co jest fundamentalnym wyborem projektowym.

#### 4. Projekt Wielojęzyczny i Wielotematyczny

* **Decyzja:** Pełne wsparcie dla języka polskiego/angielskiego oraz motywów Jasny/Ciemny.

* **Uzasadnienie:** Decyzja ta znacznie poszerza zasięg i inkluzywność platformy. Wielojęzyczność jest odpowiedzią na zróżnicowaną bazę użytkowników, podczas gdy możliwość przełączania motywów poprawia komfort użytkownika i zgodność z przepisami dotyczącymi dostępności.

#### 5. Użycie python -m pytest do Testowania (Niezawodność)

* **Decyzja:** Przyjęcie python -m pytest jako standardowego polecenia do uruchamiania testów.

* **Uzasadnienie:** Po początkowych wyzwaniach z konfiguracją ścieżki Pythona, ta metoda została wybrana, ponieważ niezawodnie zapewnia poprawne dodanie katalogu głównego projektu do sys.path. Gwarantuje to pomyślne załadowanie głównego modułu app.py przez pliki testowe, co sprawia, że proces testowania jest **solidny i przenośny**.


## 🚀 Future Development

### 🇺🇸 English

While the current version of the "Inclusive Job Board" successfully meets all the core requirements of the CS50 Final Project, development efforts will not cease here. Work on the project will continue post-submission to enhance scalability, features, and overall user experience. Planned future development includes migrating the database to a production-ready environment (e.g., PostgreSQL) and implementing an administrative dashboard for employers.

### 🇵🇱 Polski

Chociaż obecna wersja "Inkluzywnych Ofert Pracy" z powodzeniem spełnia wszystkie kluczowe wymagania Finałowego Projektu CS50, prace rozwojowe nie zakończą się w tym miejscu. Praca nad projektem będzie trwała nadal po jego złożeniu, aby zwiększyć skalowalność, rozbudować funkcje i poprawić ogólne doświadczenie użytkownika. Planowany dalszy rozwój obejmuje migrację bazy danych do środowiska produkcyjnego (np. PostgreSQL) oraz wdrożenie panelu administracyjnego dla pracodawców.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published