Skip to content

Latest commit

 

History

2,044 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

みんなの集金 (EventPay)

クローズドコミュニティ向けのイベント出欠管理・集金ツール。 出欠確認から集金まで、リンク1本でまとめて管理。

Production

概要

みんなの集金 (EventPay) は、イベントの出欠確認と集金を一体化し、幹事・会計担当の運用負担を減らすことを目的としたWebアプリケーションです。 Next.js App Router を中心に、Supabase と Stripe(Connect含む)を組み合わせ、Cloudflare Workers 上にデプロイする構成です。

Image

解決した課題

従来の課題:

  • 出欠確認はLINE、集金は現金手渡し→二重管理・抜け漏れ
  • 会計担当が現金を立て替え→精神的・金銭的負担大
  • 誰が払ったか分からず、催促の手間がかかる

本システムの解決策:

  • Stripeでキャッシュレス集金
  • 出欠・決済を1つのシステムで統合管理
  • リマインダー自動送信で催促業務も自動化

想定ユースケース:

  • 大学サークル / 社会人サークル
  • PTA / 町内会
  • スポーツチーム
  • 小〜中規模クローズドコミュニティのイベント運営全般

主な機能

コミュニティ運営

  • コミュニティ作成・切り替え(現在選択中コミュニティを軸にしたワークスペース型UI)。
  • コミュニティ設定の確認・編集・削除。
  • コミュニティ公開ページ、問い合わせフォーム、特商法ページの提供。

イベント管理

  • 現在選択中コミュニティ配下でのイベント作成・管理。
  • 支払い設定(無料 / 現金のみ / オンライン決済 / 両方)。
  • 出欠回答期限・支払い期限・猶予期間などの期限管理。
  • 参加者・決済状況に応じた編集制限(変更検知)。

招待・出欠管理

  • トークンベース招待(参加者はアカウント不要でゲスト参加)。
  • 定員管理と出欠状況の可視化。

決済・集金

  • 現金集金のステータス追跡(手動管理)。
  • Stripe Checkout によるオンライン決済。
  • Stripe Connect(Express)による主催者口座への振込導線。
  • コミュニティに紐づく payout profile を基準にした受取先管理。
  • 冪等性を意識した決済リトライ設計。

通知・運用

  • 期限前の自動リマインダー。
  • メール通知(Resend)、管理者通知(Slack連携)。
  • CSVエクスポート、メンテナンスモードなどの運用機能。

技術スタック

主要技術:

  • Next.js 15(App Router / Server Actions)
  • React 19 / TypeScript 5
  • Supabase(PostgreSQL / Auth / RLS)
  • Stripe(Checkout / Connect Express)
  • Cloudflare Workers(OpenNext 経由)+ R2(インクリメンタルキャッシュ用途)

周辺:

  • Tailwind CSS / shadcn/ui
  • React Hook Form / Zod
  • Upstash Redis(レート制限)
  • QStash(非同期処理)
  • Resend(メール)
  • Jest / Playwright / ESLint / Prettier

アーキテクチャ概要

このリポジトリは、app/(UI・ルーティング)→ features/(ドメイン/ユースケース)→ core/(横断ユーティリティ)というレイヤを意識した構成です。 依存関係の逆流を防ぐため、ルールをESLint等で強制する前提の設計です。

開発用ドキュメント

設計の詳細や意思決定の背景については、以下のドキュメントを参照してください。

プロジェクト構成

event-pay/
├── app/                     # Next.js App Router ページ / ルーティング
│   ├── (app)/               # ログイン後アプリ(ダッシュボード / イベント / 設定)
│   ├── (auth)/              # 認証関連ページ
│   ├── (focus)/             # コミュニティ作成などの集中導線
│   ├── (marketing)/         # ランディング
│   ├── (public)/            # コミュニティ公開ページ / 法務ページ
│   └── api/                 # API Routes & Webhooks
├── features/                # 機能モジュール(ドメイン)
├── core/                    # 共有ユーティリティ(auth/logging/security等)
├── components/              # UIコンポーネント
├── supabase/                # migrations
└── wrangler.jsonc           # Cloudflare Workers 設定

Quick Start(ローカル起動)

前提:

  • Node.js 20+
  • pnpm 10.11.1(Corepack経由)
  • Supabase CLI(ローカルDB)
  • Stripe CLI(Webhook転送が必要な場合)

手順:

git clone https://github.com/rytkhs/event-pay.git
cd event-pay
corepack enable
pnpm install --frozen-lockfile

cp .env.example .env.local
# .env.local を編集(最低限 Supabase / Stripe / App URL)

supabase start
pnpm run db:reset
pnpm run db:migrate

pnpm run dev
# http://localhost:3000

開発コマンド

# 開発サーバー
pnpm run dev

# Lint / Format / Typecheck
pnpm run lint
pnpm run lint:fix
pnpm run typecheck
pnpm run format
pnpm run format:check
pnpm run check:all

Stripe Webhook(必要時):

pnpm run stripe:listen

デプロイ(Cloudflare Workers)

このプロジェクトは Cloudflare Workers 上に OpenNext を用いてデプロイする構成です。 本番環境は minnano-shukin.com ドメインで動作します。

前提:

  1. Cloudflare R2 バケット cache を作成
  2. wrangler でログイン
  3. 本番用の環境変数を Cloudflare 側に設定

コマンド:

# プレビューデプロイ
pnpm run preview

# 本番デプロイ
pnpm run deploy

# アセットのみアップロード
pnpm run upload

# Cloudflare型生成
pnpm run cf-typegen

環境変数

必須:

Supabase

NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=

Stripe

STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
STRIPE_CONNECT_WEBHOOK_SECRET=

App

NEXT_PUBLIC_APP_URL=http://localhost:3000

About

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages