BeatKhana UI Rework + Badges + Stream Keys + Discord
For a long while you have probably not heard from BeatKhana! or me(Luna). While I might have seemed inactive, we have been working to push out some awesome stuff to BeatKhana!.
The UI Rework
A lot of you are probably familiar with the old BeatKhana! UI. When I initially started writing the platform I had a far less mature overview of the tournament scene and responsibilities and tooling. I made the decision to use a 'panels' structure which was probably the worst decision I have made in the history of BK.
So what exactly changed?
- Creating a tournament is no longer through an organiser panel but you can see the option in the 'View Tournaments' tab.
Instead of hunting for panels(previously /organiser, /staff, /headcoord, /coordinate, /hosting, /pooling, /headpooler) we now have all of these settings unified.
- In the tournaments page you will see a tab called "Private Access". There you can both view and edit the settings of tournaments where you are given explicit permissions
- If the tournament is already public or you are on the viewing page, you can simply press the Settings button in the top right
The profile page changed
- Profile settings is a bit cleaner now
- The UI rework includes standardised components(finally) and hence the UI style from this point on should be far more consistent
Profile Settings
In the new profile settings page you may notice that there are new options in https://beatkhana.com/users/@me/settings#linking. These new options are the ability to link your ScoreSaber account and select your primary id.
Primary ID selection has been a struggle for many and with no way to do it manually we needed a change. For this the "What way do you launch your game" section was created. Simply, if you launch the game through steam/pcvr it uses your steam id. Through oculus mode it uses your oculus pc id, while in standalone it uses the meta standalone id. For those not familiar with this they can use the launch method selection. For those familiar the page allows manual selection of ids.
Stream Keys
Tournaments can now request stream keys in the tournament settings page and once approved they will be able to use custom WebRTC servers if they wish.
Badges
A new feature called the "Central Badge Centre" is introduced. In this badge centre you can select any of the available providers and submit a badge request to them.
Please note that while all of the visible providers have agreed to work with us and will use the system, a couple are still in development phase and may take a while to actually get their end set up. Right now we are still awaiting ScoreSaber to develop their own badge system which will interact with the BeatKhana badge centre.
If you are a leaderboard or a platform that displays badges on users profiles, please contact us so we can maybe work together in making it easier for tournament organisers to submit their badges to all possible platforms.
Right each 'provider' vets badges for themselves and change requests, iterations and other details are isolated between provider and submitter. Of course newer badge versions can be propagated to multiple providers. As a provider you will have access to input a discord webhook url and also listen to custom webhook events for change requests, incoming badge requests, version updates, and a lot more. As a provider you will be able to add and remove review team members and create badge requirements


Badge requests can be submitted by non-beatkhana tournaments too!
Map Pooling Rewrite
The way map pooling was done for a long time on the platform was rudimentary. For this reason we have added user suggestions, map pool slots, better map flair management, filtering user suggestions, internally voting and commenting on a large databank of suggestions, and of course being able to browse a public archive of all map pools and maps used in previous tournaments already concluded.
If you are a pooler who is not accustomed to this system, do not worry, it is completely optional to use and the base features for adding maps, creating pools, and publishing them stays the same.
Discord Integration
You can now add the BeatKhana bot to your tournaments Discord server and it will be able to link roles for staff, players, qualified players, and you will also be provided with templates if you have not yet set up your roles or channels to make it easier to get started.
Discord integrations are completely optional to use.
A new registration requirement was also added to "Require Discord server membership" which requires the user(s) who want to register to be in the discord server of the tournament.
Role syncronisation works both to and from Discord and either direction can be toggled. This means that if you add a user as a coordinator on BeatKhana or you add them on Discord, both will result in the same outcome. However you can toggle if your actions in Discord should be reflected in BeatKhana, or if your actions in BeatKhana should be reflected in Discord. (I was not very coherent with this, the main point is it is toggleable whether data from discord and data from beatkhana syncs to the other platform).
Discord integration also includes the ability to create a thread for each registered team in a channel(only visible to team members and staff).
Match Sides Rewrite
Matches now have teams[] instead of side1, side2, which allows for more fun custom formats for tournaments.
Small Auth Additions
Auth tokens are now scoped and enforced by TA so not any BK token can access tournamentassistant
Endpoint Changes
The endpoints for BeatKhana have been changed and made more coherent and easier to work with
CDN
CDN is now a CDN and properly caches and distributes files through Cloudflare. It also has a new subdomain: cdn.beatkhana.com
Bracket System
Some flaws were found and fixed in bracket generation specifically regarding non-power of two single and double elimination bracket generation. These were patched after some research.
We've also added support for Swiss and Battle Royale bracket generation.
Additionally after all the fixes I've applied and everything I learnt about brackets I wrote a document which details the algorithms and procedures and maths behind BeatKhana brackets. I wrote this document at ~5am, so the coherence was not the best the least to say. However I did over an hour or two of refining with llms and adding LaTeX support to my markdown renderer and the result is a description that is as clear as possible in my opinion. Hopefully this doc inspires others looking to write their own brackets to do so and to make it better than what we have here :D
With that said you can find the doc at: https://beatkhana.com/documents
Coming Up
In the future we intend to:
- release the internal bk-client package to make it easier to interact with both the api and websocket
look into Ludus and the possibility of ScoreSaber Compete
- Please do not treat this with too much enthusiasm yet as right now ScoreSaber Compete holds no advantage over TA. Both are PCVR only, SS Compete is not battle tested, and as far as we can tell realtime scores are much harder to receive through SSC than through TA. Replay streaming has also not been developed 'to the extent that we'd feel comfortable calling it a proper tournament tool.' If you have any questions about this or would like to know more about why we are not considering Ludus yet, please do message us anywhere :D
