<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kyoso</title>
    <description>The latest articles on DEV Community by Kyoso (@kyoso).</description>
    <link>https://dev.to/kyoso</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1103505%2Fdacd48db-c389-4232-8908-045d6ceec5a5.png</url>
      <title>DEV Community: Kyoso</title>
      <link>https://dev.to/kyoso</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kyoso"/>
    <language>en</language>
    <item>
      <title>The tools we use to shape Kyoso</title>
      <dc:creator>Kyoso</dc:creator>
      <pubDate>Sun, 25 Jun 2023 22:51:29 +0000</pubDate>
      <link>https://dev.to/kyoso/the-tools-we-use-to-shape-kyoso-7b2</link>
      <guid>https://dev.to/kyoso/the-tools-we-use-to-shape-kyoso-7b2</guid>
      <description>&lt;p&gt;Just like any other web application out there, Kyoso needs a set of reliable tools for it to be developed quickly and efficiently.&lt;/p&gt;

&lt;p&gt;With so many solutions for so many issues, some technologies were a bit difficult to decide on. After thinking perhaps a bit too much about the choices, we've set on using the following tech stack.&lt;/p&gt;

&lt;p&gt;It likely goes without saying, but we are &lt;strong&gt;NOT&lt;/strong&gt; affiliated with these technologies or the people behind them in way, shape or form. We just want to just give our thoughts as to why we made certain choices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Language
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org"&gt;Typescript&lt;/a&gt;, both for the backend and frontend. With so many Javascript libraries and frameworks being published and worked on an almost daily basis, it was a pretty easy choice, especially considering that Typescript specific tools have been on the rise with the purpose of creating the best developer experience by providing a solid type system that although not perfect, is still miles better than what Javascript has out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full-stack framework
&lt;/h2&gt;

&lt;p&gt;We decided it was best to handle the frontend and backend in one single repository. For this, we've gone with &lt;a href="https://www.typescriptlang.org"&gt;SvelteKit&lt;/a&gt;. It provides the usual features that frameworks have, like handling server-side rendering, reactivity, state management and much more, but SvelteKit achieves all this with a smaller footprint compared to others, whether it be less lines of code to implement something or its small bundle size.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;p&gt;We use &lt;a href="https://www.postgresql.org"&gt;Postgres&lt;/a&gt;, but we don't run raw queries, instead we use &lt;a href="https://www.prisma.io"&gt;Prisma&lt;/a&gt;, an ORM that provides type safety and performs database operations by using  Javascript that then gets translated to SQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;p&gt;SvelteKit provides a solid way for the frontend to communicate with the backend, but &lt;a href="https://trpc.io"&gt;tRPC&lt;/a&gt; does it even better. It creates endpoints that you can request via the tRPC client, providing type safety for the response.&lt;/p&gt;

&lt;p&gt;There are a few limitations that we did have to overcome though, like tRPC not handling form data, something that was annoying when handling file uploads and subscriptions for real-time data aren't the cleanest to write. Despite these issues, it's still one of best and likely the fastest way to develop an API with Typescript/Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Styling
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tailwindcss.com"&gt;Tailwind&lt;/a&gt; provides a ton of CSS utility classes that keeps your styling very close to the HTML while also allowing customization, something that &lt;a href="https://www.skeleton.dev"&gt;Skeleton&lt;/a&gt; expanded upon by providing a set of components, themes and utilities that were made specifically for Svelte and Tailwind.&lt;/p&gt;

&lt;p&gt;These tools provide a way to write CSS more efficiently whilst not being completely tied to a design system imposed by other component libraries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  File Storage
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://bunny.net"&gt;Bunny&lt;/a&gt; provides a very straight forward API for handling files in the cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  Payment processing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.paypal.com/home"&gt;PayPal&lt;/a&gt; makes it easy to handle payments without us manipulating sensitive user data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;p&gt;We couldn't find a library that made authenticating with both osu! and Discord at the same time easy, so we resorted to creating our own implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Some developers may choose to switch out some of these elements for something else, but almost all of these technologies are here to stay, with the only one likely to be switched is Prisma (If we do switch, I'll explain why). These tools together deliver one of the best developer experiences for developing a modern full-stack web application.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introducing Kyoso, an osu! tournament manager</title>
      <dc:creator>Kyoso</dc:creator>
      <pubDate>Sun, 25 Jun 2023 19:31:04 +0000</pubDate>
      <link>https://dev.to/kyoso/introducing-kyoso-an-osu-tournament-manager-3n20</link>
      <guid>https://dev.to/kyoso/introducing-kyoso-an-osu-tournament-manager-3n20</guid>
      <description>&lt;p&gt;&lt;a href="https://osu.ppy.sh/home"&gt;osu!&lt;/a&gt; is a popular free-to-play rhythm game where you click circles to the beat of any song you choose to play. It's very straight forward to learn but mastering it is a completely different story, a story which has lead to the development of a large competitive scene. A common way to have players face against each other is through tournaments.&lt;/p&gt;

&lt;p&gt;For years now, tournaments have been managed using Google Sheets, with many members of the community developing templates for specific uses like managing players and teams, pool beatmaps, calculate statistics for a round and many more uses. This has proved to be an effective way to handle the many tasks a tournament requires for it to be enjoyed by its participants, but it's far from perfect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A few issues that spreadsheets face include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They don't have a solution to authenticate players, leading to incorrect or dated information being inputted in forms.&lt;/li&gt;
&lt;li&gt;They have performance issues, whether it be many scripts being loaded or a large amount of data being inputted into cells.&lt;/li&gt;
&lt;li&gt;Templates either lock you in to a set of spreadsheets, making it hard to use custom templates; or have a set of templates that can work with others but are a pain to link.&lt;/li&gt;
&lt;li&gt;They can hit Google's limit for invocations made to Apps Script functions when handling lots of data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's the issue?
&lt;/h2&gt;

&lt;p&gt;You might saying that all of the above have a solution or don't even apply to some tournaments, and you'd be right actually, but having to implement these solutions requires more time and effort, not to mention that they can still be prone to errors. This is something that a small or even medium sized tournament is willing to go through without much issue, but for tournaments with a large staff team and a much greater registration count, these issues get harder and harder to deal with, not to mention that it leads to the tournament looking less professional, a concern that's becoming more prevalent as the tournament scene grows and becomes more mainstream.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's our solution?
&lt;/h2&gt;

&lt;p&gt;The name for our solution is Kyoso, a web application that aims to do what spreadsheets already do in a more elegant manner and also aiding in the previously mentioned pain points.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Kyoso has a set of "services" that help in different aspects, currently, the following services are planned to be implemented at some point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Registrations:&lt;/strong&gt; Handles everything related to teams, players, free agents and staff registrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mappooling:&lt;/strong&gt; Create mappools, suggest beatmaps and provide feedback for them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Referee:&lt;/strong&gt; Manage lobby and match schedules and provide referee functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statistics:&lt;/strong&gt; Automatically calculate leaderboards and scores for a round's lobbies and matches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pickems:&lt;/strong&gt; Host a tournament's pickems, this includes users signing up for pickems, handling picks submission and tracking total scores with a leaderboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above descriptions are just the superficial details, as we will implement features that would be impossible or too difficult with spreadsheets, such as a player invite system for teams, a mappools search engine to view how underused or overused a beatmap is and much more.&lt;/p&gt;

&lt;p&gt;The project is considerably complex, and therefore will take a lot of time to develop. If you'd like to contribute to this project, you could do so by joining our developer team or by providing feedback on the project. If you're interested in helping, contact &lt;code&gt;mario564&lt;/code&gt; on Discord.&lt;/p&gt;

&lt;p&gt;We hope to make Kyoso as best as it can be so it can help shape the future of tournaments for this circle clicking game. We hope to see you using our platform for your osu! tournaments later down the road.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
