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.
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.
Den fulde tekst publiceres som statisk HTML (A4-venlig CSS), så brugere kan åbne den og lave PDF via browseren (Udskriv → Gem som PDF):
/DartNation-Funktionskatalog.htmlfrontend/public/DartNation-Funktionskatalog.html (bygges ud fra denne Markdown)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.
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.
ADM.memberships); adgang til klubspecifikke data afhænger af aktivt medlemskab.| 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). |
/dashboard/…)Fælles navigation (shell), notifikationer, live chat-widget m.m.
| 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. |
| 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. |
| 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.
| 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.). |
| 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. |
| Rute | Beskrivelse |
|---|---|
/tunnel-test |
Udvikling/test (tunnel). |
/dashboard/besog?tab=klubdokumenter)./club-documents (liste, upload multipart, download, read, read-status, PATCH, DELETE).YYYY-H1 / YYYY-H2)./club-seasons/season-keys, /club-seasons/:clubId/overview, /club-seasons/:clubId/all-time.GET /club-assistant/:clubId (ADM + medlem af klub).games, status, leaderboard.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.
| 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. |
match_winner): Hvem vinder kampen (afledt af gemt kamp / match-resultat).highest_checkout): Afregnes bedst når der findes legHistory / kasthistorik som ved 501; andre spiltyper kan mangle checkout-data → void eller 0 for den del.canPredict true i meta-endpoints./xp-predictions med friendMatchId eller playSessionId, targetUserId, outcomeKind, stakeXp, valgfrit challengeNote, valgfrit supporterClubId (klub-hyldest).xpPlaySessionId, eller vennekamp complete): backend afregner pending-forudsigelser, opdaterer XP, sætter status won / lost / void.xp_prediction_settled sendes til brugeren via Socket.IO; frontend viser post i notifikationsdropdown og på /dashboard/notifikationer.supporterClubId); brugeren skal være medlem af klubben./xp-predictions/club-feed/:clubId (JWT + klubmedlem): seneste rækker til visning på /dashboard/xp-predictions for valgt klub i ClubContext./xp-predictions/leaderboard: netto XP, sejre/tab blandt brugere med afviklede forudsigelser./xp-predictions/me: brugerens egne forudsigelser på tværs af kilder (friend_match, play_session).| 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.
/dashboard/xp-predictions.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/*.
xp_prediction_settled: payload med bl.a. predictionId, status (won / lost / void), stakeXp, payoutXp, message — bruges til notifikationer når en XP-forudsigelse er afregnet.Slut på funktionskatalog.
Slut på funktionskatalog.