Unofficial player statistics and song browser website for osu! https://wysi727.com
This repository has been archived on 2026-03-26. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
  • TypeScript 86.4%
  • JavaScript 12.5%
  • CSS 1.1%
Find a file
2025-04-30 22:22:47 +02:00
data add chinese traditional 2024-10-27 23:03:23 +01:00
locales New translations translation.json (Chinese Traditional) 2024-10-27 22:51:25 +01:00
migration add codeberg social 2025-01-02 21:18:02 +01:00
public remove arbitrary choke difference 2025-01-23 16:08:00 +01:00
src checks 2025-02-17 19:44:50 +01:00
tmp fix medals which apparently broke for some reason 2025-01-22 09:17:30 +01:00
.example.env crossing my fingers here 2024-09-29 22:20:14 +02:00
.gitignore bun 2024-10-22 19:09:35 +02:00
.prettierrc.json fixes 2025-02-14 23:22:44 +01:00
build.ts formatting 2024-10-24 11:55:48 +02:00
builder.js a 2024-09-27 00:15:57 +02:00
bun.lock fixes 2025-02-14 23:22:44 +01:00
crowdin.yml Update Crowdin configuration file 2024-07-13 00:28:53 +02:00
docker-compose.yaml laksdjflkdasjflkasjdfkljasdklfjasdlkfjasd;lkjf;laksdjfk;adlsjf;laksdjfkl;asdjfkl;asdjfA 2024-06-03 00:17:07 +02:00
docker-compose.yml not even gonna try this one 2025-04-30 22:21:53 +02:00
Dockerfile not even gonna try this one 2025-04-30 22:21:53 +02:00
eslint.config.js delete invalid tokens 2024-12-17 20:29:12 +01:00
LICENSE Create LICENSE 2024-03-25 14:45:28 +01:00
package.json Score page sometimes not working 2024-10-21 08:05:53 +02:00
README.md add some sort of documentation 2024-08-03 10:33:01 +02:00
tailwind.config.js New Setup Panel 2024-10-14 18:00:08 +02:00
test.ts formatting 2024-10-24 11:55:48 +02:00
tsconfig.json ups 2024-10-22 19:12:40 +02:00
wysi.service it almost kinda works 2024-09-29 18:52:51 +02:00

Translations

If you want to help translating the site there is a crowdin project with all the words to translate, contribute there and it will get added whenever i have time :P

If your language is not on the list, DM me and i'll add it

Contribute

Prerequisites

  • bun
  • mongodb
  • osu api v2 key

Setup

Create .env file from .example.env:

cp .example.env .env

then change the dummy values in .env to your real ones. (CROWDIN and KOFI are not needed to run the project)

Run the project

To install dependencies:

bun install

To run there is 2 scripts:

bun run dev # runs the project
bun run css # regenerates the css for tailwind

you need to be running both scripts.

Guidelines

Only a couple things here:

(some of this i haven't been following myself but lets try to do it from now on)

File Structure

  • All exportable types should be defined in src/types/...ts.
  • Every page in the website will have its own folder like src/components/page/Page.ts.
  • If you need to add translations DONT, its a pain and will change whenever i figure out a better way to handle this, so just hard code it in english for now
  • Althoug using tailwindcss is the prefered way of styling the site if you need to use manual css please do so on the main_in.css file, as the main_out.css is autogenerated by tailwind and will be overwritten.

Code

  • Every component should start with Uppercase both the file and the function definition.
  • Type ; youself, js auto semicolon insertion can go f**k itself ❤️;
  • Please use 4 space tab inentation 🙏.
  • Try to use verbose variable names so documentation is not needed to unserstand the code
  • type is prefered over interface.

Components should use the function(){} syntax and not () => {}. It would look something like this:

function Example(p: { a: string, b: number, c: Something<T> }) {
    return (<>
        <div>
            {a} and {b}
        </div>
    </>);
}

export default Example;

Props type should be defined on the arguments itself, unless either the type needs to be exported or its extremly complex (20+ values) in which it can also be defined elsewhere:

type SomeType = {
    a: string, 
    b: number, 
    c: Something<T> 
};

function Example(p: SomeType) {
    return (<>
        <div>
            {a} and {b}
        </div>
    </>);
}

export default Example;

notice that all component returns are structured with (<></>) unless its a oneline component <></> is prefered.