Skip to content

OBVS

Modernized internal volunteer management platform

Modernization of an existing internal volunteer management platform for Oak Bay Volunteer Services.

Role
Full-Stack Developer
Dates
March 2025 – June 2025
  • React
  • Flask
  • PostgreSQL
  • Redis
  • WebSocket
  • Docker
  • AWS
GitHubLive demo

01

Overview

Background

Oak Bay Volunteer Services had been relying on an aging internal management system that no longer supported the organization's evolving operational needs.

Why a redesign

Instead of building an entirely new product from scratch, the goal of this project was to redesign and modernize the existing platform while preserving its core operational purpose.

What was improved

The new platform centralized volunteer management, coordinator workflows, donations, reporting, and real-time operational communication into one modern administrative system.

My role

I contributed across frontend, backend, database, real-time communication, security, deployment, and overall system integration.

02

Challenges

What volunteers, coordinators, and staff experienced with the previous system.

Manual volunteer notifications

Staff members had to manually send emails or SMS messages to volunteers because the previous system did not provide an integrated notification mechanism.

Slow donation lookup

As donation records continued to grow, searching historical donation information became increasingly slow and inefficient.

Fragmented administration workflow

Volunteer management, donations, reporting, and operational tasks were spread across disconnected workflows, increasing administrative effort.

Outdated user experience

The previous administrative interface no longer supported an efficient workflow for daily operations and required modernization.

03

Solutions

Each solution below maps to one of the challenges above — technology appears only where it supports the solution.

Solves: Fragmented administration workflow

Modern Administrative Dashboard

A React-based administrative dashboard that consolidated volunteer management, coordinator operations, donations, reporting, and administrative tools into one consistent interface.

Administrative dashboard screenshot
  • React
  • Flask
  • REST API

Solves: Manual volunteer notifications

Real-time Notification System

A WebSocket-based notification system that pushes volunteer and coordinator updates the moment they happen, replacing manual emails and texts.

ReactClientWebSocketPersistent connectionFlaskApplication serverRedis Pub/SubEvent broadcastConnected ClientsAll active sessions
  • WebSocket replaced repeated polling, pushing updates to volunteers and coordinators the moment an event occurred.
  • Redis Pub/Sub synchronized events across multiple Gunicorn workers, so a message published on one worker reached clients connected to any other.
  • The frontend automatically recovered application state after reconnection, so a dropped connection never resulted in stale or missing data.

Why this design?

WebSocket removed the latency and server load of constant polling, and Redis Pub/Sub was the simplest way to keep real-time events consistent once the app ran behind multiple Gunicorn workers instead of a single process.

  • WebSocket
  • Redis Pub/Sub
  • Flask

Solves: Slow donation lookup

Performance Optimization

Donation history lookups slowed as records accumulated, because common search fields weren't indexed and PostgreSQL had to scan entire tables for each query.

Sequential ScanBefore — scans every rowIndex ScanAfter — targeted lookup
  • Added targeted indexes on the columns donation searches filtered and sorted by.
  • Used EXPLAIN ANALYZE to identify full table scans and rewrote slow queries around the new indexes.
  • Reduced lookup time on large donation histories, keeping search responsive as records grew.
  • PostgreSQL
  • Indexes
  • EXPLAIN ANALYZE

Solves: Reliable day-to-day operation

Production-ready Deployment

Every service ran as a container defined in Docker Compose and deployed to a single AWS EC2 instance behind Nginx and Gunicorn, with authentication, access control, and health checks keeping the system secure and observable in production.

InternetNginxReverse proxyGunicornWSGI serverFlaskApplicationPostgreSQLPrimary data storeRedisPub/Sub + cacheDocker ComposeOrchestrationAWS EC2Host
  • Docker Compose packaged the API, database, and Redis as reproducible containers, making deployment and rollback predictable.
  • JWT authentication and role-based access control (RBAC) restricted actions to the appropriate coordinator or administrator role.
  • CSRF protection and environment-based configuration kept secrets and database URLs out of the codebase across environments.
  • Health check endpoints let Nginx and the deployment process detect and recover from an unhealthy container automatically.
  • Docker
  • Nginx
  • AWS EC2
  • JWT
  • RBAC

04

Results

Concurrent users supported

80+

Real-time update latency

Sub-second

Database query performance improvement

30%

The completed platform replaced a fragmented set of manual workflows with a single real-time administrative system — giving Oak Bay Volunteer Services faster donation lookups, instant volunteer notifications, and a consolidated dashboard for day-to-day operations.

05

OBVS administrative dashboard
Administrative dashboard — volunteers, coordinators, donations, and reporting in one view.
OBVS volunteer management page
Volunteer management — coordinator workflows for scheduling and tracking volunteers.
OBVS donation management page
Donation management — indexed search across historical donation records.
OBVS notification center
Notification workflow — real-time WebSocket updates delivered to volunteers and staff.
OBVS reports dashboard
Reports — donation trends, volunteer activity, and service request metrics in one operational view.