Competitive Splatoon Platform
Go to file
2026-01-01 20:44:24 +02:00
.github SQ serverside refactoring, add tests, add Knip (#2665) 2025-12-22 15:47:15 +02:00
.vscode Fix swiss pairing algorithm (#2446) 2025-07-10 20:17:58 +03:00
app Fix select clear button placement on Safari & Firefox 2025-12-31 17:07:44 +02:00
content/articles Stronghold Article: "January + February 2026 LANs" (#2682) 2025-12-30 16:56:53 +02:00
docs Update docs 2025-12-28 16:48:17 +02:00
e2e Fix flaky E2E test 2026-01-01 11:26:09 +02:00
locales SQ serverside refactoring, add tests, add Knip (#2665) 2025-12-22 15:47:15 +02:00
migrations LFG post language select (#2660) 2025-12-14 10:39:43 +02:00
public badge: add badge for Run Speed Up (#2676) 2025-12-28 12:27:53 +02:00
scripts Upgrade zod package to 4 (#2677) 2025-12-29 20:04:40 +02:00
types Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
.editorconfig Update editorconfig (#2285) 2025-05-18 12:12:53 +03:00
.env.example Refactor HACKY_resolvePicture away (#2606) 2025-11-08 13:54:02 +02:00
.env.test Refactor HACKY_resolvePicture away (#2606) 2025-11-08 13:54:02 +02:00
.gitattributes Add configs for better support of different development environments (#1092) 2022-11-05 22:45:00 +01:00
.gitignore Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
.nvmrc Try updating Node.js to latest LTS 2024-11-11 22:00:43 +02:00
AGENTS.md SQ serverside refactoring, add tests, add Knip (#2665) 2025-12-22 15:47:15 +02:00
biome.json Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
CLAUDE.md Add AGENTS.md 2025-10-04 11:42:19 +03:00
CODE_OF_CONDUCT.md Better README & getting started (#2284) 2025-05-26 17:57:41 +03:00
compose.yaml Fix can't connect to Skalop in dev inside Docker 2026-01-01 20:44:24 +02:00
CONTRIBUTING.md Better README & getting started (#2284) 2025-05-26 17:57:41 +03:00
db-test.sqlite3 Deadline per tournament match (#2657) 2025-12-10 19:42:30 +02:00
knip.json Upgrade better-sqlite3 to v12 (#2685) 2025-12-30 21:18:49 +02:00
ley-driver.cjs Upgrade better-sqlite3 to v12 (#2685) 2025-12-30 21:18:49 +02:00
ley.config.cjs Upgrade better-sqlite3 to v12 (#2685) 2025-12-30 21:18:49 +02:00
LICENSE Update LICENSE 2024-09-15 08:51:07 +03:00
package-lock.json Upgrade better-sqlite3 to v12 (#2685) 2025-12-30 21:18:49 +02:00
package.json Upgrade better-sqlite3 to v12 (#2685) 2025-12-30 21:18:49 +02:00
playwright.config.ts Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
react-router.config.ts Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
README.md Docker setup for development (#2460) 2025-07-20 16:58:21 +03:00
screenshot-1.png Update README 2024-07-02 16:58:00 +03:00
screenshot-2.png Update README 2024-07-02 16:58:00 +03:00
screenshot-3.png Update README 2024-07-02 16:58:00 +03:00
tsconfig.json Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
vite.config.ts React 19, Vite 7, Vitest 4 etc. (#2683) 2025-12-30 17:03:13 +02:00

sendou.ink - a Splatoon platform with competitive focus

What differentiates sendou.ink from some other gaming platforms (e.g. tournament hosting platforms) is its 100% focus on Splatoon. This allows for more custom tailored experience around the game and the community. The wide range of distinct features make it possible to create seamless integrations between them further enriching the user experience beyond what external integrations would allow.

Another key objective is to bridge the gap between casual and competitive players. For example, features like a gear build simulator can appeal not only to competitive players but also to those who simply want to enhance their gameplay without participating in tournaments. This allows sendou.ink to be useful for a wider audience but also provides a window to the competitive side of things for those that might be interested.

Screenshots
Selected features
  • Full tournament system
    • Automatic bracket progression
    • Single Elimination, Double Elimination, Round Robin, Swiss
    • Splatoon specific maplists (picked by the organizer or teams)
    • Counterpicking of different styles
    • Automatic seeding tool
    • Ranked tournaments allowing users to climb the leaderboard
    • View streams of tournament (both participants and the cast)
  • Seasonal ladder system
    • Join by yourself or with 1-3 of your mates, get a full group and challenge other teams
    • View streams of ongoing matches
    • Maplist generation based on given preferences
    • Private notes
  • Map planner that lets you draw on maps and insert weapons
  • Map list generation tool
  • Win badges from tournaments, management tools for TOs
  • Calendar to find out upcoming events to play in
  • Event result reporting
  • Plus Server for top players "looking for group purposes" voting and suggestion tools.
  • User pages
  • User search
  • "LFG", make a post to find people to play with
  • Scrim scheduler
  • Form teams (featuring uploading profile and banner pictures)
  • Object Damage Calculator (how much does each weapon deal vs. different objects)
  • Build Analyzer (exact stats of your builds)
  • Add and search for videos by weapon, stage, player and more
  • Auth via Discord
  • Light and dark mode
  • Localization

Running locally

Prerequisites

Optionally nvm can be convenient for managing multiple Node.js installs

Commands

First verify you have Node.js and git installed:

node --version
git --version

You should see something like:

v22.13.0
git version 2.39.5 (Apple Git-154)

(if not then go back to "Prerequisites" and install what is missing)

Then there is a sequence of commands you need to run:

git clone https://github.com/sendou-ink/sendou.ink.git # Clones repository
cd sendou.ink # Change to the project's folder
npm install # Install dependencies
npm run dev # Setup the development environment and run the project

You should then be able to access the application by visiting http://localhost:5173

Use the admin panel at http://localhost:5173/admin to log in (impersonate) as the admin user "Sendou" or as a regular user "N-ZAP" as well as re-seed the database if needed.

Docker

Optionally, if you want to develop image upload, real-time features or chat, you can use Docker to spin up the Skalop service and Minio for image hosting. You will need Docker up and running and then run the following command:

docker compose up -d

Minio admin UI to manage uploaded photos should be up and running at http://localhost:9001

Contributing

For developers reading the architecture.md file is highly recommended to get up to the speed with how the project folder structure works and getting familiar with its concepts.

Tech stack

  • Language: TypeScript
  • Frameworks: Node.js, React, Remix
  • UI Library: React Aria Components
  • Database: SQLite3 (via Kysely)
  • Styling: CSS Modules
  • Validation: Zod
  • Internationalization: i18next
  • Testing:
    • End-to-End (E2E): Playwright
    • Unit/Integration: Vitest