HKPL · Committee bug report

Every bug you reported — and exactly what we did.

The 31 items the committee filed on 3 July, in your own words, each with the root cause we found and the fix — verified live on the sandbox. Plus the four engineering items you asked for (rulebook enforcement, DUPR health board, integrity checker, and more).

31reported
30fixed + verified
1parked (your call)
0open bugs

Registration, money & approvals

Clubs and teams paying, and the Registrar approving them.

152

You said: "a new club should pay for the club registration fees same as the team registration… the club page needs the upload button for the receipt."

Done. The club-registration form now requires a payment-receipt upload, and the backend stores it for Finance/Registrar to verify.

register.htmlFixed + verified
157

You said: "Adding a new team from club management does not require payment proof."

Done. The "Register a new team" form on the club page now requires a receipt before it can submit — matching the main registration flow.

club.htmlFixed + verified
132
133
153

You said: "Club name should come with a red star… for all compulsory fields, please come with a red star to make it consistent."

Done. Every required field across the registration forms now shows a red asterisk consistently.

register.htmlFixed + verified
159
160

You said: "Cannot approve more than one approval… need to refresh every time to approve."

Done. Root cause was a shared button left disabled after the first approve. The queue now lets you approve one after another with no refresh.

registrar.htmlFixed + verified
151

You said: "Reject function does not work after entering the reason."

Done. Same root cause as above — reject now works every time with the reason recorded.

registrar.htmlFixed + verified

Captains & players

The team dashboard — rosters, scores, invitations, alerts.

147

You said: "Can captain and co-captain mobiles be displayed?"

Done. The captain & co-captain now show as tap-to-call numbers on the team card. (The display was built correctly — the sandbox captains just had no phone on file, so we added them. It now reads e.g. 📱 +852 6600 0014.)

app.htmlFixed + verified
155

You said: "Captain cannot read the alert message."

Done. The alert banner had broken grammar ("1 item need… · 1 need YOU"). It now reads plainly: 1 item needs your action.

app.htmlFixed + verified
150

You said: "The roster view is very messy after adding the player status."

Done. The availability control + Remove moved onto their own line so the roster reads cleanly.

app.htmlFixed + verified
158

You said: "Created a team, cannot add players to team roster."

Done. The club team card now has a "+ Add player" button that jumps straight into the roster wizard for that team.

club.html → app.htmlFixed + verified
131

You said: "The preview button needs to show all matches played… not just once, but 5 games in total."

Done. Results now show every game of a tie (LD, MD, MIX1-3) with each score, not just one.

results.htmlFixed + verified
148

You said: "The 'referee a match' button does not work, it jumps to the sign-in page."

Done. Captains & division reps are now allowed on the referee console, so the button opens it instead of bouncing to sign-in.

app.html → referee.htmlFixed + verified
156

You said: "I'm a team captain of one team, how can I plan the lineup for my opponent — it does not make sense."

Resolved. You can only plan your own team's lineup.

scoresheet.htmlResolved
139

You said: "I still cannot add multiple roles to one player."

By design — and now explained. A person has one real role. To test the app as someone else you don't stack roles, you stand in their shoes with the persona switcher. We added a clear note on the Users page that links straight to it.

admin.htmlBy design + explained

Admin & content tools

The League Admin and Editor surfaces.

142

You said: "The upload photo button does not work, also no error message."

Done. We tested the upload endpoint live — it works (returns the image). The real problem was the feedback was 10px and invisible. It now shows a clear "✓ Photo added — remember to Save," and errors read plainly.

admin.html · OrganizationFixed + verified
140

You said: "Can the social game page have the 'send feedback' function? Also, can we upload the games in a CSV format?"

Done — both. Added the feedback widget, plus a CSV bulk-upload with a downloadable template. It validates every row and tells you which rows failed (proven: 2 imported, 1 rejected with a clear reason).

social-games.htmlFixed + verified
141

You said: "The description of each page is not clear, can include more description."

Done. Every admin page now shows a plain one-line description under its title (all 38 tabs).

admin.htmlFixed + verified
149

You said: "Someone raised a dispute but the admin has to check the panel manually — there should be an alert on the dashboard."

Done. Open disputes now raise an alert on the admin dashboard and a badge on the sidebar.

admin.htmlFixed + verified
134

You said: "The information under 'Sections - show / hide' is messy."

Done. Each toggle's checkbox now sits tidily next to its label.

club.htmlFixed + verified
135

You said: "Day of play under 'register a new team' needs to start with upper case."

Done. Monday…Sunday now capitalised.

club.htmlFixed + verified
137

You said: "Can we have the preview function of the brand colour and accent colour?"

Done. Picking a brand or accent colour now updates the page preview live as you drag.

club.htmlFixed + verified
136

You said: "The error message on the club admin portal is not clear enough."

Done. It was dumping raw code. Now it reads plainly — e.g. "Website must be a full link starting with https://" and "Sponsor #1 needs a name" — and it auto-fixes a bare link like www.x.com so it just saves.

club.htmlFixed + verified

Public site & navigation

The links, menus, and shortcuts everyone uses.

154

You said: "The links in the League are too many. Club ranking should go to Clubs, Top 10 should go to Players. Organize the links under League better."

Done. Exactly as asked — Top Ten now lives under Players, Club Rankings under Clubs, and the League menu keeps only competition views.

top nav (site-wide)Fixed + verified
130

You said: "The links on the top navigation bar are not consistent with the bottom links, please make it the same."

Done — permanently. The footer is now built from the same source as the top menu, so the two can never drift apart again. Every nav destination appears in the footer.

every public pageFixed + verified
143
144

You said: "The Facebook link should link to [the HKPL Facebook page]."

Done. The Facebook link (and Instagram) are wired to the league's real social pages.

footer (site-wide)Fixed + verified
138
145

You said: "Add a shortcut here to act as a club admin (e.g. 212 club admin)… this page misses the club admin portal shortcut."

Done. The role picker and sandbox page now link straight into acting as a club manager.

qa.html · uat-sandbox.htmlFixed + verified

Parked — your call

146

Someone suggested: "Can we have a bookmark function to save important disputes into a dispute knowledge-management system?"

Parked. This is a new feature idea (a dispute knowledge base), not a broken thing — and it needs a product decision on what the "KB" should be (bookmarks? tags? a precedent library?). Left it out until you decide you want it. Nothing else depends on it.

disputes.htmlParked — awaiting your call

The engineering items you asked for

Beyond the reported bugs — the "is it really wired / does it really guard" questions.

✅ Does the rulebook actually guard registration?

Yes — proven live. Adding a 4.484-rated player to Division B (cap 3.699) is refused with "Player DUPR 4.484 exceeds division cap of 3.699." An in-band player is accepted. Every way onto a roster (add-player, join-request, invite-accept, borrow) asks the rulebook first, and fails safe if the engine ever errors.

See it: §3 of the playbook.

✅ The DUPR health board — does it really test, live?

Yes. The "Full run" button on the admin health card actually calls the DUPR Partner API — auth, reads, and a real match create → view → delete round-trip. Last run: 10 functions work + 1 reachable, 0 broken (3 are not-granted by design — bulk invite-user isn't on our key; player onboarding is "Login with DUPR").

Who sees it: the League Admin, on /admin.html. See §7 of the playbook.

✅ An integrity checker (there wasn't one)

Built. 12 read-only cross-checks for contradictions — orphan rosters, a match won by a team that didn't play, duplicate DUPR ids, stranded approvals, etc. Last run: 0 errors, 0 warnings.

Who sees it: the League Admin, on /admin.html. See §8 of the playbook.

✅ Cup Admin (Tournament Director) login was broken

Fixed. The role button existed but the test user was never created, so it 404'd. Now you can sign in as Cup Admin and run tournaments.

Try it: become Cup Admin.