← Index — Work

05Mobile-first product2025

Club Photo Hub

Every kick, ruck and try — filed for the right family.

Club Photo Hub

Core purpose

To give grassroots clubs a privacy-first way to capture, sort and share match-day photography — so parents get their child's images, coaches get consent on record and clubs get a single library.

01 — The problem

Grassroots clubs generate hundreds of sideline photos every weekend, then lose them in chat threads. Parents want their child's images, coaches want consent, clubs want a single library — and nobody wants public URLs.

02 — The approach

A match-day flow that takes under thirty seconds: parents and coaches drop photos and video from their phones, the system recognises the players and quietly sorts every shot into the right consent-controlled folder.

03 — The outcome

Photos filed in under 30s, parent-controlled visibility at 100%, zero public URLs. A privacy-first photo platform built around how match days actually run.

Core features

What it actually does.

  • F.01

    30-second upload

    Drop a batch from the sideline — kit, faces and squad numbers do the sorting.

  • F.02

    Player recognition

    Computer-vision matching against the squad list so each photo lands in the right player's folder.

  • F.03

    Consent-first folders

    Every player has a parent-controlled visibility setting — public URLs are off by default.

  • F.04

    Audit trail

    Who uploaded, who approved, who downloaded — a full record for the safeguarding officer.

How it was built

Under the bonnet.

Stack
React + Tailwind, mobile-first interaction model, vision API for face/kit matching.
Privacy model
Consent attached to the player record, not the photo — flipping a parent's setting cascades across every image.
Performance
Batch uploads chunked client-side so a phone on a wet sideline doesn't time out.
Roles
Coach, parent, safeguarding lead — each with a tightly scoped view of the same library.

Every kick, ruck and try — filed for the right family.

Visit the live site ↗

Next plate — 06

PM101