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
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.

- 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.
- 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.
- 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.
- 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
Gallery




