Print / PDF: Brug Ctrl+P (Windows) eller Cmd+P (Mac) og vælg Gem som PDF.
Kilde i repository: docs/DartNation-Funktionskatalog.md · Opdateret marts 2026.

DartNation produktkatalog

Denne version beskriver den nuværende platformfunktionalitet med fokus på klubdrift, spiloplevelse, statistik, kommunikation og administration.

Funktionskataloget er opbygget som en professionel reference for klubber, bestyrelser og samarbejdspartnere, der vil forstå både den praktiske værdi og den tekniske dybde i DartNation.

DartNation - funktionskatalog (komplet reference)

Dette dokument beskriver hvad DartNation er, hvad platformen kan, og hvordan den er bygget ud fra den aktuelle kodebase (Next.js + NestJS). Det er en teknisk/produkt-reference, ikke juridisk kontrakt.

Seneste opdatering af kataloget: marts 2026.


PDF / print-version (download)

Den fulde tekst publiceres som statisk HTML (A4-venlig CSS), så brugere kan åbne den og lave PDF via browseren (Udskriv → Gem som PDF):

Regenerer HTML efter ændringer i kataloget:

npx marked -i docs/DartNation-Funktionskatalog.md -o frontend/public/DartNation-Funktionskatalog-body.html
node scripts/build-catalog-html.cjs

(build-catalog-html.cjs lægger den færdige fil i public/ og sletter den midlertidige body-fil.)

Valgfri binær PDF (kræver Puppeteer; kan være tungt ved første kørsel):

npx md-to-pdf docs/DartNation-Funktionskatalog.md
copy docs\DartNation-Funktionskatalog.pdf frontend\public\DartNation-Funktionskatalog.pdf

(På Mac/Linux: cp i stedet for copy.) Hvis DartNation-Funktionskatalog.pdf findes i public/, er den også tilgængelig på /DartNation-Funktionskatalog.pdf.


1. Hvad DartNation er (overordnet)

DartNation er en webplatform til danske dartklubber og spillere. Den samler:

Teknisk stack: Next.js (App Router), NestJS, PostgreSQL (TypeORM), Socket.IO (realtime), planlagte jobs (@nestjs/schedule), filer under GET /uploads/*. Miljøvariabler styrer database, CORS, mail, SMS m.m. i produktion.


2. Roller og synlighed


3. Offentlige sider (uden login)

Rute Beskrivelse
/ Forside
/login Login
/funktioner Marketing: oversigt over nøglefunktioner
/funktioner/komplet-overblik Uddybende punktliste over platformfunktioner
/om-os Om DartNation
/statistik Offentlig statistik (hvor implementeret)
/spilcenter Offentlig introduktion til spilcenter
/dartklubber Kluboversigt
/tilmeld-klub Tilmelding af klub
/klub/[slug] Offentlig klubside (hvor aktiveret)
/DartNation-Funktionskatalog.html Komplet funktionskatalog (print/PDF via browser; kilde: docs/DartNation-Funktionskatalog.md).
/DartNation-Funktionskatalog.pdf Binær PDF (valgfri — kun hvis filen er lagt i frontend/public/ efter md-to-pdf).

4. Dashboard – alle hovedruter (/dashboard/…)

Fælles navigation (shell), notifikationer, live chat-widget m.m.

4.1 Forside og profil

Rute Beskrivelse
/dashboard Overblik; blokken «Seneste funktioner» hentes dynamisk fra GET /site/recent-features (JSON: backend/src/site/data/recent-features.json).
/dashboard/profil Profil (cover, billede, bio, kodeord, privatliv, opslagsfeed, rang, badges, streaks, XP, genbestykkelig sektionrækkefølge). Klubdokumenter (læsning/søgning for medlemmer) ligger som boks kun på egen profil.
/dashboard/statistik Statistik; personlige indsigter GET /stats/me/insights; trænerassistent GET /stats/me/coaching (JWT).
/dashboard/challenges Udfordringer/missioner, XP og leaderboard-perioder.
/dashboard/xp-predictions XP-forudsigelser: leaderboard (net XP), egen historik, klub-feed for valgt klub (hyldester med klubtilknytning).
/dashboard/mit-setup Dart-setup (grej), deling, likes/kommentarer.
/dashboard/mit-kast Kast/videoer, synlighed på profil.

4.2 Beskeder, socialt, handel

Rute Beskrivelse
/dashboard/indbakke Indbakke (klub + tråde).
/dashboard/messenger 1:1-chat.
/dashboard/notifikationer Notifikationer.
/dashboard/opslag Feed, likes, kommentarer, rapportering.
/dashboard/venner Venner, anmodninger, online-status, live spectate-indstillinger.
/dashboard/marketplace Annoncer, favoritter, kommentarer, admin-features for moderator.

4.3 Spilcenter og kampe

Rute Beskrivelse
/dashboard/spilcenter Indgang til spiltyper.
/dashboard/spilcenter/501 501 mod anden spiller (samme enhed).
/dashboard/spilcenter/bot 501 mod bot (niveauer, justerbar modstand).
/dashboard/spilcenter/ven Spil mod ven (delt skærm).
/dashboard/spilcenter/online Online kamp mod ven (synk + realtime).
/dashboard/spilcenter/smart-match Ranked smart matchmaking (ELO, kø, online-pool ± tier).
/dashboard/spilcenter/custom Custom games – regelbuilder og liste.
/dashboard/spilcenter/custom/play Afvikling af custom game.
/dashboard/spilcenter/3kamp 3-kamp.
/dashboard/spilcenter/cricket Cricket.
/dashboard/spilcenter/mickey Mickey-format.
/dashboard/spilcenter/skovhugger Skovhugger.
/dashboard/spilcenter/501-spectate Spectate-flow (501).
/dashboard/spil Kampeoversigt.
/dashboard/spil/[id] Kampdetalje.
/dashboard/traeningskampe Træningskampe liste.
/dashboard/traeningskampe/[id] Træningskamp detalje.

XP-forudsigelser i spilcenter (kort): Når modstanderens navn på brættet matcher en registreret bruger (resolver via venne-/brugeropslag), oprettes en spilsession og et kompakt XP-sats-panel kan vises under 501 (on_site/online), Cricket, Skovhugger, Mickey og under 3-kamp (én fælles session gameType: 3kamp for hele forløbet; afregning ved endelig 3-kamp-gem). Vennekampe (/dashboard/spilcenter/ven, online) bruger match-id; venner af spillerne kan også satse (synlighed håndhæves i backend). Ingen penge – kun XP. Se afsnit 5.10.

4.4 Kalender, turneringer, events, klub

Rute Beskrivelse
/dashboard/kalender Samlet kalender, personlig + klub, ICS-eksport.
/dashboard/turneringer Turneringer (afhænger af rolle).
/dashboard/events Events, tilmelding, fremmøde (klub kan knyttes til event).
/dashboard/medlemmer Medlemsliste.
/dashboard/medlemmer/[id] Medlemsprofil (anden bruger).
/dashboard/klubber Klubliste.
/dashboard/klubber/[slug] Klubprofil i dashboard.
/dashboard/klub-vs-klub KlubArena: oversigt, kampe, turneringer, events, kalender.
/dashboard/klub-vs-klub/[id] Enkelt klubkamp (lineup, delkampe, status).
/dashboard/holdopstilling Hold/teams pr. klub.
/dashboard/klubbeskeder Klubbeskeder (medlemsindbakke).
/dashboard/klubregler Klubregler / site-regler.
/dashboard/klubprofil-design Visuel profil for klub (admin).
/dashboard/klubdokumenter Omdirigerer til /dashboard/profil?vis=klubdokumenter (bogmærker). Dokumenter administreres under Administration.
/dashboard/klub-saeson Klub sæson & historik: halvårssæsoner, leaderboard, priser, all-time rekorder (baseret på træningskampe, events m.m.).

4.5 Administration og support

Rute Beskrivelse
/dashboard/besog Administration (kun ADM): kompakt menu med faner – overblik, Klubassistent, klubbeskeder, henvendelser, SMS, turneringer, events, hold, klubregler, klubprofil-design, klubdokumenter, økonomi, sikkerhedslog, kontakt, klager, opslagsrapporter, marketplace, medlemmer, API-integration (Lido), tilføj klub (Lido).
/dashboard/kontakt-os Kontaktformular.
/dashboard/indsend-klage Klageflow.

4.6 Teknisk / øvrigt

Rute Beskrivelse
/tunnel-test Udvikling/test (tunnel).

5. Produktfunktioner – punkt til prik (efter tema)

5.1 Medlemskab og brugere

5.2 Økonomi

5.3 Klubdokumenter

5.4 Klub sæson & historik

5.5 Klubassistent (admin)

5.6 Spil og realtime

5.7 Socialt og indhold

5.8 KlubArena (club vs club)

5.9 Integrationer og sikkerhed

5.10 XP-forudsigelser (fuld beskrivelse)

XP-forudsigelser er gamification uden penge: brugere satser kun XP på udfald, mens en kamp stadig er aktiv. Feature er ikke betting med rigtige penge.

Formål og princip

Hvem kan deltage?

Hvor vises funktionen?

Kontekst Adfærd
Online/same-enhed 501 (ikke vs_friend) Session med gameType on_site eller online; panel når session findes.
501 som del af 3-kamp (from=3kamp) Samme 3-kamp-session som øvrige discipliner (samme par brugere).
Cricket, Skovhugger, Mickey Egen gameType (cricket, skovhugger, mickey) eller 3kamp hvis indlejret i 3-kamp.
3-kamp (samlet) Én session 3kamp; kun den afsluttende 3-kamp-gem (gameType 3kamp) sender xpPlaySessionId — ikke delkampe enkeltvis.
Vennekamp / online mod ven friend_match-kilde via matchId; panel på 501-bræt når kamp kører.

Udfald (outcomes)

Livscyklus

  1. Åben session eller aktiv vennekamp → canPredict true i meta-endpoints.
  2. Bruger placerer forudsigelse: POST /xp-predictions med friendMatchId eller playSessionId, targetUserId, outcomeKind, stakeXp, valgfrit challengeNote, valgfrit supporterClubId (klub-hyldest).
  3. Ved kampafslutning (gem træningskamp med xpPlaySessionId, eller vennekamp complete): backend afregner pending-forudsigelser, opdaterer XP, sætter status won / lost / void.
  4. Realtime: xp_prediction_settled sendes til brugeren via Socket.IO; frontend viser post i notifikationsdropdown og på /dashboard/notifikationer.

Klub-feed

Leaderboard og historik

Vigtige API-endpoints (alle JWT unless andet)

Metode Sti Formål
POST /xp-predictions Placér forudsigelse
GET /xp-predictions/leaderboard Leaderboard
GET /xp-predictions/me Min historik
GET /xp-predictions/club-feed/:clubId Klub-hyldest-feed
POST /xp-predictions/play-session Opret/genbrug åben spilsession (spiller A/B, gameType)
GET /xp-predictions/play-session/:id/meta Meta + canPredict
GET /xp-predictions/play-session/:id/mine Mine forudsigelser på session
POST /xp-predictions/play-session/:id/cancel Annuller session + void pending
GET /xp-predictions/friend-match/:matchId/meta Meta for vennekamp
GET /xp-predictions/friend-match/:matchId/mine Mine forudsigelser på match

Træningskampe: POST /games accepterer valgfri xpPlaySessionId for at knytte afregning til session.

UI i spil (implementationsnote)


6. Backend API (NestJS) – moduler og præfix

REST uden globalt API-prefix. Frontend kan proxy’e via Next: /api/dartnation-backend/:path*.

Præfix Formål
/auth Login, logout, me, profil, adgangskode
/users Brugere, admin-oprettelse, søgning
/clubs Klubber
/memberships Medlemskaber, kontingentbetalinger, medlemmer pr. klub, vækst
/teams Hold
/finance Klubøkonomi, bilag
/bans Klub-udelukkelser
/games Kampe, udviklingsstatistik, sletning
/tournaments Turneringer
/events Events og tilmeldinger
/friend-matches Online vennekampe
/custom-games Custom games
/calendar Kalender + ICS
/club-vs-club Klubkampe
/online-match Køer, ELO, smart queue
/stats Stats, me/insights, me/coaching, admin-aggregat
/challenges Missioner, XP
/progression Progression (hvor eksponeret)
/rankings Ranglister
/friends Venner
/chat Samtaler
/messages Indbakke, klubbeskeder
/posts Feed, moderation
/setups Setups
/throws Kastvideoer
/marketplace Marketplace
/badges Badges
/upload Filer (profil, cover, chat, posts, marketplace, video, finance-dokumenter, klubdokumenter tmp)
/site Klubregler, recent-features, kontakt, klager, club messages, SMS, m.m.
/security-log Sikkerhedslog
/external-api Eksterne kald / DDU
/club-documents Klubdokumenter
/club-seasons Sæson & historik
/club-assistant Klubassistent (admin)
/xp-predictions XP-forudsigelser: placering, leaderboard, historik, play-session, vennekamp-meta, klub-feed

Statiske uploads: GET /uploads/*.


7. Realtid (Socket.IO)


8. Afgrænsning og vedligehold

Slut på funktionskatalog.

Slut på funktionskatalog.