Skip to content

AI要約・タグ付け・全文検索でPDF/Wordを整理するドキュメントワークスペース(Next.js / Supabase / OpenAI)」

License

Notifications You must be signed in to change notification settings

AyumuKobayashiproducts/docuflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

230 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


📄 DocuFlow(日本語)

AI 要約 × 全文検索で「資料が見つかる」ドキュメントワークスペース

PDF / Word をアップロード → AI 要約・タグ付け → 検索・共有までを最短で。


🔗 Live

  • アプリ(日本語): https://docuflow-azure.vercel.app/app?lang=ja
  • アプリ(英語): https://docuflow-azure.vercel.app/app?lang=en
  • LP(英語): https://docuflow-azure.vercel.app/en
  • デモ(英語 / ログイン不要): https://docuflow-azure.vercel.app/demo/en


🇺🇸 English README


🧭 まずどこを見ればいい?(読者別)

  • 採用/面接で「成果物」を最速で見たい:
    • DashboardDocument detailShare view の順(下のスクショ参照)
    • 英語UIは ?lang=en で切替可
  • 実装の堅さ(RLS/RBAC/共有/監査)を見たい:
  • アーキテクチャ/設計判断を見たい:

📌 目次

🎯 3分でわかる(何ができる?)

  • アップロード: PDF / Word を投入すると、本文を抽出して保存
  • AI: 要約・タグ・(必要に応じて)埋め込みを生成し、検索性を上げる
  • 検索: キーワード検索 + 類似検索で「見つかる」導線に寄せる
  • 共有: 期限付きの閲覧専用リンクを発行(匿名列挙を防ぐ設計)
  • 組織: RBAC(owner/admin/member)とRLSでマルチテナントを堅く運用

🖼️ スクリーンショット(主要導線)

Dashboard

Dashboard

新規作成(AI処理)

New document

詳細(要約・タグ・共有)

Document detail

共有ページ(閲覧専用)

Share view

設定 / 組織

Settings

🎥 面接/レビュー用:5分デモ台本

「どこを見てほしいか」を5分で説明するための台本を用意しています:

おすすめの見せ順:

  1. /app ダッシュボード(検索・ピン・お気に入り)
  2. 新規アップロード → AI要約/タグ
  3. 共有リンク発行 → /share/<token>
  4. 組織(RBAC)/ 請求(Stripe)/ Vitals(運用)

🔐 セキュリティ / 共有リンクの考え方(要点)

  • 共有は閲覧専用(編集/削除/コメントは常に認証必須)
  • 匿名列挙の防止:
    • 共有ページは documents を直接SELECTしない
    • RPC get_shared_document(token) 経由のみで取得(tokenを知らないと取れない)
  • 期限: share_expires_at は DB 関数側で失効判定し、期限切れは取得不可
  • 監査ログ:
    • share_access_logs に閲覧を best-effort で保存
    • IP / User-Agent は SHA-256 でハッシュ化(生データは保存しない)
    • 保持は90日(best-effortで自動削除)

関連ドキュメント: docs/security.md


🌍 言語(EN/JA)挙動

  • 優先順位: docuflow_lang Cookie → Accept-Languagejaなら日本語、それ以外は英語)
  • URLで明示: ?lang=en / ?lang=ja
  • 共有ページ: ?lang が無い場合は推論で自動判定。右上の EN/日本語トグルで切替可能。

🧑‍💻 ローカルで動かす(最短)

前提

  • Node.js(推奨: LTS)
  • Supabase プロジェクト(DB + Auth)

1) 依存をインストール

npm ci

2) .env.local を作成

変数 必須 目的
NEXT_PUBLIC_SUPABASE_URL Supabase URL
NEXT_PUBLIC_SUPABASE_ANON_KEY Supabase anon key(公開)
SUPABASE_SERVICE_ROLE_KEY 任意 共有閲覧ログ/管理系(service_role)
OPENAI_API_KEY 任意 AI要約/タグ/埋め込み(無くても動く)
NEXT_PUBLIC_SITE_URL 任意 Stripe等の戻りURL(本番運用向け)

SUPABASE_SERVICE_ROLE_KEY が無い場合でもアプリは動きますが、共有閲覧ログ(share_access_logs)の記録/閲覧は無効化されます。

.env.local の作り方(コピペ)

cp docs/env.example .env.local

3) SupabaseのSQLを適用

  • supabase/migrations/ を Supabase Dashboard の SQL Editor で適用
  • 共有/監査ログ関連の追加分:
    • 20251217_harden_shared_access.sql
    • 20251218_fix_get_shared_document_tags.sql
    • 20251218_add_share_access_logs.sql

4) 起動

npm run dev

5) 動作確認チェックリスト(おすすめ)

  • /app?lang=ja にログインできる
  • ドキュメントを1件作成できる
  • 共有リンクを有効化 → /share/<token> が開ける
  • 共有ページを数回リロード → share_access_logs に行が増える

🧰 CI / 運用メモ

  • .github/workflows/supabase-migrations.ymlSUPABASE_DB_URL Secret が無い場合はスキップ(CIが赤くならない)
  • 自動適用したい場合は GitHub Secrets に SUPABASE_DB_URL を設定

💰 API料金(OpenAI)の「ちょうど良い」抑え方

1) まずは“全体の月次上限”を設定(おすすめ)

Vercel の環境変数に DOCUFLOW_AI_GLOBAL_MONTHLY_LIMIT を設定すると、 プロジェクト全体のAI呼び出し回数に上限を掛けられます(超えたらAIだけ停止、アプリは動く)。

例: 月500回で止める

DOCUFLOW_AI_GLOBAL_MONTHLY_LIMIT=500

2) ユーザー/組織の月次上限(既存)

プランごとの monthlyAICalls を DB の原子的カウンタ(ai_usage_monthly)で強制しています。

3) 連打対策(短期レート制限)

AI操作(例: 要約再生成)に 簡易レート制限を入れているので、短時間の連打で料金が膨らみにくいです。

4) すぐ止めたい(安全弁)

  • AIを完全停止: Vercel で OPENAI_API_KEY を削除(AI機能が無効化)
  • 今月だけ止める: DOCUFLOW_AI_GLOBAL_MONTHLY_LIMIT=0

👀 レビューで見てほしい実装ポイント(コード)

  • 言語ルーティング(EN-first): proxy.ts, lib/serverLocale.ts
  • 共有の安全設計: app/share/[token]/page.tsx, lib/shareAudit.ts, supabase/migrations/*share*
  • RBAC/組織: lib/organizations.ts, lib/billingScope.ts
  • AI使用量の強制: lib/aiUsage.ts, ensureAndConsumeAICalls の呼び出し箇所
  • メタデータ/SEO: app/layout.tsx, app/en/*

🛠️ トラブルシューティング

よくある詰まりどころはここに集約しています:

特に多いもの:

  • Supabase接続(env不足)
  • AIが動かない(OPENAI_API_KEY 未設定 / 予算上限)
  • 共有URLが404(期限切れ / 共有OFF / アーカイブ)

📚 さらに読む

About

AI要約・タグ付け・全文検索でPDF/Wordを整理するドキュメントワークスペース(Next.js / Supabase / OpenAI)」

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published