The Office of Water Programs (OWP) at Sacramento State is a global authority in water and wastewater treatment training and research.
This is a web-based forum application being developed as our senior project for the Office of Water Programs. Its purpose is to bridge the gap between communication and learning by allowing students and professionals to interact, share knowledge, and support each other in gaining valuable information related to water programs and initiatives. The platform provides a space for posts, comments, and real-time updates—supporting deeper engagement with water program training and initiatives.
-
Email-based login system
-
One-time passcode (OTP) sent through mail server
-
Secure account registration requiring:
- First & last name
- Email (used as username)
- Last 4 digits of SSN (identity verification)
| Role | Permissions |
|---|---|
| Admin | Assign roles, post with official tagging, view all reports, full system control |
| Moderator | Edit and recategorize posts, remove content, view reports |
| Student | Create posts, comment, like, report content |
| Guest (Unauthenticated) | Read-only access — no login required |
-
Create discussion threads with:
- Text
- Images
- Video support
-
Upvote / Downvote system for engagement
-
Commenting system with email notifications
-
Search functionality for posts, topics, and tags
- Developed to meet WCAG accessibility standards
- Fully responsive UI — mobile, tablet, and desktop supported
- Styled with Sac State colors and branding
| Layer | Technology |
|---|---|
| Frontend | |
| Backend | |
| Database | |
| Build Goal | Cloud-deployable production system |
Viewing a Specific Post
| Not Logged in | Logged in | Logged in as Mod/Admin |
|---|---|---|
![]() |
![]() |
![]() |
| Logged in as User/Student | Logged in as Mod/Admin |
|---|---|
![]() |
![]() |
Screenshots of the live, implemented OWP Forum application.
The Entity Relationship Diagram (ERD) below outlines the full database structure behind the OWP Forum.
It shows how core components—such as users, posts, comments, tags, categories, roles, permissions, and reporting—connect to form a secure and scalable forum ecosystem.
Key highlights of the database design:
-
User & Authentication System:
Includes users, sessions, OTP codes, roles, and permissions to support secure login and role-based access control. -
Forum Content Structure:
Posts link to authors, categories, tags, attached media, and user interactions such as likes and comments. -
Moderation & Reporting:
Users can report posts or comments, which tie into report categories and moderation workflows. -
Flexible Tagging & Categorization:
Many-to-many relationships allow posts to have multiple tags, enabling advanced filtering and search.
This structure ensures data integrity while supporting all major features of the platform, including posting, comment threads, moderation tools, and user identity verification.
Follow these instructions to get a local copy of the project up and running.
Before you begin, ensure you have the following installed:
-
PHP thread-safe preferred version: 8.3
-
PHP SQL Server Drivers PHP SQL server drivers from Microsoft & ODBC driver
-
Navigate to frontend directory:
cd frontend -
Install all required npm packages:
npm install
-
Run the frontend development server:
npm run dev
- Extract PHP to the desired directory and create a new system environmental variable for the path to the PHP installation.
- From the SQLSRV512.ZIP file you downloaded, copy the drivers php_pdo_sqlsrv_83_ts_x64.dll & php_sqlsrv_83_ts_x64.dll or equivalent drivers for the version of PHP you downloaded and paste them into the ext file inside your PHP installation
- Make a copy of the file php.ini-development inside your PHP installation, paste it inside your PHP installation, and rename it to php.ini.
- Inside php.ini, remove the ; from in front of extension=openssl and paste the follwing extensions below or their equivalents under ;zend_extension=opcache.
extension=php_sqlsrv_83_ts_x64.dll extension=php_pdo_sqlsrv_83_ts_x64.dll
- Copy the path of the ext file, inside your PHP installation file, and paste it inside the double quotes of the extension directory inside php.ini then save php.ini.
; On windows: extension_dir = "paste directory here"
- In a new terminal window, navigate to the backend directory from the project root:
cd backend - Install the required PHP dependencies using Composer:
composer require slim/slim slim/psr7 vlucas/phpdotenv
- Ensure You Have Configured Your Environment Variables: The backend needs credentials to run.
- First, copy the example
.env.examplefile to create your own local configuration file:
cp .env.example .env
- Next, open the new
.envfile. - Fill in the required parameters (database credentials, application secrets) with your correct development values.
- First, copy the example
This timeline tracks our project's progress across CSC 190 and CSC 191
| Sprint | Key Features / Goals | Status |
|---|---|---|
| 01 | Developed and finalized Figma Prototypes, established project scope in the Project Charter, and defined initial requirements/tech stack. | DONE |
| 02 | Set up Git/Jira environment, implemented the Login/Register UI, connected Authentication to the database backend, and built base site components (Headers/Footer). | DONE |
| 03 | Implemented Authentication Logic, developed Create Post Page, initiated backend for Tags/Categories, and built the User Profile Page for settings. | DONE |
| 04 | Fixed issues with Create Post Page, implemented functional Category View, updated Homepage to display posts, and signed the Project Charter. | DONE |
Focused on planning, UI design, project setup, and building core authentication and posting features.
| Sprint | Key Features / Goals | Status |
|---|---|---|
| 05 | Adjustments to Homepage layout, convert the Create Post Page into a Modal, create the Post View Page, implement Commenting, and enable user Post Reporting functionality. | TODO |
| 06 | Implement Admin Panel for role assignment, user Notifications, author Post Editing Privileges, and Admin/Mod post moderation (Move/Delete posts). | TODO |
| 07 | Work on Bug Fixes, perform full-site Testing, and make necessary final adjustments based on testing results. | TODO |
| 08 | Final application preparation and official environment Deployment for production. | TODO |
TBD
- Project Charter finalized
- Figma UI completed
- Authentication system implemented
- Admin Panel introduced
- Commenting and moderation added
- Full testing phase completed
- Deployment ready
TBD
TBD
This guide details the steps and standards required for contributing code to the OWP Forum project. All contributions must be linked to a story or subtask in Jira (using format BB-123).
All development work must be performed in a dedicated feature branch
- Pull the latest changes from the development branch (
dev):git checkout dev git pull origin dev
- Create your branch directly from
dev. The branch name must correspond to your assigned Jira story key:git checkout -b BB-123-your-story-description
Example Branch Name:
BB-123-implement-login-otp-logic
Each commit must address one specific change and clearly linked to a relevant Jira subtask.
- Stage your changes:
git add . - Commit Message Format: The message must begin with the related Jira subtask key, followed by a clear explanation of the work done:
git commit -m "BB-23: Add sign-in button to login page"
Once you're done working on your story, you will submit your code for peer review.
- Push your branch to the repository:
git push origin BB-123-your-story-description
- Create a Pull Request on GitHub to the
devbranch. - Peer Review: The PR must receive at least one approval from one of the team members before being merged.
- Cleanup: After the PR is merged into
dev, the original feature branch must be deleted.
This project is developed as part of the CSC 190/191 Senior Project sequence at
California State University, Sacramento.
We would like to thank:
- Instructor: Dr. Kenneth Elliot
- Lab Advisor: Prof. Harvin Singh
- Office of Water Programs (OWP) for partnering with us and providing project requirements and feedback.
- Maksim Shkrabak
- Daniel Ivanilov
- Jeffrey Sardella
- Oleksii Andriienko
- Egor Strakhov
- Ruzanna Shomakhova
- Gianni Dumitru
- Gavin Kabel
















