Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
詳細なドキュメントは docs/ フォルダにあります。 ❌ 新規ページ作成時のチェックリスト • Guidelines.mdの店舗識別色を適用 • 公演カテゴリ色を正しく使用 • ShadCN UIコンポーネントを優先使用 • container mx-auto px-4 + space-y-6の統一レイアウト • 警告表示はborder-2でアウトライン(背景色なし) • タイポグラフィはglobals.cssに依存、Tailwindクラス禁止 📅 スケジュール管理(リストカレンダー特殊仕様) • 月間Table形式: 従来のグリッド型カレンダーではなく、独特なTable構造のリスト表示 • 複雑なデータ構造: scheduleEvents[monthKey: DaySchedule[]]による階層管理 • 6店舗×時間帯対応: 朝・昼・夜の3時間帯に加え、自由時間設定可能 • 状態管理: localStorage + Supabase双方向同期 • 色システム: 店舗識別色(背景)+ 公演カテゴリ色(バッジ)の複合表示 • 公演中止・復活機能: isCancelledフラグ + opacity-50 + Ban icon表示 • 予約連携: モックデータによる予約人数表示(将来的にStores予約API連携)README 전문 보기 ↗
6店舗対応のマーダーミステリー店舗管理システム
詳細なドキュメントは docs/ フォルダにあります。
| ドキュメント | 説明 |
|---|---|
| docs/index.md | ドキュメント目次(ここから始める) |
| docs/system-overview.md | システム全体像・技術スタック |
| docs/features.md | 各機能の概要 |
| docs/pages.md | 全ページ一覧・ルーティング |
| docs/development/ | 開発ルール・コーディング規約 |
| docs/setup/ | 各種セットアップガイド |
| docs/features/ | 機能別詳細ドキュメント |
text-*, font-*, leading-*クラス使用絶対禁止container mx-auto px-4 + space-y-6の統一レイアウトborder-2でアウトライン(背景色なし)scheduleEvents[monthKey: DaySchedule[]]による階層管理isCancelledフラグ + opacity-50 + Ban icon表示npm install
.env.local ファイルを作成:
VITE_SUPABASE_URL=https://lgyhbagdfdyycerijtmk.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
# 互換用(Legacy API Keysが有効な場合のみ)
# VITE_SUPABASE_ANON_KEY=eyJ...
# スキーマの確認
npm run db:check
# データベースの差分確認
npm run db:diff
# データベースリセット(必要に応じて)
npm run db:reset
npm run dev
database/create_tables.sqldatabase/README.mdnpm run db:checkgm_fee → gm_assignmentsへの移行INTEGER → JSONBへの変更CHECK制約の追加database/README.mdを更新npm run build
# dist フォルダをNetlifyにデプロイ
npm run build
# Vercel CLIまたはGitHub連携でデプロイ
| 店舗名 | 短縮名 | カラー | 収容人数 | Guidelines.md色指定 |
|---|---|---|---|---|
| 高田馬場店 | 馬場 | 🔵 青 | 8名 | bg-blue-50 border-blue-200 |
| 別館① | 別館① | 🟢 緑 | 6名 | bg-green-50 border-green-200 |
| 別館② | 別館② | 🟣 紫 | 6名 | bg-purple-50 border-purple-200 |
| 大久保店 | 大久保 | 🟠 橙 | 7名 | bg-orange-50 border-orange-200 |
| 大塚店 | 大塚 | 🔴 赤 | 6名 | bg-red-50 border-red-200 |
| 埼玉大宮店 | 埼玉大宮 | 🟤 茶 | 8名 | bg-amber-50 border-amber-200 |
ログインページ(共通)
role=admin/staff/customerでルーティング自動切替管理者ダッシュボード(Admin専用)
店舗管理ページ
シナリオ管理ページ
スタッフ管理ページ
リストカレンダー(ScheduleManager)
スケジュール詳細/編集
予約一覧(管理用)
顧客管理ページ
顧客トップページ
公演一覧ページ(顧客用)
予約フォームページ
マイページ(顧客用)
売上管理ページ
在庫管理ページ
通知・リマインダーシステム
schedule_events 正規化(必須対応)-- 段階的移行推奨
-- フェーズ1: 既存システム維持
-- フェーズ2: 新カラム追加
ALTER TABLE schedule_events
ADD COLUMN scenario_id UUID REFERENCES scenarios(id) ON DELETE RESTRICT,
ADD COLUMN store_id UUID REFERENCES stores(id) ON DELETE RESTRICT,
ADD COLUMN start_at TIMESTAMPTZ NOT NULL,
ADD COLUMN end_at TIMESTAMPTZ NOT NULL,
ADD COLUMN published BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN capacity INTEGER,
ADD COLUMN status TEXT NOT NULL DEFAULT 'scheduled';
-- フェーズ3: データ移行スクリプト実行
-- フェーズ4: 旧カラム削除
-- Role ENUM化(タイプミス防止)
CREATE TYPE app_role AS ENUM ('admin','staff','customer');
ALTER TABLE users
ALTER COLUMN role TYPE app_role USING role::app_role,
ALTER COLUMN role SET NOT NULL;
-- RLS基本設定
ALTER TABLE customers ENABLE ROW LEVEL SECURITY;
CREATE POLICY customers_select_self ON customers FOR SELECT
USING (auth.uid() = user_id);
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | PK |
| name | TEXT | 氏名 |
| line_name | TEXT | LINE名 |
| x_account | TEXT | X(旧Twitter)アカウント |
| role | TEXT[] | 役割(複数可) |
| stores | TEXT[] | 担当店舗 |
| ng_days | TEXT[] | 出勤不可日 |
| want_to_learn | TEXT[] | 学びたい内容 |
| available_scenarios | TEXT[] | 担当可能シナリオ(表示用) |
| notes | TEXT | メモ |
| phone | TEXT | 電話番号 |
| TEXT | メールアドレス | |
| availability | TEXT[] | 出勤可能日 |
| experience | INTEGER | 経験年数 |
| special_scenarios | TEXT[] | 得意シナリオ |
| status | TEXT | 'active' / 'inactive' / 'on-leave' |
| created_at | TIMESTAMPTZ | 作成日時 |
| updated_at | TIMESTAMPTZ | 更新日時 |
| カラム名 | 型 | 説明 |
|---|---|---|
| staff_id | UUID | staff.id(FK) |
| scenario_id | UUID | scenarios.id(FK) |
| assigned_at | TIMESTAMPTZ | 担当開始日時 |
| notes | TEXT | 備考 |
| PRIMARY KEY | (staff_id, scenario_id) | 複合主キー |
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | PK |
| title | TEXT | シナリオ名 |
| description | TEXT | 説明 |
| author | TEXT | 作者 |
| license_amount | INTEGER | ライセンス料 |
| duration | INTEGER | 所要時間(分) |
| player_count_min | INTEGER | 最小プレイヤー数 |
| player_count_max | INTEGER | 最大プレイヤー数 |
| difficulty | INTEGER | 難易度(1-5) |
| available_gms | TEXT[] | 担当可能GM |
| rating | DECIMAL(2,1) | 評価 |
| play_count | INTEGER | 累計公演回数 |
| status | TEXT | 'available' / 'maintenance' / 'retired' |
| required_props | TEXT[] | 必要小道具 |
| props | JSONB | 小道具詳細({ name, cost, costType }) |
| genre | TEXT[] | ジャンル |
| production_cost | INTEGER | 制作費合計 |
| production_cost_items | JSONB | 制作費内訳リスト |
| gm_fee | INTEGER | GM代金(標準値) |
| participation_fee | INTEGER | 参加費(標準値) |
| notes | TEXT | メモ |
| has_pre_reading | BOOLEAN | 事前読解有無 |
| release_date | DATE | 公開日 |
| created_at | TIMESTAMPTZ | 作成日時 |
| updated_at | TIMESTAMPTZ | 更新日時 |
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | PK |
| date | DATE | 公演日 |
| venue | TEXT | 会場 |
| scenario | TEXT | シナリオ名 |
| gms | TEXT[] | 担当GM |
| start_time | TIME | 開始時刻 |
| end_time | TIME | 終了時刻 |
| category | TEXT | 公演種別(オープン/貸切/テスト等) |
| reservation_info | TEXT | 予約情報 |
| notes | TEXT | メモ |
| is_cancelled | BOOLEAN | キャンセルフラグ |
| created_at | TIMESTAMPTZ | 作成日時 |
| updated_at | TIMESTAMPTZ | 更新日時 |
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | PK |
| reservation_number | TEXT | 予約番号(ユニーク) |
| reservation_page_id | TEXT | 予約ページID |
| title | TEXT | 予約タイトル |
| scenario_id | UUID | FK: シナリオ |
| store_id | UUID | FK: 店舗 |
| customer_id | UUID | FK: 顧客 |
| requested_datetime | TIMESTAMPTZ | 希望日時 |
| actual_datetime | TIMESTAMPTZ | 実際の来店日時 |
| duration | INTEGER | 予約時間(分) |
| participant_count | INTEGER | 参加人数 |
| participant_names | TEXT[] | 参加者名リスト |
| assigned_staff | TEXT[] | 担当スタッフID配列 |
| gm_staff | TEXT | メインGMスタッフID |
| base_price | INTEGER | 基本料金 |
| options_price | INTEGER | オプション料金 |
| total_price | INTEGER | 合計金額 |
| discount_amount | INTEGER | 割引額 |
| final_price | INTEGER | 最終支払額 |
| payment_status | TEXT | 支払状況 |
| payment_method | TEXT | 支払方法 |
| payment_datetime | TIMESTAMPTZ | 支払日時 |
| status | TEXT | 予約ステータス |
| customer_notes | TEXT | 顧客メモ |
| staff_notes | TEXT | スタッフメモ |
| special_requests | TEXT | 特別な要望 |
| cancellation_reason | TEXT | キャンセル理由 |
| cancelled_at | TIMESTAMPTZ | キャンセル日時 |
| external_reservation_id | TEXT | 外部システムID |
| reservation_source | TEXT | 予約経路 |
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | PK |
| name | TEXT | 店舗名 |
| short_name | TEXT | 略称 |
| address | TEXT | 住所 |
| phone_number | TEXT | 電話番号 |
| TEXT | メールアドレス | |
| opening_date | DATE | 開店日 |
| manager_name | TEXT | 店長名 |
| status | TEXT | 'active' / 'temporarily_closed' / 'closed' |
| capacity | INTEGER | 定員 |
| rooms | INTEGER | 部屋数 |
| notes | TEXT | メモ |
| color | TEXT | カラーコード |
| created_at | TIMESTAMPTZ | 作成日時 |
| updated_at | TIMESTAMPTZ | 更新日時 |
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | PK |
| scenario_id | UUID | FK: シナリオ |
| scenario_title | TEXT | シナリオ名 |
| kit_number | INTEGER | キット番号 |
| condition | TEXT | 状態(excellent/good/fair/poor/damaged) |
| last_used | DATE | 最終使用日 |
| notes | TEXT | メモ |
| store_id | UUID | FK: 店舗 |
| created_at | TIMESTAMPTZ | 作成日時 |
| updated_at | TIMESTAMPTZ | 更新日時 |
// ✅ 正しい実装例
<Card className="bg-blue-50 border-blue-200"> {/* 店舗識別色 */}
<CardHeader>
<CardTitle>高田馬場店の公演</CardTitle> {/* globals.cssタイポグラフィ */}
</CardHeader>
<CardContent className="space-y-4">
<Badge className="bg-purple-100 text-purple-800">貸切公演</Badge> {/* カテゴリ色 */}
<p>公演の詳細説明...</p> {/* globals.css自動適用 */}
</CardContent>
</Card>
// ❌ 避けるべき実装
<div className="bg-gradient-to-r from-purple-500 to-pink-500 text-2xl font-bold">
{/* 派手な装飾・Tailwindフォントクラス使用 */}
</div>
/* 店舗識別色の正しい使用 */
.takadanobaba-theme {
background: theme(colors.blue.50);
border-color: theme(colors.blue.200);
color: theme(colors.blue.800);
}
/* 公演カテゴリの正しい使用 */
.open-performance-badge {
background: theme(colors.blue.100);
color: theme(colors.blue.800);
}
// 統一レイアウトパターン
<main className="container mx-auto px-4 py-6">
<div className="space-y-6">
<section className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
{/* コンテンツ */}
</section>
</div>
</main>
text-*, font-*, leading-*の使用厳禁このシステムは Resend API + 独自ドメイン(mmq.game) を使用してメール送信を行っています。
| メール種類 | トリガー | 送信方法 | 送信元 | ステータス |
|---|---|---|---|---|
| 予約確認メール | 予約完了時 | Edge Function → Resend API | [email protected] | ✅ 実装済み |
| リマインダーメール | スケジュール設定 | Edge Function → Resend API | [email protected] | ✅ 実装済み |
| スタッフ招待メール | スタッフ招待時 | Edge Function → Resend API | [email protected] | ✅ 実装済み |
| パスワードリセット | リセット要求時 | Supabase Auth → Resend SMTP | [email protected] | ✅ 実装済み |
| サインアップ確認 | アカウント作成時 | Supabase Auth → Resend SMTP | [email protected] | ✅ 実装済み |
| キャンセル確認 | 予約キャンセル時 | - | - | ❌ 未実装 |
| 貸切確定通知 | 貸切承認時 | - | - | ❌ 未実装 |
| 貸切却下通知 | 貸切却下時 | - | - | ❌ 未実装 |
メール機能の特徴:
mmq.game を使用(SPF/DKIM/DMARC認証済み)パスワードリセットメールを有効にするには、Supabase Auth SMTP設定が必要です:
1. Supabase Dashboard にアクセス:
https://supabase.com/dashboard/project/cznpcewciwywcqcxktba/settings/auth
2. SMTP Settings セクションで以下を設定:
- Enable Custom SMTP: ON
- Host: smtp.resend.com
- Port: 587
- Username: resend
- Password: [RESEND_API_KEY]
- Sender: [email protected]
3. Save をクリック
詳細: RESEND_QUICK_SETUP.md を参照
完全なセットアップ手順(ドメイン認証、Edge Functions デプロイなど):
# 1. Resend APIキーをSupabase Secretsに設定
supabase secrets set RESEND_API_KEY=re_your_api_key
# 2. すべてのEdge Functionsをデプロイ
./deploy-functions.sh
# または個別にデプロイ
./deploy-single-function.sh send-booking-confirmation
./deploy-single-function.sh send-reminder-emails
./deploy-single-function.sh invite-staff
詳細: EMAIL_SETUP.md を参照
詳細: EMAIL_USAGE_SCENARIOS.md - 全メール使用シーンと実装状況
📚 全ドキュメントの目次は docs/INDEX.md を参照
Queens Waltz マーダーミステリー店舗管理システム
© 2024 Queens Waltz. All rights reserved.
docs/INDEX.md → docs/development/Guidelines.mdの完全理解npm run devでの動作確認🎮 Queens Waltz マーダーミステリー店舗運営を支援する企業級管理システム
このシステムは単なる管理ツールを超え、マーダーミステリー業界の店舗運営を革新する包括的プラットフォームです。美しいデザイン、堅牢なアーキテクチャ、そしてスタッフ・顧客双方の体験向上を実現します。
| created_at | TIMESTAMPTZ | 作成日時 |
| updated_at | TIMESTAMPTZ | 更新日時 |