Back to All Projects
UI/UX Design  ·  Mobile-First  ·  2026

BriskWalk

Event registration platform for PPI Malaysia's annual community charity walk. Designed in Figma, built with vanilla HTML/CSS/JS, multi-step form, client-side image compression, and a Google Sheets backend.

Figma Vanilla JS Canvas API Google Apps Script Mobile-First
Status
Completed
Year
2026
Role
Designer & Developer
Organizer
PPI Malaysia
Venue
Dataran Putrajaya
01 Project Overview

BriskWalk is the event registration platform I designed and built for PPI Malaysia's annual community charity walk, a single-page, mobile-first form that participants fill out on their phones to sign up, pay the registration fee, and upload proof of payment, all in one flow.

I designed the UI in Figma, then built it in vanilla HTML, CSS, and JavaScript — no framework, because the form does one job: collect a participant's details fast on a phone, on a slow connection, at a crowded booth.

The detail that mattered most: payment proof screenshots from phone cameras can be 4-8MB each. Uploading dozens of those over campus Wi-Fi would have been painfully slow, so the image compression pipeline became the most important piece of engineering in the whole project.

Registration ran from 13 March – 3 May 2026 for the walk held at Dataran Putrajaya on 10 May 2026, with a flat RM15 registration fee redeemable for food and beverages at the event booth.

02 Interface

The registration form as participants saw it, plus the event identity it was built around.

RegistrationParticipant registration form with client-side image compression
BriskWalkEvent identity
03 Image Compression Pipeline

Every participant uploads a payment proof screenshot before submitting. Rather than send the raw file straight to the backend, the form compresses it client-side using the Canvas API before upload:

1
Read & decode
The uploaded image is read via FileReader and drawn onto an off-screen <canvas> element.
2
Auto-resize
Images wider than 1400px are downscaled to fit, since a payment screenshot never needs to be larger than that to stay legible.
3
Re-encode to WebP
The canvas exports to WebP at 78% quality via canvas.toBlob(), typically cutting file size by 70-90% versus the original camera screenshot.
4
Upload
The compressed blob is sent to the backend, keeping every submission fast even on weak mobile data.

The uploaded image is read via FileReader and drawn onto an off-screen <canvas> element.

Images wider than 1400px are downscaled to fit, since a payment screenshot never needs to be larger than that to stay legible.

The canvas exports to WebP at 78% quality via canvas.toBlob(), typically cutting file size by 70-90% versus the original camera screenshot.

The compressed blob is sent to the backend, keeping every submission fast even on weak mobile data.

04 Backend & Data Flow

There's no traditional server here, the whole backend runs on Google Apps Script, deployed as a web app endpoint that the registration form posts to directly.

  • Participant details (name, university, WhatsApp number) are appended as a new row in a Google Sheet, giving the PPI Malaysia organizing team a live, shareable spreadsheet of registrations with zero extra tooling.
  • The compressed payment proof image is uploaded straight into a Google Drive folder, named and linked back to its corresponding sheet row.
  • This kept the entire project free to run and easy for non-technical committee members to check and verify payments without needing a dashboard or login.
05 Form Design

The layout is split into two stacked sections so the form never feels overwhelming on a small screen: participant details first (name, university, WhatsApp number), then payment second (QR code, bank transfer details, and the upload field).

Event meta at a glance
Registration window, venue, and event date sit right under the logo so participants don't have to scroll or guess.
Built-in QR payment
A QR code and bank details are shown inline, so participants can pay without leaving the page or switching apps.
One-tap upload
The proof-of-payment field opens the phone's camera roll directly, no extra steps between paying and submitting.
Single submit action
One "Register" button at the bottom handles validation and submission for the whole form in one go.
Tech Stack
Figma Vanilla JS HTML5 CSS3 Canvas API WebP Google Apps Script Google Sheets Google Drive
Links
GitHub
Designed and shipped solo.
From Figma mockup to a live registration form handling real participants and real payments, built end to end for PPI Malaysia's BriskWalk 2026.
View on GitHub