π BPSFlow - Task Management System
BPSFlow is a web-based, real-time task management and collaboration application designed to assist employees of the Badan Pusat Statistik (BPS) in efficiently managing projects, spaces, and team workflows.
This application is built on top of the Laravel framework (providing robust backend REST endpoints and Inertia integration) and React (for a smooth Single Page Application frontend experience).
Multi-Workspace System : Users can create, switch, edit, and delete workspaces.
Workspace Member Management : Owners can invite members by email (role-based: admin, member) and modify roles.
Spaces (Channels) : Create public or private spaces (channels) within a workspace. Private spaces allow fine-grained user permissions.
Project & Task Boards : Define projects inside spaces, and build tasks inside projects.
Detailed Assignments : Assign tasks to space members, track status, priorities (low, medium, high), and due dates. Includes automatic email notifications on assignment changes.
File Attachment Manager : Upload files to assignments, download, and delete attachments. Auto-notifies owners/admins via email when new files are attached.
Interactive Gantt Charts : Track project timelines and schedules.
OAuth Google Integration : Quick sign-in using Google accounts.
Technology
Role / Description
Laravel
Backend MVC framework / Inertia.js SSR
React
SPA Frontend framework
Inertia.js
Monolithic bridge connecting Laravel and React without building a separate API
Tailwind CSS
Styling utility framework
Socialite
Social authentication (Google OAuth)
MySQL / Postgres
Relational Database
Vite
Frontend build tool
Mailables
SMTP-based transactional email notifications (Workspace/Assignment updates)
π Installation & Setup
Follow these steps to run BPSFlow locally:
git clone https://github.com/username/bpsflow.git
cd bpsflow
# Install PHP dependencies
composer install
# Install Javascript packages
npm install
3. Setup Environment Configuration
Copy the template .env file and generate the application key:
cp .env.example .env
php artisan key:generate
Open .env and set up your database connection, SMTP credentials for email notifications, and Google OAuth credentials:
DB_CONNECTION = mysql
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_DATABASE = bpsflow
DB_USERNAME = root
DB_PASSWORD =
MAIL_MAILER = smtp
MAIL_HOST = sandbox.smtp.mailtrap.io
MAIL_PORT = 2525
MAIL_USERNAME = your_username
MAIL_PASSWORD = your_password
GOOGLE_CLIENT_ID = your-google-client-id
GOOGLE_CLIENT_SECRET = your-google-client-secret
GOOGLE_REDIRECT_URI = http://localhost:8000/oauth/google/callback
Create the database and run the migrations:
5. Running the Application
Start both the Laravel development server and Vite asset compiler:
# Terminal 1: Laravel Backend
php artisan serve
# Terminal 2: React Frontend
npm run dev
Access the application at http://localhost:8000.
π API & Route Documentation
All routes within the system are defined across routes/web.php and routes/auth.php. Routes wrapped with the auth middleware require a valid session.
π Authentication Routes (routes/auth.php)
Method
URI
Controller / Action
Middleware
Description
GET
register
RegisteredUserController@create
guest
Show registration form
POST
register
RegisteredUserController@store
guest
Register new user
GET
login
AuthenticatedSessionController@create
guest
Show login form
POST
login
AuthenticatedSessionController@store
guest
Authenticate / Log in
GET
forgot-password
PasswordResetLinkController@create
guest
Forgot password page
POST
forgot-password
PasswordResetLinkController@store
guest
Send reset link email
GET
reset-password/{token}
NewPasswordController@create
guest
Reset password page
POST
reset-password
NewPasswordController@store
guest
Save new password
GET
verify-email
EmailVerificationPromptController
auth
Show verification prompt
GET
verify-email/{id}/{hash}
VerifyEmailController
auth, signed
Confirm email verification
POST
email/verification-notification
EmailVerificationNotificationController@store
auth, throttle
Resend verification email
GET
confirm-password
ConfirmablePasswordController@show
auth
Confirm password prompt
POST
confirm-password
ConfirmablePasswordController@store
auth
Verify password confirmation
PUT
password
PasswordController@update
auth
Update user password
POST
logout
AuthenticatedSessionController@destroy
auth
Log out user
π Google OAuth Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
GET
oauth/google
OauthController@redirectToProvider
None
Redirects user to Google OAuth server
GET
oauth/google/callback
OauthController@handleProviderCallback
None
Google callback handler; logs/registers user and creates default workspace
π€ Profile Management Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
GET
/profile
ProfileController@edit
auth
Renders user profile edit page
POST
/profile
ProfileController@update
auth
Updates user profile (name, email, photo upload)
DELETE
/profile
ProfileController@destroy
auth
Deletes user account and associated owned workspaces
POST /profile Payload:
name (string, required)
email (string, required, email)
photo (file, optional, image)
oldProfile (string, optional, old photo storage path to delete)
π Workspace Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
POST
/workspace
WorkspaceController@store
auth
Creates a workspace, assigns creator as OWNER
GET
/workspace/{workspace}
WorkspaceController@edit
auth
Edit workspace form
GET
/workspace/{workspace}/workpace
WorkspaceController@workspace
auth
Details of workspace
POST
/workspace/{workspace}
WorkspaceController@update
auth
Updates workspace name
POST
/workspace/{workspace}/switch
WorkspaceController@switchWorkspace
auth
Switches active workspace for user session
GET
/workspace/{workspace}/deleteWorkspace
WorkspaceController@deleteConfirmation
auth
Confirm workspace deletion page
DELETE
/workspace/{workspace}
WorkspaceController@destroy
auth
Deletes a workspace and switches active workspace
π₯ Workspace Members Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
GET
/workspace/{workspace}/members
Workspace_membersController@index
auth
List workspace members
POST
/invite
Workspace_membersController@invite
auth
Invites member to workspace & auto-adds to public spaces
POST
/role/{member}
Workspace_membersController@changeRole
auth
Updates workspace member status/role
DELETE
/workspace/{member}/members
Workspace_membersController@deleteMember
auth
Removes a member from workspace and its spaces
POST /invite Payload:
email (string, required, email)
role (string, required, in: admin, member)
workspace (integer, required, exists in workspaces.id)
POST /role/{member} Payload:
π¬ Space Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
POST
/space
SpaceController@store
auth
Create new space (public/private)
POST
/space/{space}
SpaceController@update
auth
Updates space name, type, and adds users
DELETE
/space/{space}
SpaceController@destroy
auth
Deletes a space
POST /space Payload:
workspace_id (integer, required)
name (string, required)
status (string, required, in: public, private)
members (array of integers, optional, required if status is private)
π Space Members Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
GET
/space_member/{spaceId}
Space_MembersController@getSpaceMembers
auth
Retrieve space members list (JSON)
DELETE
/space_member/{space_member}
Space_MembersController@deleteMember
auth
Remove member from space
ποΈ Project Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
POST
/project
ProjectController@store
auth
Create a new project inside a space
GET
/project/{space_id}
ProjectController@getProjects
auth
Fetch all projects inside a space (JSON)
POST
/project/{project}
ProjectController@update
auth
Updates project details
DELETE
/project/{project}
ProjectController@destroy
auth
Deletes a project
POST /project Payload:
space_id (integer, required)
name (string, required)
π Task Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
POST
/task
TasksController@store
auth
Create a new task within a project
GET
/task/{project_id}/tasks
TasksController@getTasks
auth
Fetch all tasks for a project
GET
/task/{tasks}
AssignmentsController@index
auth
Show assignment detail page for a task
POST
/task/{tasks}
TasksController@update
auth
Updates task details
DELETE
/task/{tasks}
TasksController@destroy
auth
Deletes a task
POST /task Payload:
project_id (integer, required)
name (string, required)
π Assignment Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
POST
/assignment
AssignmentsController@store
auth
Create a task assignment
POST
/assignment/{assignments}/assignment
AssignmentsController@renameAssignment
auth
Renames the assignment
POST
/assignment/{assignments}/assignee
AssignmentsController@updateAssignee
auth
Updates assignment member
POST
/assignment/{assignments}/status
AssignmentsController@updateStatus
auth
Updates task completion status
POST
/assignment/{assignments}/priority
AssignmentsController@updatePriority
auth
Updates task assignment priority
POST
/assignment/{assignments}/dueDate
AssignmentsController@updateDue
auth
Updates task assignment deadline
DELETE
/assignment/{assignments}
AssignmentsController@destroy
auth
Deletes the assignment
POST /assignment Payload:
name (string, required)
tasks_id (integer, required)
space_member_id (integer, nullable)
status (string, required)
priority (string, nullable)
due_date (date, nullable)
POST /assignment/{assignments}/assignee Payload:
space_member_id (integer, required)
workspace (object, required)
π File Attachment Routes (routes/web.php)
Method
URI
Controller / Action
Middleware
Description
POST
/assignment/{assignment}/file
FilesController@store
auth
Upload attachments to assignment
GET
/assignment/{assignment}/files
FilesController@getFiles
auth
List attachments for assignment (JSON)
GET
/files/{files}
FilesController@download
auth
Download file from storage
DELETE
/files/{files}
FilesController@destroy
auth
Remove file attachment from storage and DB
POST /assignment/{assignment}/file Payload:
file (array of files, required)
members (array of workspace members, required for email notifications)
workspace (object, required)