Skip to content
All case studies

CS-17 — Backend & integrations

JF Bihotzetan — padel match app for the team

Mobile-first PWA for the JF Bihotzetan padel team to organise its internal matches: slot-based sign-up, court booking, per-match chat, push notifications and sharing via WhatsApp.

My role
Personal project; full design and implementation.
Period
2026
Disclosure
Public project
Technologies
TypeScriptNext.jsReactTailwind CSSPostgreSQLPrismaAuth.jsWeb PushVercelNeonVitest
Last reviewed
13 November 2026

Context

The team organised its padel matches by hand. It needed a simple mobile app to create matches, sign up for one of the four slots, know whether the court is booked and keep up with changes.

Challenges

  1. 01Consistent match rules with several users signing up at the same time (four slots, no duplicates).
  2. 02Reliable push notifications on mobile (including iOS) from a PWA.
  3. 03Editing matches without flooding the team with notifications.

Solution & architecture

Next.js 15 (App Router) with TypeScript, PostgreSQL and Prisma, and Auth.js with credentials and argon2. Match rules live in server-side services and every critical mutation runs inside a transaction; the service calculates the open/full status and court booking is an independent dimension. It includes a calendar, club management, post-match dinner, per-match chat with a message limit, admin roles, Web Push notifications behind a swappable provider interface and a share button with a compact match summary.

Key decisions

D-01

Business rules in services, not in components

Allows them to be tested with unit tests (slots, statuses, dinner, chat, deletion permissions) independently of the interface.

D-02

Notifications behind a provider interface

Web Push is used today; the channel can be changed without touching the logic.

D-03

A single consolidated notification when editing a match

Notes-only changes do not notify; changes to date, time or venue require the court status to be declared again.

Trade-offs

  • The reminder one hour before the match was removed because Vercel's free plan only allows daily cron jobs.

Results

In production and in use by the team, with separate production and pre-production environments.

Lessons learned

Not documented yet

The app is private to the team and requires an account: to try it out, contact Ander through the contact page. The code is private. Workflow with feature → develop (pre-production) → main (production) branches and automatic deployment.

Ask about this case study

Ask about this case studyAI · answers from an approved knowledge base · not Ander in real time

Questions here are answered with the case study “JF Bihotzetan — padel match app for the team” as context.

Enter to send · Shift + Enter for a new line0/1200