青いステージライトの中、コンサートの観客の上に舞う紙吹雪:PassNow のイベントページのバナー。

ケーススタディ PassNow

イベントページから入場ゲートまで、スマホの中の一枚のチケット。

クライアント
PassNow
種類
チケッティングプラットフォーム
役割
プロダクト&フルスタック開発
年
2026

イベントチケットの販売・管理プラットフォーム。購入者向けの公開カタログとチェックアウト、主催者・プロモーター・管理者向けのパネル、そしてオフラインでも動き続けるチェックイン用スキャナー。ひとつのコードベースから Web、PWA、Android アプリとして提供します。

チケットは多くの人の手を経ます。支払う購入者、売上を確認したい主催者、手数料を得るプロモーター、入口に立つスタッフ。そのどこもが弱点になり得ますし、コピーできたり二度読み取れたりするチケットには価値がありません。

ルールはすべてサーバーに置き、チケットを秘密情報として扱う。フロントエンドはデータベースに一切触れず、誰が閲覧・販売・出金・入場許可をできるかは API が判断します。入口に電波がなくても、チケットは一度しか使えません。

実際につくったもの

  1. 01

    REST API とだけ通信する Next.js 16 のフロントエンドと、Prisma と PostgreSQL を使い、データベース URL を持つ唯一のプロセスである NestJS 11 のバックエンド。48 モデルのスキーマの上に 25 のモジュールを構成し、短命な JWT と、ローテーション・失効が可能なリフレッシュトークンを HTTP-only Cookie で扱います。

  2. 02

    Canvi 経由で PIX、クレジットカード、デビットカードに対応した 4 ステップのチェックアウト。カード番号と CVV は決済事業者へ直接送られ、PassNow が保存するのはブランドと下 4 桁だけです。チケットトークンはペッパー付き SHA-256 ハッシュと、認可された表示用の AES-256-GCM 暗号化コピーとして保存され、アカウントのないゲスト購入者はアクセスキーでチケットを開きます。

  3. 03

    同じチケットで二度入場させないチェックイン。最初の読み取りはトランザクション内の条件付き更新で行い、操作者はイベントの主催組織に属している必要があり、すべての入場が監査ログに記録されます。オフライン時は読み取りを IndexedDB にキューイングして後で同期し、衝突はコンフリクトとして記録されます。

  4. 04

    組織内ロール(オーナー、管理者、財務、マーケティング、チェックイン、サポート)、プロモーターと出金、管理画面。Google ログインは購入者のみに限定。同じアプリを更新通知付きの PWA として、また Capacitor による Android APK として配布しています。

技術

  • Next.js
  • TypeScript
  • React
  • Tailwind CSS
  • NestJS
  • Prisma
  • PostgreSQL
  • Zod
  • Capacitor
  • Docker

バージョン 1.0.0 は 2026 年 6 月にリリースされ、PWA と署名済みの Android APK を提供しています。スクリーンショットは、デモ用シードデータで動かしたローカルビルドのものです。

次のプロジェクトPC Control CenterPersonal project · デスクトップアプリとリモートエージェント