Fullcourt Training

Indholdsfortegnelse

Fullcourt Training er et cross-platform basketballprodukt, der samler animerede øvelser og plays, brugerprofiler, gemt indhold, abonnementer og klubadgang i ét system. Jeg ejer produktet og har haft ansvaret for research, produktretning, visuel identitet, indholdsproduktion, udvikling, integrationer, tests, SEO og deployment.
Platformen består af en live Next.js-webapplikation og en produktionsklar Expo-app, som bruger den samme Supabase-backend. Den centrale tekniske udfordring har ikke blot været at vise sportsindhold, men at holde identitet og premium-adgang synkroniseret på tværs af web, iOS, Android og klubabonnementer med flere brugere.
Projektet kort fortalt
Fullcourt Training hjælper basketballtrænere og spillere med at forstå øvelser og plays gennem tydelige animationer frem for statiske diagrammer eller lange tekstforklaringer. Brugere kan udforske en struktureret playbook, oprette en profil, gemme indhold og få adgang til premium-materiale. Klubber kan købe adgang til flere personer og administrere, hvordan deres licenser bliver fordelt.
Projektet begyndte gennem et samarbejde med Onside – Training. Formålet var at undersøge mulighederne for et abonnementsbaseret produkt uden at tvinge Onside til at udskifte eller ombygge deres eksisterende løsning. Jeg brugte den kontekst som udgangspunkt for et selvstændigt produkt, som jeg nu ejer og videreudvikler.
Webapplikationen er live, mens mobilappen er teknisk klar til udgivelse. Jeg har udskudt den offentlige lancering af appen, fordi indholdsbiblioteket stadig mangler flere produktvideoer, før mobiloplevelsen er stærk nok til at blive lanceret ordentligt.
Kontekst og mit ansvar
Jeg har stået for hele produktforløbet. Det omfatter stakeholder-interviews, kravspecifikation, produktstrategi, UX, visuelt design, branding, animationer og videoproduktion, datamodellering, frontend- og backendudvikling, betalingsintegrationer, automatiserede tests, deployment, SEO og løbende vedligeholdelse.
Det brede ansvar har krævet, at jeg løbende skiftede mellem produktmæssige, tekniske og kommunikative opgaver. I dialogen med ikke-tekniske stakeholders fokuserede jeg på forretningsregler og brugeroplevelser frem for frameworks. Derefter oversatte jeg samtalerne til konkrete datastrukturer, adgangsregler, interface-states og testbare flows.
Jeg har også udviklet den native app i et separat offentligt repository: Fullcourt Training app.
Problemet
Basketballviden bliver ofte formidlet gennem whiteboard-tegninger, statiske banediagrammer eller lange forklaringer. De formater gør det svært hurtigt at forstå bevægelse, timing, spacing og de enkelte spilleres ansvar. Trænere har samtidig brug for materiale, som kan findes hurtigt under planlægning eller afvikling af en træning.
Forretningsproblemet var lige så vigtigt. Produktet skulle kunne monetisere premium-indhold på tværs af flere platforme. En bruger, der købte adgang på web, skulle have samme adgang i appen, mens køb på iOS og Android også skulle afspejles på websitet. Klubber havde et andet behov: De skulle kunne købe flere licenser og fordele dem uden at dele én fælles konto.
Indhold, authentication, betalinger og access control kunne derfor ikke behandles som uafhængige features. De skulle designes som ét samlet produktsystem.
Krav og begrænsninger
Jeg indsamlede krav gennem uformelle semistrukturerede interviews med Onside – Training og en basketballtræner, der fungerede som pilotbruger. Samtalerne med Onside tydeliggjorde de kommercielle krav, mens træneren gav praktisk indsigt i, hvordan øvelser og plays bliver fundet og anvendt.
Platformen skulle derfor:
- Fungere som ét sammenhængende produkt på web og mobil.
- Understøtte offentligt indhold, personlige premium-abonnementer og klubbaseret adgang.
- Gøre øvelser og plays nemme at browse, filtrere, forstå og gemme.
- Holde betalingslogik adskilt fra de interfaces, der bruger premium-status.
- Være forståelig for ikke-tekniske administratorer og kunder.
- Bevare dele af Onsides visuelle sprog og samtidig skabe en tydelig basketballidentitet.
- Danne et fundament for mere indhold og eventuelle koncepter til andre sportsgrene.
En yderligere begrænsning var, at app store-betalinger, webbetalinger og klubbetalinger følger forskellige regler. Arkitekturen havde derfor brug for én fælles entitlement-model frem for flere platformspecifikke definitioner af, hvad “premium” betød.
Produkt- og UX-beslutninger
Jeg modellerede øvelser og plays som domænespecifikt indhold frem for generiske posts. Indholdet kan organiseres efter blandt andet kategori, type, antal spillere og adgangsniveau. Det giver trænere relevante filtre uden at gøre browsingoplevelsen unødigt kompleks.
Det offentlige indhold giver værdi med det samme og gør det muligt at vurdere produktet før et køb. Premium-indhold skaber en grund til at abonnere uden at gøre hele platformen lukket. Interfacet kommunikerer tydeligt, hvilket materiale der er tilgængeligt, mens backenden håndhæver de samme adgangsregler uafhængigt af klienten.
Profiler understøtter gemte øvelser og plays, så platformen fungerer som en praktisk playbook frem for et katalog, man kun besøger én gang. Brugeren kan opbygge en relevant samling og tilgå den fra forskellige enheder.
Til klubber valgte jeg bevidst ikke at bruge delte konti. En klub køber en kode og får adgang til et dashboard, hvor den kan følge brugen. De enkelte brugere indløser koden på deres egne profiler og beholder dermed personlig identitet, gemt indhold og adgangshistorik.
Teknisk implementering
Webapplikationen er bygget med Next.js og TypeScript, mens mobilklienten bruger Expo og React Native. Begge bruger Supabase til authentication, applikationsdata og lagring af premium-status.
RevenueCat fungerer som subscription- og entitlement-lag. Webhooks opdaterer brugerens premium-status i Supabase, så begge klienter kan anvende én konsistent adgangsstatus uden at sprede betalingsudbyderens logik ud i hele applikationen. Stripe håndterer web- og virksomhedskøb, mens betalingsflows til iOS og Android er konfigureret og fungerer gennem RevenueCat, selv om appen endnu ikke er offentligt udgivet.
Den største arkitektoniske korrektion opstod, da jeg introducerede klubabonnementer. Min oprindelige model antog, at premium-adgang tilhørte én betalende bruger. Den var ikke designet til, at en organisation kunne købe adgang til flere selvstændige profiler. Hvis team billing var blevet presset ind i den eksisterende struktur, ville adgangsregler og renewals være blevet svære at vedligeholde.
Efter research af forskellige modeller implementerede jeg en kodebaseret løsning. Et klubkøb opretter en indløsningsmulighed og et administrationsinterface. Når en bruger indløser en gyldig kode, tildeler systemet en promotional entitlement i RevenueCat. RevenueCat sender derefter ændringen gennem det eksisterende webhook-flow, og Supabase gemmer den resulterende premium-status. Dermed kunne klubadgang genbruge den samme entitlement-arkitektur som individuelle køb i stedet for at skabe en anden og inkompatibel definition af premium.
Jeg bruger Playwright og Jest til at teste centrale bruger- og applikationsflows. Tests er særligt vigtige omkring authentication, code redemption og access control, hvor en mindre inkonsistens enten kan blokere betalende kunder eller give utilsigtet premium-adgang.
Kommunikation og samarbejde
En central del af projektet har været at kommunikere med personer, der havde en klar interesse i produktet, men ikke i de tekniske implementeringsdetaljer. I stedet for at bede stakeholders vælge teknologier præsenterede jeg konsekvenser: hvordan et abonnement ville fungere på tværs af enheder, hvad en klubadministrator kunne styre, og hvilke oplysninger en træner havde brug for, når en øvelse skulle findes.
Jeg oversatte disse samtaler til krav og derefter til tekniske research questions. Processen gjorde det lettere at undgå teknologivalg, før forretningsreglerne var forstået. Den gjorde det også muligt at forklare senere arkitektoniske ændringer, herunder hvorfor klubadgang havde brug for et separat købsflow, men en fælles entitlement-model.
Pilottræneren gav et praktisk referencepunkt for navigation og indholdsstruktur. Projektet har ikke gennemgået en større formaliseret usability-test, men samtalerne forankrede de centrale produktbeslutninger i reelle behov fra en træningssituation.
Resultater og nuværende status
Webproduktet er live med profiler, offentligt og premium-indhold, personlige abonnementer, virksomhedskøb, klubdashboards, code redemption og cross-platform entitlement-håndtering. Mobilappen er teknisk klar til udgivelse, inklusive fungerende betalingsflows på iOS og Android, men bliver holdt tilbage, indtil indholdsbiblioteket er stærkere.
Fullcourt Training har også opbygget et publikum uden for selve produktet. Projektets sociale kanaler har passeret 10.000 følgere og nærmer sig samlet 1,5 millioner visninger. Den rækkevidde understøtter produktet ved både at validere interessen for animeret basketballundervisning og skabe en direkte distributionskanal til nyt indhold.
Projektet udvikler sig fortsat gennem nye øvelser, plays, artikler og kommercielle features. Fordi jeg ejer både produkt og implementering, kan jeg koble feedback fra publikum direkte til produktbeslutninger og releases.
Læring og retrospektiv
Den største læring var, at billing-modeller skal behandles som domænearkitektur og ikke som checkout-detaljer. Min første implementering løste individuelle abonnementer godt, men gav ikke tilstrækkelig plads til klubbaseret adgang. Korrektionen krævede, at jeg adskilte køberen, den profil der modtog adgang, og selve entitlements.
Jeg lærte også værdien af at designe omkring stabile produktbegreber. Website og app har forskellige interfaces og betalingsbegrænsninger, men deler brugere, indhold, bookmarks og entitlements. Ved at placere disse entiteter i centrum af arkitekturen blev det muligt at udvide produktet uden at duplikere kernens logik.
Hvis jeg begyndte forfra, ville jeg inkludere organisationsadgang i den oprindelige domænemodel og definere relationerne mellem købere, grupper, brugere og entitlements tidligere. Den senere kodebaserede løsning fungerer godt, men vejen dertil krævede en omstrukturering af antagelser, der allerede lå i systemet.
Hvad projektet viser
Fullcourt Training viser, at jeg kan eje et produkt fra research og stakeholder-kommunikation til UX, arkitektur, implementering, tests, indhold og deployment. Projektet viser også, at jeg kan arbejde på tværs af web og mobil, integrere komplekse betalingssystemer og revidere en eksisterende arkitektur, når nye forretningskrav afdækker dens begrænsninger.
