Competitive Splatoon Platform
Go to file
Kalle f599c408fb
Some checks are pending
E2E Tests / e2e (push) Waiting to run
Tests and checks on push / run-checks-and-tests (push) Waiting to run
Updates translation progress / update-translation-progress-issue (push) Waiting to run
Mark one more test as slow
2026-03-21 15:46:15 +02:00
.claude Fix test infrastructure and stabilize e2e tests (#2836) 2026-02-25 19:05:34 +02:00
.github E2E test fixes (#2901) 2026-03-21 13:57:53 +02:00
.vscode Fix swiss pairing algorithm (#2446) 2025-07-10 20:17:58 +03:00
app Allow resizing textarea also horizontally 2026-03-21 15:30:46 +02:00
content/articles Stronghold Article: "NA League Returns for 2026" (#2892) 2026-03-21 13:58:57 +02:00
docs Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
e2e Mark one more test as slow 2026-03-21 15:46:15 +02:00
locales Show better error when no tags matching the tag filtered by 2026-03-20 18:08:03 +02:00
migrations Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
public badge: add badge for PEÑA DRAFT (#2865) 2026-03-21 15:19:52 +02:00
scripts Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
types Add LUTI to top nav 2026-03-19 18:32:35 +02:00
.editorconfig
.env.example Handle 429 & add admin webhook support (#2775) 2026-01-25 20:17:04 +02:00
.env.test Refactor HACKY_resolvePicture away (#2606) 2025-11-08 13:54:02 +02:00
.gitattributes
.gitignore Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
.nvmrc
AGENTS.md Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +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
compose.yaml Fix can't connect to Skalop in dev inside Docker 2026-01-01 20:44:24 +02:00
CONTRIBUTING.md
db-test.sqlite3 Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
knip.ts Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +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
package-lock.json Update Biome to 2.4.8 2026-03-21 15:19:32 +02:00
package.json Update Biome to 2.4.8 2026-03-21 15:19:32 +02:00
playwright.config.ts Optimize E2E test run time (#2686) 2026-01-03 19:25:38 +02:00
react-router.config.ts User middleware try 2 (#2692) 2026-01-03 13:47:32 +02:00
README.md Docker setup for development (#2460) 2025-07-20 16:58:21 +03:00
screenshot-1.png
screenshot-2.png
screenshot-3.png
TOURNAMENT_LFG_PLAN.md Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
TOURNAMENT_LFG_SPEC.md Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
tsconfig.json Upgrade to React Router 7 (#2681) 2025-12-29 19:21:11 +02:00
vite.config.ts Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
vitest.browser.config.ts Form system refactor from react-hook-form to one schema per form across the stack (#2735) 2026-01-18 18:21:19 +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