Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
SalonOne — One Platform. One Management. サロン向けの 契約(申込書)・電子契約・請求書 作成・送付・管理 + Salon One の開発依頼・エラー進捗報告・進捗管理 アプリケーション。 Vercel + Supabase で動くフルスタック構成。申込と電子契約を1本のURLで完結させ、受注管理で請求開始・口座振替(NSS 日本システム収納)・導入までの抜け漏れを防ぎます。入金確認機能も備えます(Stripe も任意で接続可)。担当者の日次オペレーションと、経営者の売上・入金俯瞰の両方に最適化した UI(ディープ・ティール × ゴールドのブランドカラー)です。 すぐ試せます。 Supabase を設定しなくても、npm install && npm run dev で デモモードが起動します(デモでもログインが必要です/ゲストアクセスなし)。 業務データは空の状態から始まります(自社情報・料金プラン・契約書テンプレートのみ初期投入。デモモードのデータはインメモリのため再起動でリセットされます)。README 전문 보기 ↗
サロン向けの 契約(申込書)・電子契約・請求書 作成・PDF出力・管理 + Salon One の開発依頼・エラー進捗報告・進捗管理 アプリケーション。 Vercel + Supabase で動くフルスタック構成。申込と電子契約を1本のURLで完結させ、受注管理で請求開始・口座振替(NSS 日本システム収納)・導入までの抜け漏れを防ぎます。入金確認機能も備えます。担当者の日次オペレーションと、経営者の売上・入金俯瞰の両方に最適化した UI(ディープ・ティール × ゴールドのブランドカラー)です。
すぐ試せます。 Supabase を設定しなくても、
npm install && npm run devで デモモードが起動します(デモでもログインが必要です/ゲストアクセスなし)。 業務データは空の状態から始まります(自社情報・料金プラン・契約書テンプレートのみ初期投入。デモモードのデータはインメモリのため再起動でリセットされます)。
| 領域 | 内容 |
|---|---|
| 進捗ホーム | アプリを開いて最初に出る画面。「いま急ぐこと」(期限超過の請求・未消込の入金・下書きの請求書・急ぎの開発依頼・自分への追加ヒアリング・自分の承諾待ち)を役割に応じて1枚にまとめ、続けて売上の進捗(今月の請求/入金/未収金/MRR・回収率バー・直近6ヶ月の推移)と開発の進捗(未完了の内訳・今月の完了/起票・長期滞留・急ぎの依頼 上位3件)を並べます。スマホ1画面ぶんのスクロールで全体を把握できます。 |
| ダッシュボード | ロール対応(経営者=売上・入金・MRR の俯瞰/担当者=要対応タスク)。月タブで対象月を切替(請求額・入金額・入金内訳・推移が連動)、売上・入金推移グラフ、最近の動き。 |
| 申込・契約URL | お客様に渡す1本のURLで「申込内容の入力 → 料金の確認 → 契約書の確認 → 電子署名」まで完了します(ログイン不要・約5分)。発行時にプラン・オプション・店舗数・個別価格(初期費用/月額)・代理店を指定でき、料金の見込みと契約書が自動で作られます。送信と同時に顧客・締結済み契約書(証跡つき)が作られ、受注管理に「受注確認」として並びます。「URLをコピー」「案内文ごとコピー」「QRコード」で渡せます。料金が決まっていない場合だけ「申込のみ」URL(契約書は後から送付)も使えます。HPB / minimo / EPARK の連携情報は AES-256-GCM で暗号化して保存し、画面ではマスク表示(連携作業時に「表示する」で復号)。 |
| 紹介・問い合わせ | お客様からのご紹介と、代理店URLの「まずは相談したい」から届いた問い合わせを1つの一覧で受け付けます。常設の紹介フォームURL(/refer)・紹介者ごとのURL、連絡希望日時・連絡方法つき。連絡希望日を過ぎた案件は赤く表示。連絡後は各行の**「申込・契約URLを発行」で送ると、紹介者・代理店の紐付けと特典がそのまま契約・請求まで引き継がれます。特典は請求に自動反映: 紹介された側は初月の端数日数(日割り)+2ヶ月無料**、紹介した側へは初期費用の25%(受注確定時に金額が確定)。 |
| 契約書 / 電子契約 | 契約書テンプレート管理(標準の利用契約書・全23条を同梱)、電子署名(申込・契約URLでの署名のほか、条文を変える契約は個別に作成して署名依頼メール または リンク+QRコード + アクセスコード)、締結証跡(監査ログ)、締結証明書のPDF出力。締結後は受注管理の**「受注を確定する」**で定期契約+**初期費用・初月日割りの請求書(銀行振込)**を作成し、以降の月額は口座振替(NSS)へ自動切替。紙で締結した場合の手動登録にも対応。 |
| 請求書 | 作成(明細・税率別集計・インボイス対応)、下書き/送付、ステータス管理(下書き・送付済・入金待ち・一部入金・入金済・期限超過・引落失敗・取消)、発行後の支払方法の切替(口座引き落とし ⇔ お振込み) — 書面の案内文(引き落とし予定 / 【お振込先】)も自動で切り替わります、PDFで保存(ファイル名は「請求書_番号_お客様名」) — 請求書はメールでは送らず、PDFをお客様へお渡しします、未収金エイジング(期限超過日数別の残高)、CSVエクスポート(請求書・入金)。 |
| 受注管理 | 案件(お客様1件)を 申込・契約 → 受注確認 → 導入準備 → 運用中 で管理します(旧「顧客ステータス」で手で進めていた過去のお客様の記録も引き継ぎ、契約書が無いお客様は「請求を開始」で初回請求書・毎月の請求を設定)。ステージは実データ(締結・請求・入金・NSS登録・導入チェック)から自動で進むため、カードを動かす作業はありません。いちばん上に**「対応待ち」を担当別にまとめて表示**(受注確認待ち・初回請求書の送付・入金確認・口座振替依頼書の郵送/回収/NSS登録・初期設定・納品)。案件ページには**「次にやること」とボタン**、3つの手続き(初回請求・入金/口座振替(NSS)/初期設定・導入)の進み具合、遅れ(入金期限・依頼書の回収14日超など)を表示します。 |
| LTV分析 | 顧客ごとの毎月の支払い額と累計LTV(生涯価値)をグラフで可視化(顧客詳細に月別バー+累計ライン)。LTV分析ページでは全顧客のランキング(月額・平均月額・直近12ヶ月・継続月数・スパークライン)を俯瞰。 |
| 定期請求(サブスク) | 月額プラン定義・加入管理、毎月の請求書を自動生成(Vercel Cron 対応。メールでは送りません)、MRR 集計。 |
| NSS引き落とし | NSS(日本システム収納)での口座振替の月次作業。その月に引き落とせる請求と、NSS登録が終わっておらず引き落とせない請求を自動で振り分け(引き落とせない請求はワンクリックで振込に切替)、確認期間(請求書の発行から7日)の表示、NSS 登録用の一覧(CSV・確認用)、「NSSへ登録した」の記録、実際の振替結果の反映(済/不可+理由。不可は「引落失敗」として要フォロー)。口座情報はこのツールでは持ちません。 |
| 入金確認 | 手動入金記録・消し込み、銀行明細 CSV の取込と自動照合(金額・名義)、初期費用など単発入金の確認。 |
| 顧客 / 会員 | 顧客管理(メモ=特別待遇の理由等を一覧・詳細に表示)、口座振替(NSS)の手続き状況(依頼書の郵送・回収・NSS登録・振替開始月)、契約・請求・入金履歴、獲得代理店・代理店区分の紐付け。 |
| 代理店 | 代理店・営業マンの管理。区分は2つ: 取次型=初期費用の50%/営業・初期設定型=初期費用の100%(伴走型は今後追加予定)。代理店用の申込・契約URL(「まずは相談したい」「このまま申し込む」を選べる常設URL・QR・案内文)を発行して代理店に渡せます。受注確定で報酬(初期費用×区分の率)を自動計上し、お客様の初期費用の入金を確認した月の支払明細に入ります。月次明細のメール送付・印刷/PDF、営業マン別集計、支払済みの記録。 |
| 個別料金・店舗数 | 定期契約ごとの基本料金の個別価格(特別待遇・紹介割引)と契約店舗数。毎月の請求書に「単価 × 店舗数」で載り、MRR にも自動反映。顧客別料金ページで、どのお客様に毎月いくら請求しているか(プラン・基本料金・オプション・店舗数・月額(税抜/税込)・定価との差・初期費用)を1つの表で確認でき、定価と違う金額のお客様は色付きで表示。「個別価格のお客様」での絞り込み・同じ月額のお客様の件数(料金パターン)・検索・並び替えに対応。 |
| 開発進捗(開発依頼・エラー報告) | スプレッドシート運用を置き換える依頼管理。記載日・依頼者はアカウントから自動記録、分類(不具合/要望)・優先度(高/中/低)・ステータス(未対応/対応中/追加ヒアリング/対応完了)、エンジニアの完了日・開発対応内容。不具合を最優先に緊急度順で表示し完了は既定で非表示、要望は承認者(管理者)全員の承諾で「実行」(未承諾者を名指しでアラート)。日付での期限管理は行わず、順番はドラッグで入れ替えて決めます。スクリーンショット添付(Ctrl+V貼り付け対応)と画像への書き込み(ペン/矢印/枠/テキスト)、理想UIを伝えるAI画像モック生成にも対応。追加ヒアリングには依頼者が返信を追記でき、エンジニアへ通知+一覧にバッジ表示されます。急ぎの依頼は /d/12 のような短縮URLで、端末の共有シート(LINE・メール等)へワンタップで渡せます(複数まとめて1通で共有/QRコードも可)。 |
| 開発スケジュール(中長期ロードマップ) | スプレッドシートの「カテゴリ / 機能 / 優先度 / 月」の表をそのままシステム化。横軸に月を並べた表で中長期の予定を俯瞰しつつ、今週進める分をいちばん上に出します(週が変わると自動で切り替わり)。1つの機能に開発進捗の不具合・要望を一覧から選んで複数まとめて連動でき、依頼のステータスは常に最新が反映されます(依頼一覧は畳んであり、件数だけを表示)。行はドラッグで並べ替え、カテゴリの色分け・当月列の強調・左2列の固定で見やすくしています。今週分はワンクリックでコピーして開発MTGにそのまま貼れます。閲覧できるメンバーは設定画面のチェックボックスで指定(既定は非表示・管理者は常に閲覧可)。 |
| アプリ内通知 | 対応完了・新規依頼・追加ヒアリング・ヒアリング返信・実行判定をヘッダーのベルへ配信。対応完了は未読のあいだトップ(ダッシュボード/開発進捗)にバナー表示。 |
| 自社情報(発行元) | 設定画面から事業者名・住所・電話番号・インボイス登録番号(適格請求書発行事業者の登録番号)・振込先(銀行名・支店名・支店番号・預金種別・口座番号・口座名義)・請求書番号の接頭辞・既定税率を編集(管理者のみ)。請求書(画面・印刷)/請求書メール・督促メール/代理店明細の発行元欄にそのまま記載されます。 |
| アカウント管理 | 管理者が設定画面からアカウント作成・役割の複数割当(管理者/エンジニア/請求管理者/開発・修正管理者)。兼務と重複アカウントのチェック付き。 |
| 削除・復元(ゴミ箱) | 請求書・顧客・入金・定期契約・銀行明細・NSS引き落としの一覧をデータを消さずに非表示にでき、ゴミ箱からいつでも復元。誰が・いつ・なぜ消したかの操作ログを追記専用で保持(テスト投入データの片付け用)。 |
| ヘルプ | 申込・契約 → 受注確認 → 導入準備 → 運用中、毎月の請求・NSS引き落とし、代理店・紹介制度の標準業務フロー(担当と画面の対応表、よくある抜け漏れと防ぎ方、旧運用からの置き換え表つき)。 |
お支払いは 銀行振込 と 口座振替(NSS 日本システム収納) の2つだけです。
npm install
npm run dev
# http://localhost:3000 を開く(サンプルデータで全機能が動作)
デモモードは Supabase 未設定時に自動で有効化され、インメモリのデータで動作します(データはプロセス内のみ・再起動でリセット)。
ゲスト(未ログイン)でのアクセスはできません。 デモモードでもログイン画面でデモアカウント(管理者/エンジニア/請求管理者+開発・修正管理者の兼務/開発・修正管理者)を選んでログインします。ログイン後は右上の「デモ」セレクトでアカウントを切り替えられます。
supabase/migrations/*.sql を順に実行(SQL Editor もしくは Supabase CLI)。
# Supabase CLI の例
supabase link --project-ref <your-ref>
supabase db push # migrations を適用
# 初期データ(自社情報・料金プランのみ。テストデータは含まない)
psql "$SUPABASE_DB_URL" -f supabase/seed.sql
# 既存DBのテストデータを空にする場合(取り消し不可・実行前に要確認)
psql "$SUPABASE_DB_URL" -f supabase/cleanup_test_data.sql
.env.example を .env.local にコピーし、値を設定。
cp .env.example .env.local
最低限:
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=... # cron/webhook 用(サーバー専用)
APP_ENCRYPTION_KEY=... # 申込で預かる ID・パスワードの暗号化鍵(`openssl rand -base64 32`)
npm run dev(または npm run build && npm start)。環境変数の全項目は .env.example を参照してください。
メニュー「申込・契約URL」(/applications)・「受注管理」・各代理店の画面・「紹介・問い合わせ」の各行から、お客様にお渡しする申込・契約URLを発行できます。お客様はログイン不要で、申込内容の入力から契約内容の確認・電子署名までを1本のURLで完了します(以前の「申込を受けてから契約書を別に作って送る」二度手間と送り忘れをなくしました)。
| 種類 | 使う場面 |
|---|---|
| 申込+契約(標準) | お客様ごとに渡すURL。プラン・オプションの初期選択・店舗数(指定 or お客様が入力)・個別価格を決めて発行します。 |
| 代理店URL | 代理店がお客様に渡す常設のURL。「まずは相談したい」(→ 紹介・問い合わせへ)と「このまま申し込む」(→ 申込+電子署名)を選べます。何件でも受け付け、代理店・営業担当・区分が自動で記録されます。 |
| 紹介から | 紹介・問い合わせに連絡したあとに送るURL。紹介者・代理店の紐付けと特典を引き継ぎ、お名前・連絡先も入った状態で開きます。 |
| 申込のみ | 料金がまだ決まっていない場合だけ。届いた申込は受注管理の対応待ちに出るので、「顧客として登録」→ 契約書を作成して送ります。すぐに請求する場合は、届いた申込の「顧客登録して請求書を作成」で、申込内容のまま顧客を登録して請求書(区分「初期費用」・銀行振込)を作れます。 |
/apply/<token> で ①お客様情報(法人名・登記住所・代表者・ご担当者・電話・メール)②プラン・料金(オプション・店舗数を選ぶと初期費用・月額(税込)と支払いの流れを表示)③連携情報(任意。HPB / minimo / EPARK の ID・PASS、LINE連携の希望)④契約書の確認と電子署名(氏名の入力+同意)。送信時にテンプレートが更新されていた場合は送信を止め、最新の契約内容で確認し直していただきます(確認した内容と署名した内容が食い違わないようにするため)。
お客様の外部サービスの ID・パスワードは、平文で保存しません。
src/lib/crypto/secrets.ts で AES-256-GCM(v1:iv:tag:data 形式)により暗号化して保存します。鍵は環境変数 APP_ENCRYPTION_KEY(未設定時は SUPABASE_SERVICE_ROLE_KEY)から導出し、DB には保存しません。lu•••••• のようにマスクされ、平文はページの HTML にも含まれません。連携作業を行う担当者が「表示する」を押したときだけサーバー側で復号して返します。申込フォームは認証ゲートの対象外(公開ルート)で、アクセス制御は暗号乱数トークン(48桁)+受付停止+有効期限で行います。フォームからの読み書きはサーバー側のサービスロール経由のみで、トークンを知っていても DB を直接読むことはできません。 申込の閲覧・URL 発行は請求管理の権限(管理者・請求管理者)が必要です。
既存のお客様からのご紹介を受け付け、特典を請求まで自動でつなげる仕組みです(メニュー「紹介・問い合わせ」//referrals)。代理店URLの「まずは相談したい」から届いた問い合わせも同じ一覧に「代理店経由」として並びます。
| 対象 | 特典 |
|---|---|
| 紹介した側 | ご紹介いただいた方の**初期費用の25%**をお支払い |
| 紹介された側 | 初月の端数日数(日割り分)+2ヶ月無料 |
率と月数は src/lib/domain/constants.ts の REFERRAL_REWARD_RATE / REFERRAL_FREE_MONTHS で変更できます。
https://<サイト>/refer — ログイン不要で誰でも開けます。このURLをそのまま配れます(紹介・問い合わせの画面からコピーできます)。https://<サイト>/refer/<トークン> — 紹介・問い合わせの画面から「紹介者を指定したURLを発行」で作ります。開くと「どなたのご紹介ですか?」がその方の名前で固定表示され、入力ミスなく紹介元をたどれます。受付停止・有効期限は申込URLと同じ扱いです。referredByCustomerId)・代理店・特典が自動で引き継がれます(URLを使わずに「顧客として登録」することもできます)。月額利用料 初月日割り(9月3日〜月末・28日分)※ご紹介特典により無料 のように、何が無料になったか分かる明細として残します)。ご紹介特典により初月日割り 28,000円を無料 / ご紹介者へのお支払い 50,000円(初期費用の25%)を計上 / 2026/09/03 〜 2026/11/30 は無料 のように残ります。通常の契約は申込・契約URLでお客様が申込と同時に署名します。条文を変える契約や、アクセスコードで本人確認を強めたい場合は、「契約書」メニューから 作成 → 編集 → 電子署名依頼 → 締結 → 受注確定 までを個別に行えます。
本機能は 事業者署名型(立会人型)電子署名 の考え方に基づき、以下を実装しています。
contracts_freeze_content)でサービスロールを含む全経路で拒否。注意(法務向け): 本実装はいわゆる認定タイムスタンプ(TSA)や当事者型電子証明書は使用しません。多くの SaaS 利用契約はこの方式(立会人型)で実務上広く運用されていますが、 訴訟リスクの高い高額契約等では、締結証明書PDFの長期保管、アクセスコードの別経路伝達の徹底、必要に応じた外部電子契約サービスの併用をご検討ください。 運用ルール(誰が送付できるか、コードの伝達方法等)を社内規程として定めることを推奨します。
書面で締結した場合は「書面締結を登録」から締結記録(署名者・締結日・原本保管場所)を登録でき、電子・紙どちらの締結経路でも契約管理を一元化できます。
メニュー「受注管理」(/orders)。申込から運用開始までを、案件(お客様1件)ごとに抜け漏れなく進めるための画面です。
| ステージ | 状態 | 主な担当 |
|---|---|---|
| 申込・契約 | URLを渡し、お客様の申込・電子署名を待っている | お客様(営業・代理店がフォロー) |
| 受注確認 | 締結済み。内容を確認して「受注を確定する」を押す | 請求管理者 |
| 導入準備 | 初回請求・入金/口座振替(NSS)/初期設定・導入 の3つを並行で進める | 請求管理者・導入担当(代理店) |
| 運用中 | すべて完了。毎月の請求・NSS引き落としへ | — |
/pipeline)を開くと受注管理へ移動します。メニュー「代理店」(/agencies)。
| 区分 | 代理店が担当する範囲 | 報酬 |
|---|---|---|
| 取次型 | お客様のご紹介(取次)まで。商談・お申込み手続き・初期設定は当社 | 初期費用(税抜)の50% |
| 営業・初期設定型 | 営業(商談〜お申込み手続き)と初期設定まで | 初期費用(税抜)の100% |
伴走型(導入後の運用支援まで担当)は今後追加予定です。率は src/lib/domain/constants.ts の AGENCY_DEAL_TYPES で管理しています。
口座振替は NSS のみを利用する前提で、このツールの口座振替機能を整理しました。口座情報(銀行・口座番号・名義)はこのツールに保存しません(旧運用で保存していたものは顧客・案件ページの「口座情報を消去」で削除できます)。
| 項目 | NSS で行うこと | このツールで行うこと |
|---|---|---|
| 口座情報 | 登録・保管 | 持たない |
| 登録の進み具合 | — | 依頼書の郵送 → 回収 → NSSへ登録 → 登録完了・振替開始月 を記録し、遅れを知らせる |
| 毎月の金額 | 収納リンクへ確定金額を登録 | 引き落とせる/引き落とせない請求の振り分け、登録用の一覧(CSV・確認用) |
| 引き落とし | 実行(毎月27日予定) | — |
| 結果 | 振替結果を提供 | 請求へ反映(済=入金済/不可=引落失敗・要フォロー) |
毎月の流れ(メニュー「NSS引き落とし」//direct-debit):
以前の「登録状態だけで成功/失敗を自動判定する処理」と「汎用の収納代行向けCSV」は廃止しました。結果は必ず NSS の実際の振替結果を反映します。
/api/cron/generate-invoices が、次回請求日(next_billing_date = 引き落とし日・支払期限)がその月のうちに来る稼働中の定期契約について、月初(発行日=1日)に請求書を生成します(billing_period 単位で二重生成を防止)。引き落とし日(27日)の前に、お客様の確認期間(約7日)と NSS への金額登録の時間を確保するためです。請求書はメールでは送りません(お客様に渡す場合は請求書の画面の「PDFを保存」を使います)。
vercel.json に日次スケジュールを定義済み。Vercel が Authorization を自動付与します。curl -H "Authorization: Bearer $CRON_SECRET" https://<your-app>/api/cron/generate-invoices
契約書の署名依頼・締結完了通知、申込の受付通知、代理店の支払明細はすべて同じメール設定を使います。請求書・督促はメールでは送りません(請求書は PDF で保存してお渡しします)。
MAIL_HOST / MAIL_PORT / MAIL_ENCRYPTION / MAIL_FROM_ADDRESS。Google Workspace の SMTP リレー(smtp-relay.gmail.com:587)や Gmail の SMTP 送信に対応します。自社ドメインのアドレス(例: [email protected])から送れます。
MAIL_USERNAME + MAIL_PASSWORD(Google のアプリ パスワード16桁。通常のログインパスワードは不可)。Vercel から送る場合はこちらが必須です。MAIL_AUTH=none を設定し、認証情報は使いません。固定グローバルIPのサーバーからのみ送れます(Vercel はサーバーレスで送信元IPが変わるため不可)。npm run mail:test(送らずに接続だけ確認。許可リストに登録する送信元IPも表示)、npm run mail:test [email protected](1通送る)、または 設定 → メール送信 の「接続確認 / テスト送信」。RESEND_API_KEY と EMAIL_FROM。EMAIL_FROM は Resend で認証済みドメインのアドレスにしてください。NEXT_PUBLIC_APP_URL に公開URLを設定してください。EMAIL_PROVIDER=console を設定します。src/
├─ app/
│ ├─ (app)/ 認証後のアプリ本体(ホーム/受注管理/申込・契約URL/代理店/請求書/顧客/定期/NSS引き落とし/入金/設定)
│ ├─ actions/ Server Actions(受注・申込・請求書・入金・NSS引き落とし・代理店・顧客・定期・認証)
│ ├─ api/ Cron・NSS登録用CSV などの Route Handler
│ ├─ apply/[token]/ 申込・契約フォーム(お客様向け・認証不要。申込+電子署名/代理店URLの問い合わせ)
│ ├─ login/ , print/ ログイン / 印刷用(PDF)
├─ components/ UIキット・アプリシェル・グラフ・請求書ドキュメント
├─ lib/
│ ├─ crypto/ 預かった認証情報の暗号化(AES-256-GCM)
│ ├─ data/ リポジトリ抽象(demo=インメモリ / supabase=本番)
│ ├─ domain/ 型・計算(税/合計/番号採番/料金)・受注の進み具合・代理店報酬・NSS・指標・定数
│ ├─ orders/ 受注の業務処理(申込+署名の受付・受注確定・受注一覧の読み込み)
│ ├─ email/ bank/ メール・銀行CSVの各アダプタ
│ ├─ supabase/ Supabase クライアント(ブラウザ/サーバー/管理者/middleware)
supabase/
├─ migrations/ スキーマ・RLS・関数
└─ seed.sql 初期データ
すべての画面・アクションは getRepository() を介してデータへアクセスします。Repository インターフェイス(src/lib/data/repository.ts)を、デモ(インメモリ) と Supabase の 2 実装が満たします。ダッシュボード指標などのロジックは src/lib/domain/metrics.ts に集約し、両実装で共有しています。
1つのアカウントに複数の役割を兼務させられます(例: 請求管理者 + 開発・修正管理者)。
| ロール | 表示名 | できること |
|---|---|---|
admin | 管理者 | 全機能 + アカウント管理。**要望の実行を承認する「承認者」**になります。 |
engineer | エンジニア | 開発進捗の対応担当。完了日・開発対応内容を入力します。 |
billing | 請求管理者 | 請求書・顧客・契約・入金などの請求業務。 |
dev_manager | 開発・修正管理者 | 不具合報告・要望の起票と進捗管理。請求管理者との兼務が可能。 |
owner / staff / dev | 旧種別(後方互換) | owner→管理者、staff→請求管理者、dev→エンジニアとして動作。役割変更で新しい役割へ移行します。 |
profiles.roles(配列)で管理します(profiles.role は主ロールとして後方互換のため保持)。設定画面(管理者のみ)からアカウントの作成・役割変更(複数選択)・名前変更・パスワード再設定・削除ができます。requester_name を保持)。SUPABASE_SERVICE_ROLE_KEY(サービスロール)が必要です。/dashboard などを開くと /login?redirect=... へ送られ、ログイン後に元のページへ戻ります。src/middleware.ts と、各ページの requireUser()(src/lib/auth.ts)の二段構えです。
src/ 配下に置く必要があります(src/app を使う構成でプロジェクト直下に置くと Next.js が読み込まず、認証ゲートが働きません)。ビルド出力に ƒ Middleware の行が出ることで確認できます。/billing/*)・トークンで保護された電子契約の署名ページ(/sign/*)・**申込フォーム(/apply/*)**のみです。テストで投入したデータを、記録を残したまま片付けられます。メニュー「ゴミ箱」。
deleted_at を立てて一覧・集計・ダッシュボードから外すだけです。定期請求の自動生成対象からも外れます。data_deletions に記録します。追記専用で、更新・削除は DB トリガーで拒否されます。締結済みの契約書は電子帳簿保存法の観点から削除対象に含めていません(取消は状態として記録します)。
スプレッドシートで運用していた「開発対応表」をそのままシステム化したものです(メニュー「開発進捗」)。
Ctrl+V(⌘+V)貼り付け。画像は自動で縮小してアップロードされます(本番は Supabase Storage・非公開バケット+署名付きURL)。https://<サイト>/d/12 のような依頼番号だけの短いURLです(UUID の長いURLを貼らなくてよく、口頭でも伝えられます)。開くと該当の依頼へ転送されます。「売上はどこまで来ているか」「開発はどこで止まっているか」を、アプリを開いた直後の1画面で掴めるようにした画面です(メニュー「進捗ホーム」/トップ / とホーム画面に追加した PWA の起動先もここ)。
週1回の開発MTGで「今週なにを進めるか」を共有するための表です(メニュー「開発スケジュール」//dev/schedule)。
スプレッドシートで管理していた中長期スケジュールを、開発進捗と連動する形でシステム化しています。
#143 から詳細へ飛べます。・勤怠管理(9/7) #143 #156 のような機能ごとに番号をまとめた文面をコピーできます。開発MTGやチャットへそのまま貼れます。0019 が profiles.schedule_visible を立てます)。以降は設定画面で増減できます。現場・移動中でもそのまま使えるよう、スマートフォン表示を前提に作っています。
viewport / テーマカラー / Web アプリマニフェストを設定済み。ブラウザの「ホーム画面に追加」でアドレスバーのないフルスクリーンのアプリとして起動できます(iOS 用アイコンも生成)。ノッチ・ホームバーのセーフエリアにも対応。npm run dev # 開発サーバー
npm run build # 本番ビルド(型チェック込み)
npm start # 本番起動
npm run typecheck # 型チェックのみ
デプロイ手順は DEPLOYMENT.md を参照してください。
ANTHROPIC_API_KEY の設定が必要です(ANTHROPIC_MODEL でモデル変更可・既定 claude-opus-5。未設定時はデモ用サンプルでフローを確認できます)。