Gå til hovedindhold

Fullcourt Training

  • Next.js
  • Expo
  • Supabase
  • RevenueCat
  • Tailwind
Indholdsfortegnelse

FULLCOURT TRAINING er en cross-platform basketballplatform, jeg byggede som bachelorprojekt og siden har videreudviklet. Løsningen består af en Next.js webapp og en Expo mobilapp, som deler samme Supabase backend.

Brugere kan oprette profiler, søge og filtrere øvelser, gemme favoritter og få adgang til premium-indhold via abonnement på tværs af web og mobil. Synkronisering af abonnementer og adgang håndteres med RevenueCat.

Hvad er Fullcourt Training?

Fullcourt Training er et digitalt basketball-playbook bygget til trænere og spillere, der hurtigt skal kunne finde, forstå og bruge øvelser og plays i praksis.

Projektet startede som et bachelorprojekt, men for mig blev det også en mulighed for at arbejde med et rigtigt produktproblem: hvordan bygger man en platform, der fungerer på tværs af web og mobil, samtidig med at brugerprofiler, gemte favoritter og premium-adgang hænger sammen som én samlet oplevelse.

Platformen kombinerer:

Problemet

Projektet tog udgangspunkt i et konkret produktproblem.

Onside – Training havde allerede erfaring med at distribuere sportsindhold digitalt, men deres eksisterende setup gjorde det svært at teste en abonnementsbaseret model. Deres web-løsning og app-spor fungerede ikke som ét samlet system, og det gjorde synkronisering mellem køb, brugeradgang og premium-indhold unødigt kompliceret.

Samtidig var der et tydeligt brugerbehov: En basketballtræner har brug for et digitalt værktøj, der altid er tilgængeligt, er nemt at navigere i, og gør det hurtigt at finde relevante øvelser til træning. Søgning, filtrering og tydelig præsentation af indhold var derfor afgørende fra starten.

Det betød, at opgaven ikke bare handlede om at vise indhold, men om at bygge et produkt, hvor indhold, brugeridentitet og adgangsstyring fungerer som ét system.

Løsningen

Jeg byggede Fullcourt Training som en cross-platform løsning med både web og mobil som indgange til det samme produkt.

Platformen gør det muligt at:

  • browse øvelser og plays
  • filtrere efter relevante kriterier
  • søge i indhold
  • gemme favoritter
  • oprette brugerprofil
  • låse premium-indhold op med abonnement

En vigtig del af løsningen var at skabe en model, hvor noget indhold er offentligt tilgængeligt, mens andet kræver premium-adgang. På den måde kan nye brugere få værdi ud af platformen med det samme, samtidig med at abonnementet stadig har en tydelig funktion i produktet.

Teknisk stack

Jeg valgte en stack, der kunne understøtte både hurtig udvikling, god brugeroplevelse og en relativt enkel drift:

  • Next.js til webappen
  • Expo til mobilappen
  • Supabase til auth, database, profiler og adgangsstyring
  • RevenueCat til abonnementer og synkronisering af premium-adgang
  • Tailwind til styling på web

Et vigtigt arkitektonisk valg var at behandle løsningen som ét produkt med to klienter frem for som en hjemmeside og en app, der bare lignede hinanden. Det gjorde det lettere at tænke i fælles domæner som brugere, øvelser, bookmarks og adgangsregler.

Vigtige tekniske beslutninger

Cross-platform fra starten

Jeg designede løsningen som et samlet system fra begyndelsen. Web og mobil skulle ikke kun dele branding, men også dele brugeridentitet, indhold og adgangslogik.

Fokus på adgang frem for kun betaling

Den svære del var ikke bare at tage imod betaling. Den svære del var at sikre, at en bruger med et aktivt abonnement fik korrekt adgang til premium-indhold, uanset om købet skete på web eller i appen.

Derfor blev abonnementer i praksis et spørgsmål om adgangsstyring og ikke kun checkout-flow.

Struktureret indholdsmodel

Øvelser og plays blev modelleret som mere end almindelige indlæg. De skulle kunne filtreres, kategoriseres og give mening i en træningskontekst. Derfor blev indholdsstrukturen en central del af produktets værdi.

De største udfordringer

Den største udfordring var at få abonnementer og premium-adgang til at fungere troværdigt på tværs af web og mobil.

Fra brugerens perspektiv skal det være helt simpelt: Betaler man ét sted, forventer man adgang alle steder. I praksis kræver det, at identitet, køb og adgangsregler spiller sammen, også når platforme håndterer betaling forskelligt.

En anden stor udfordring var at finde balancen mellem fleksibilitet og enkelhed. Produktet skulle være kraftfuldt nok til at understøtte filtrering, premium-indhold og personalisering, men stadig føles intuitivt for brugere uden teknisk baggrund.

Jeg lærte også hurtigt, at indholdsmodellering var vigtigere, end jeg først havde forventet. Hvis øvelser og plays ikke er struktureret på en måde, der matcher brugernes måde at tænke på, hjælper det ikke meget, at interfacet ser godt ud.

Hvad jeg lærte

Fullcourt Training lærte mig især, at gode tekniske valg starter med et klart produktproblem.

Det ville have været nemt at begynde med frameworks og arkitekturdiagrammer, men det rigtige udgangspunkt var spørgsmål som:

  • Hvordan skal premium-adgang fungere?
  • Hvad forventer brugeren på tværs af platforme?
  • Hvordan skal indhold struktureres, for at produktet faktisk er nyttigt?

Jeg lærte også, at abonnementssynkronisering ikke er en detalje, man bare kan lægge ovenpå senere. I et cross-platform produkt er det en kerneopgave, fordi hele oplevelsen bryder sammen, hvis adgangslogikken ikke er konsekvent.

Den vigtigste læring fra projektet var derfor, at et produkt som dette kun fungerer, når indhold, brugeridentitet og adgangsstyring er designet som ét samlet system.