柿木滉亮
← 開発実績一覧Webアプリ

tourney-app

バレーボール大会運営のマルチテナントSaaS。主催者はStripe決済で大会を自分で立ち上げ、そのまま当日運営まで完結。スコア入力・順位表・対戦表・スケジュールと観戦者向け公開ページを、パスベースのテナント分離で提供。

tourney-app はアマチュアのバレーボール大会運営を最初から最後まで回すためのSaaS。主催者が登録してStripeで決済すると、その日のうちに運営を始められる状態になる——チーム登録、試合スケジュール、当日のスコア入力、順位表と決勝トーナメント表。観戦者はアカウント無しで公開ページから結果を追える。

構造上の要はテナント分離だった。団体ごとに環境を立てるのではなく、パスベース(/t/<slug>)で1インスタンスが全大会を捌く設計にした。新しい大会を立ち上げるコストがゼロになる。旧URLは6ヶ月間301でテナントパスへ転送し、その後410を返す。初期に共有されたリンクが黙って壊れないようにしている。

課金はサブスクではなく1週間の利用権にした。大会は継続サービスではなくイベントで、解約を覚えておきたい人はいないからだ。作られたまま決済されなかったテナントは、7日後にVercelのcronが物理削除する。slug名前空間を人手で見張らなくても綺麗に保てる。

ランディングページはアマチュアスポーツにはあえて似合わない暗色のHUD調にし、運営画面はすべて素直な高可読テーマのままにした。管理者は騒がしい体育館で急いでスコアを打ち、観戦者はスマホで結果を見る。雰囲気は玄関に置くもので、スコアボードに持ち込むものではない。認証・課金・スコア入力の経路はPlaywrightのE2Eで押さえ、特定商取引法まわりの表記はフッターの付け足しではなく独立ページとして用意している。

技術スタック

Next.js 16React 19SupabaseStripeTypeScriptTailwind 4shadcn/uiPlaywright
tourney-app — スクリーンショット 1
tourney-app — スクリーンショット 2
tourney-app — スクリーンショット 3
tourney-app — スクリーンショット 4
tourney-app — スクリーンショット 5