skip to content
← ./wrkbangor-city-1876Bangor, Gwynedd2026
website + portal live · app coming soonFootball club

a whole club, in one codebase.

A fan-owned, volunteer-run club needed a new website, a club app and a way for volunteers to run it all. We built all three on one shared backend, in English and Welsh.

./film · bangor city 1876 fcmock data · 0:33 · sound on
A 33-second film, music only: the club app, the bilingual website and Bangor City 1876 in numbers.
Bangor City 1876 FC: the club website
Bangor City 1876 FC: fixtures, results + table
Bangor City 1876 FC: tickets + matchday

mock dataApp and portal screens use mock data from a fictional demo business: no real customers, staff or figures.

products on one backend
3
languages throughout: english + cymraeg
2
website pages
30
first commit to store-ready build
9 days
01./problems

an ageing site and a club run by volunteers.

The old WordPress site had a broken next-match widget and contact details that didn't match. Fans had no app, and volunteers had no easy way to post a score from the touchline.

  1. 01An ageing WordPress site with a broken next-match widget.

    A new website, every page in English and Welsh, with the next match always right.

  2. 02No app for supporters.

    A club app with a live match centre, fixtures, the table, news and a fan wall. It works offline at the ground.

  3. 03Posting a score meant a laptop and a login.

    A matchday command centre: one tap for a goal, card or sub, made for one hand on the touchline. Taps queue up when the signal drops.

  4. 04Fans heard about goals on social media last.

    Kick-off, goal, half-time and full-time pushes, sent in each fan's own language.

  5. 05Every update had to be made in three places.

    One backend: post once in the portal and it's on the website and in the app at the same moment.

  6. 06Writing up the match after a long day.

    AI drafts the match report from the game's own events, in English and Welsh, ready for a volunteer to check.

  7. 07Open fan chat needs keeping clean.

    The fan wall blocks bad language in both languages and hides a post after three reports.

02./automation

running on
its own.

The jobs that no longer need a person to remember them. Every box is real: what triggers it, the rules and AI it runs through, where someone steps in, and what comes out.

graph: bangor / matchday-live · 7 nodes · 6 edgeslive
triggergoal tappedcommand centre, one handdatatap queueholds taps if signal dropsrulesevent recordedserver clock · score · statsoutapp updates liverealtime match centreoutwebsite match pagerefreshed instantlyrulespush fan-outwelsh or english, per fanout“GÔL!”on every opted-in phone

one tap on the touchline updates the app, the website and every fan's phone, in their own language.

triggerai modeltool callruleshuman checkdataoutputdrag the graph →
03./screens

a closer look.

Bangor City 1876 FC: the club
the club
Bangor City 1876 FC: score predictions
score predictions
Bangor City 1876 FC: supporter profile + goal alerts
supporter profile + goal alerts
Bangor City 1876 FC: the website on a phone
the website on a phone

mock dataApp and portal screens use mock data from a fictional demo business: no real customers, staff or figures.

built with Next.js, React Native / Expo, Supabase, Realtime + push, Claude AI, Turborepo, Vercel

next ./wrk

Reubens Coffee

./start

ready?

have something you want to build?

It doesn't need to be figured out yet. Bring the idea, the problem and where you're at. That's enough to start.