/ | Public API | layout | | |
/ | Front page | page, loader | 31 tables | 60 tests |
/a | Articles | page, loader | 0 tables | 1 test |
/a/:slug | Articles | page, loader | 0 tables | 1 test |
/admin | Admin | page, loader, action | 36 tables · 24 written | 6 tests |
/admin/streams | Admin | page, loader, action | 6 tables · 2 written | 1 test |
/admin/voice | Voice | page, loader, action | 25 tables · 2 written | none |
/analyzer | Build analyzer | page, loader | 3 tables | 5 tests |
/api | Api | page, loader, action | 9 tables · 2 written | 2 tests |
/api/chat/rooms | Chat | resource, loader | 21 tables | none |
/api/chat/rooms/:id | Chat | resource, loader | 21 tables | none |
/api/chat/rooms/:id/mentions/seen | Chat | resource, action | 5 tables · 2 written | none |
/api/chat/rooms/:id/messages | Chat | resource, loader, action | 26 tables · 6 written | none |
/api/chat/rooms/:id/read | Chat | resource, action | 21 tables · 3 written | none |
/api/layout | Layout | resource, loader | 44 tables | none |
/api/notifications | Notifications | resource, loader | 2 tables | none |
/api/status | Global status | resource, loader | 17 tables | none |
/api/voice/rooms/:id | Voice | resource, loader, action | 23 tables · 2 written | none |
/api/voice/telemetry | Voice | resource, action | 7 tables · 4 written | none |
/api/voice/webhook | Voice | resource, action | 20 tables · 2 written | none |
/art | Art | page, loader | 6 tables | none |
/art/new | Art | page, loader, action | 12 tables · 8 written | 3 tests |
/associations | Associations | page, loader, action | 10 tables · 3 written | 4 tests |
/associations/new | Associations | page, action | 7 tables · 3 written | 1 test |
/auth | Auth | resource, action | 4 tables · 1 written | 1 test |
/auth/callback | Auth | resource, loader | 2 tables · 2 written | none |
/auth/create-link | Auth | resource, action | 6 tables · 3 written | none |
/auth/impersonate | Auth | resource, action | 4 tables · 1 written | none |
/auth/impersonate/stop | Auth | resource, action | 4 tables · 1 written | none |
/auth/login | Auth | resource, loader | 1 table · 1 written | none |
/auth/logout | Auth | resource, action | 4 tables · 1 written | none |
/auth/refresh | Auth | resource, action | 4 tables · 1 written | none |
/badges | Badges | page, loader | 4 tables | 1 test |
/badges/:id | Badges | page, loader | 5 tables | 1 test |
/badges/:id/edit | Badges | page, action | 13 tables · 6 written | 1 test |
/builds | Builds | page, loader | 4 tables | 5 tests |
/builds/:slug | Builds | page, loader | 6 tables | 6 tests |
/builds/:slug/popular | Build stats | page, loader | 2 tables | 1 test |
/builds/:slug/stats | Build stats | page, loader | 4 tables | 1 test |
/calendar | Calendar | page, loader, action | 18 tables · 2 written | 8 tests |
/calendar.ics | Calendar | resource, loader | 15 tables | none |
/calendar/:id | Calendar | page, loader, action | 30 tables · 2 written | 2 tests |
/calendar/:id/report-winners | Calendar | page, loader, action | 15 tables · 4 written | 1 test |
/calendar/:year/:week | Public API | resource, loader | 3 tables | none |
/calendar/new | Calendar | page, loader, action | 32 tables · 12 written | 13 tests |
/comp-analyzer | Comp analyzer | page | | 4 tests |
/contributions | Info | page | | 1 test |
/end-season | Api private | resource, action | 4 tables · 1 written | none |
/events | Calendar | page, loader, action | 35 tables · 6 written | 10 tests |
/faq | Info | page | | 2 tests |
/friends | Friends | page, loader, action | 39 tables · 6 written | 11 tests |
/friends-for-adding | SendouQ | resource, loader | 5 tables | none |
/health | Health | resource, loader | 0 tables | none |
/ingest | Scanner ingest | resource, action | 20 tables · 4 written | none |
/leaderboards | Leaderboards | page, loader, action | 18 tables · 2 written | 1 test |
/lfg | LFG | page, loader, action | 21 tables · 2 written | 8 tests |
/lfg/new | LFG | page, loader, action | 11 tables · 2 written | 4 tests |
/links | Links | page | | 1 test |
/maps | Map list generator | page | | 1 test |
/notifications | Notifications | page, loader | 2 tables | 3 tests |
/notifications/seen | Notifications | resource, action | 5 tables · 2 written | none |
/notifications/subscribe | Notifications | resource, action | 5 tables · 2 written | none |
/object-damage-calculator | Object damage calculator | page, loader | 3 tables | 5 tests |
/org/:id | Public API | resource, loader | 4 tables | none |
/org/:slug | Tournament organization | page, loader, action | 20 tables · 4 written | 6 tests |
/org/:slug/edit | Tournament organization | page, loader, action | 14 tables · 5 written | 1 test |
/org/:slug/stats | Tournament organization | page, loader | 13 tables | 1 test |
/org/new | Tournament organization | page, action | 11 tables · 3 written | 2 tests |
/params/:slug | Params | page, loader | 0 tables | 2 tests |
/patrons | Api private | resource, loader, action | 5 tables · 2 written | none |
/patrons-list | Front page | resource, loader | 1 table | none |
/plans | Map planner | page | | 4 tests |
/player/:id | Top search | page, loader, action | 12 tables · 5 written | none |
/plus | Plus suggestions | page | | 3 tests |
/plus/list | Plus voting | resource, loader | 2 tables | none |
/plus/suggestions | Plus suggestions | page, loader, action | 20 tables · 3 written | 2 tests |
/plus/suggestions/new | Plus suggestions | page, action | 13 tables · 5 written | 2 tests |
/plus/voting | Plus voting | page, loader, action | 22 tables · 3 written | 3 tests |
/plus/voting/results | Plus voting | page, loader | 3 tables | 1 test |
/q | SendouQ | page, loader, action | 26 tables · 13 written | 11 tests |
/q/info | SendouQ | page | | 1 test |
/q/looking | SendouQ | page, loader, action | 45 tables · 15 written | 21 tests |
/q/match/:id | SendouQ match | page, loader, action | 49 tables · 18 written | 30 tests- Send and receive: a message crosses between two participants live
- Sends still in flight when the next one is fired all land
- A message sent before the event stream connected still arrives
- Split view: a participant gets the match and their own group chat, never the opponent's
- Unread badge: counts messages arriving while the sidebar is closed and clears on open
- Read state follows the user, not the device they read on
- Staff observer: chats in the match room, reads the group chats
- A closed room is readable by staff and denied to its participants
- Mobile: a chat panel opened before hydration fills in
- Mobile: the chat waits behind the tab bar, then opens straight into the room
- Tablet: the chat is a modal, and leaving the page or the layout closes it
- uploads a captured game, linking it to the SendouQ match it was played in
- A team's map preferences decide its modes and the maps it is given
- Ready check flow - both groups confirm and the match starts
- Score reporting: report, undo, weapon report, confirm
- Staff score report: non-participant staff force-reports and locks match
- Staff score confirm: confirms participant's 4-0 set-ender locks match
- Cancel flow: request, refused, re-request, accepted locks match and sends webhook
- Auto-resolve: day-old match with no score reported is canceled
- Auto-resolve: day-old match the other team never confirmed is confirmed
- Rejoin: trusted group one-click look again
- Rejoin after cancel: trusted group requeues with the blamed member
- Rejoin vote: 'no' shows rejoin queue button that rejoins directly
- Rejoin vote: changing a yes vote to no takes effect
- Rejoin vote: queueing solo after voting yes shows the rest a no
- Rejoin after cancel: the player both teams blamed is voted out of the requeue
- Rejoin vote: cascade wipes yes on no, revote completes and rejoins
- friend menu actions of SendouQ friends land on a real page
- shows the stream of a friend's SendouQ match
- prefills the match id when reporting from a match page
|
/q/preparing | SendouQ | page, loader, action | 27 tables · 10 written | 2 tests |
/q/ready | SendouQ | page, loader, action | 34 tables · 13 written | 3 tests |
/q/rules | SendouQ | page | | 1 test |
/q/streams | SendouQ streams | page, loader | 17 tables | 1 test |
/refresh-caches | Api private | resource, action | 33 tables · 1 written | none |
/run-routine | Api private | resource, action | 4 tables · 1 written | none |
/scanner | Scanner | page | | 15 tests |
/scrims | Scrims | page, loader, action | 40 tables · 9 written | 12 tests |
/scrims/:id | Scrims | page, loader, action | 37 tables · 10 written | 4 tests |
/scrims/new | Scrims | page, loader, action | 31 tables · 5 written | 5 tests |
/search | Search | resource, loader | 11 tables | none |
/seed | Api private | resource, action | 33 tables · 1 written | none |
/sendouq/active-match/:userId | Public API | resource, loader | 10 tables | none |
/sendouq/match/:matchId | Public API | resource, loader | 12 tables | none |
/set-plus-voting-active | Api private | resource, action | 4 tables · 1 written | none |
/settings | Settings | page, loader, action | 14 tables · 4 written | 14 tests |
/short/:customUrl | User page | resource, loader | 1 table | none |
/sidenav | Layout | resource, action | 4 tables · 1 written | none |
/sse | Events | resource, loader | 0 tables | none |
/sse/:connectionId/topics | Events | resource, action | 19 tables · 1 written | none |
/support | Info | page | | 1 test |
/suspended | Ban | page, loader | 1 table | 2 tests |
/t/:customUrl | Team | page, loader | 9 tables | 19 tests- crosses over to the team schedule and back, keeping the week
- stops friends seeing the schedule, then opens it up to a team joined later
- my team shortcut navigates to the team page on desktop
- mobile you panel shows the user and their team shortcut
- my team shortcut navigates to the team page on desktop
- creates new team
- edit team info
- edits and removes team map preferences
- kicks a member & changes a role
- sets a custom role for a member
- reorders members via move buttons
- shows a finalized tournament placement on the results page
- deletes team
- resets invite code, joins team, leaves, rejoins
- joins a secondary team, makes main team & leaves making the seconary team the main one
- makes another user editor, who can edit the page & becomes owner after the original leaves
- member sees the heatmap, the grid states and playable windows
- hides the schedule from non-members, a friend of a member included
- owner adds, edits and deletes a team event, a regular member only sees it
|
/t/:customUrl | Team | page, action | 13 tables · 4 written | 14 tests |
/t/:customUrl/edit | Team | page, loader, action | 10 tables · 2 written | 3 tests |
/t/:customUrl/join | Team | page, loader, action | 10 tables · 2 written | 2 tests |
/t/:customUrl/results | Team | page, loader | 14 tables | 1 test |
/t/:customUrl/roster | Team | page, loader, action | 11 tables · 3 written | 6 tests |
/t/:customUrl/schedule | Availability | page, loader, action | 29 tables · 6 written | 5 tests |
/t/new | Team | page, loader, action | 11 tables · 3 written | 1 test |
/team/:id | Public API | resource, loader | 2 tables | none |
/theme | Theme | resource, loader, action | 4 tables · 1 written | none |
/tier-list-maker | Tier list maker | page | | 3 tests |
/tiers | SendouQ | page, loader | 1 table | 1 test |
/to/:id | Tournament | page, loader | 25 tables | 87 tests- filters between tabs and navigates to an event
- creates a new tournament with a map pool and follow-up bracket
- creates a team picked tournament with a custom map pool
- copies a tournament keeping its follow-up bracket the same time after the start
- copies a tournament keeping registration open until the same time before the new start
- Tournament organizer posts into a match chat and is labelled
- An observer coming back to a match chat sees what was said while they were away
- adds member to tournament team via API
- removes member from tournament team via API
- censors bracket and reveals on click
- results page is censored and can be revealed
- shows my tournaments, my scrims and saved events, soonest first
- friend menu actions of tournament friends land on a real page
- live tournament streams link to the tournament's streams page
- shows streams to logged out visitors
- moves through common pages via the mobile nav and saves a setting
- renders public pages for a logged-out visitor
- assigns 6A/6B, lists the division on the divisions page, starts bracket, renders 36 matches across 6 rounds and two standings tables
- team can't register on their own, the TO adds them instead
- member added by the TO can't leave the team
- teams agree on a time, decline a reschedule, the organizer overrides it and the set gets played
- a set can't be played before the teams agree on a time or the round is playable
- a league of several divisions lists them on the divisions page
- gives and takes away staff role
- gives organizer role which allows another user to TO
- gives staff role which allows another user to see limited info
- can set cast twitch accounts in admin
- can view streams on bracket popover when match is in progress
- can view streams on streams page
- streamer live on both platforms shows as one card with a link per platform
- cast stream shows on bracket when match is set as casted
- shows tentative tier before bracket starts and confirmed tier after
- registers for tournament
- shows the estimated end time next to the start time
- quick adds all of the team's players at once
- shows the roster's availability for the event window
- registers a two player roster for a 2v2 tournament that takes no third member
- checks in and appears on the bracket
- adjusts seeds
- edits a registration, checks a team in and out, unregisters it and records it in the audit log
- adds a new team and records it in the audit log
- imports a roster from another tournament and registers it
- sets the counterpick map pool of a team that has none, rejects an incomplete edit to it and then edits it
- exports the team list
- adds a sub post on behalf of a user
- adds a sub post on behalf of a user whose team dropped out
- filters the team list by name and by captain Discord id
- edits an unstarted follow-up bracket while the started bracket stays locked
- reports score and sees bracket update
- losers bracket team winning grand finals forces a bracket reset
- completes and finalizes a small tournament with badge assigning
- locks/unlocks matches & sets match as casted
- resets bracket
- dropping team out ends ongoing match early and auto-forfeits losers bracket match
- plays double elimination groups into a redemption and a top cut
- finalizes a tournament with co-winners, each of them getting the trophy
- builds a grouped double elimination with rounds left unplayed
- completes and finalizes a small tournament (RR->SE w/ underground bracket)
- seeds the follow-up single elimination so group rivals rematch as late as possible
- shows tournament results on user profile after finalized tournament
- changes SOS format and progresses with it & adds a member to another team
- conducts a tournament with many starting brackets
- offers check out until the team's starting bracket starts and drop out after
- starts a starting bracket with the maps prepared for another starting bracket
- plays out a redemption bracket set up in the tournament creation form
- prepares maps (including third place match linking)
- ban/pick ${pickBan}
- ban/pick CUSTOM flow
- starts a round robin bracket with unevenly sized groups (5 teams)
- organizer edits a match after it is done
- changes to picked map pool & best of
- reopens round robin match and changes score
- reopening round robin match does not lock already-unlocked matches (issue #2690)
- user no screen setting affects tournament match
- hosts a 'play all' round robin stage
- swiss tournament with bracket advancing/unadvancing & dropping out a team
- swiss tournament with early advance replaying & giving a bye to a lone team
- sets active roster as regular member
- only asks for weapons of the maps played
- adds a sub mid tournament
- can end set early when past time limit and shows timer on bracket and match page
- shows a result reported while the app was suspended
- player adds their own sub post and deletes it
- player changes their sub preference without leaving the queue
- player who preferred to stay as sub keeps their post once the tournament starts and can replace it
- user can be promoted to admin gaining org controls and can edit tournaments
- banned player cannot join a tournament of that organization
|
/to/:id | Tournament | resource, loader | 23 tables | none |
/to/:id/admin | Tournament admin | page, action | 41 tables · 8 written | 28 tests |
/to/:id/admin | Tournament admin | layout | | 26 tests |
/to/:id/admin | Tournament admin | page, loader, action | 41 tables · 8 written | 26 tests |
/to/:id/admin/audit | Tournament admin | page, loader | 25 tables | 2 tests |
/to/:id/admin/brackets | Tournament admin | page, action | 28 tables · 11 written | 2 tests |
/to/:id/admin/import-teams | Tournament admin | resource, loader | 23 tables | none |
/to/:id/admin/registration/:tid? | Tournament admin | page, loader, action | 39 tables · 11 written | 7 tests |
/to/:id/admin/seeds | Tournament admin | page, loader, action | 34 tables · 3 written | 3 tests |
/to/:id/admin/staff | Tournament admin | page, action | 25 tables · 2 written | 3 tests |
/to/:id/admin/stream | Tournament admin | page, action | 25 tables · 2 written | 3 tests |
/to/:id/brackets | Tournament bracket | page, loader, action | 36 tables · 16 written | 42 tests |
/to/:id/brackets/finalize | Tournament bracket | page, loader, action | 43 tables · 15 written | 4 tests |
/to/:id/divisions | Tournament bracket | page | | 1 test |
/to/:id/info | Tournament | page, loader, action | 26 tables · 2 written | 21 tests |
/to/:id/join | Tournament | page, loader, action | 37 tables · 6 written | 1 test |
/to/:id/looking | Tournament lfg | page, loader, action | 48 tables · 8 written | 6 tests |
/to/:id/matches | Tournament match | page, loader | 24 tables | 1 test |
/to/:id/matches/:mid | Tournament match | page, loader, action | 62 tables · 16 written | 30 tests |
/to/:id/register | Tournament | page, loader, action | 52 tables · 12 written | 9 tests |
/to/:id/results | Tournament | page, loader | 24 tables | 4 tests |
/to/:id/rules | Tournament | page, loader | 23 tables | 2 tests |
/to/:id/streams | Tournament | page, loader | 32 tables | 4 tests |
/to/:id/subs | Tournament subs | resource, loader | 0 tables | none |
/to/:id/teams | Tournament | page, loader | 23 tables | 4 tests |
/to/:id/teams/:tid | Tournament | page, loader | 25 tables | 6 tests |
/to/:id/teams/:tid/comps | Tournament | resource, loader | 31 tables | none |
/to/search | Tournament | resource, loader | 4 tables | none |
/tournament-match/:id | Public API | resource, loader | 26 tables | none |
/tournament/:id | Public API | resource, loader | 6 tables | none |
/tournament/:id/brackets/:bidx | Public API | resource, loader | 23 tables | none |
/tournament/:id/brackets/:bidx/standings | Public API | resource, loader | 23 tables | none |
/tournament/:id/casted | Public API | resource, loader | 1 table | none |
/tournament/:id/players | Public API | resource, loader | 4 tables | none |
/tournament/:id/seeds | Public API | resource, action | 25 tables · 3 written | none |
/tournament/:id/starting-brackets | Public API | resource, action | 25 tables · 3 written | none |
/tournament/:id/streams | Public API | resource, loader | 5 tables | none |
/tournament/:id/teams | Public API | resource, loader | 24 tables | none |
/tournament/:id/teams/:teamId/add-member | Public API | resource, action | 39 tables · 9 written | none |
/tournament/:id/teams/:teamId/remove-member | Public API | resource, action | 32 tables · 5 written | none |
/tournament/:id/teams/:teamId/update-member-ign | Public API | resource, action | 27 tables · 5 written | none |
/tournament/:id/teams/upsert | Public API | resource, action | 39 tables · 11 written | none |
/translate | Translate | page, loader | 0 tables | none |
/translate/:language | Translate | page, loader | 0 tables | 2 tests |
/translate/:language | Translate | page, loader | 0 tables | 2 tests |
/trophies | Trophies | page, loader | 5 tables | 3 tests |
/trophies/:id | Trophies | page, loader | 14 tables | 3 tests |
/trophies/:id/backfill/:seriesId | Trophies | resource, loader | 13 tables | none |
/trophies/:id/placements/:userId | Trophies | resource, loader | 4 tables | none |
/trophies/:id/tournaments | Trophies | resource, loader | 6 tables | none |
/trophies/:id/wins/:userId | Trophies | resource, loader | 20 tables | none |
/trophies/new | Trophies | page, loader, action | 21 tables · 9 written | 3 tests |
/u/:identifier | User page | page, loader | 11 tables | 34 tests |
/u/:identifier | User page | page, loader | 47 tables | 22 tests |
/u/:identifier/admin | User page | page, loader, action | 17 tables · 2 written | 1 test |
/u/:identifier/art | User page | page, loader, action | 9 tables · 3 written | 2 tests |
/u/:identifier/builds | User page | page, loader, action | 8 tables · 3 written | 3 tests |
/u/:identifier/builds/new | User page | page, loader, action | 11 tables · 5 written | 4 tests |
/u/:identifier/edit | User page | page, loader, action | 18 tables · 3 written | 2 tests |
/u/:identifier/edit-widgets | User page | page, loader, action | 8 tables · 2 written | 5 tests |
/u/:identifier/results | User page | page, loader | 12 tables | 3 tests |
/u/:identifier/results/highlights | User page | page, loader, action | 14 tables · 3 written | 1 test |
/u/:identifier/seasons | User page | page, loader | 22 tables | 4 tests |
/u/:identifier/seasons | User page | page, loader | 12 tables | 4 tests |
/u/:identifier/seasons/stats | User page | page, loader | 16 tables | 1 test |
/u/:identifier/seasons/summary-graphic | User page | resource, loader | 24 tables | none |
/u/:identifier/vods | User page | page, loader | 5 tables | 2 tests |
/upload/admin | Img upload | page, loader, action | 5 tables · 2 written | 1 test |
/user-card/:id/friendship | User card | resource, loader | 4 tables | none |
/user-card/:id/note | User card | resource, action | 5 tables · 2 written | none |
/user-card/edit | User card | page, loader, action | 18 tables · 2 written | 2 tests |
/user-report/:id | User report | resource, action | 11 tables · 2 written | none |
/user/:identifier | Public API | resource, loader | 9 tables | none |
/user/:identifier/ids | Public API | resource, loader | 1 table | none |
/user/:userId/active-match | Public API | resource, loader | 10 tables | none |
/vods | Vods | page, loader | 5 tables | 2 tests |
/vods/:id | Vods | page, loader, action | 10 tables · 2 written | 3 tests |
/vods/new | Vods | page, loader, action | 10 tables · 4 written | 5 tests |
/weapon-usage | SendouQ | resource, loader | 4 tables | none |
/welcome | Info | page | | 1 test |
/xsearch | Top search | page, loader | 3 tables | 2 tests |