个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
本アプリは Concierge First を採用し、「神社検索」ではなく「相談テーマから神社と出会う体験」を中心に設計されています。詳細は docs/product/concierge-first-final-spec.md を参照してください。 主導線は以下です。 相談テーマ → コンシェルジュ → 神社詳細 → 経路案内 1. コンシェルジュで相談 2. 推薦された神社の詳細を見る 3. 経路案内で参拝する 検索画面で過度な解釈や長い理由付けは行わず、深い意味づけはコンシェルジュ側に集約します。 1. 概要 2. 主な機能 3. 技術スタック 4. セットアップ手順 5. プロジェクト構成 6. 重要ルール 7. アーキテクチャ設計 8. 公開御朱印の設計方針 9. Mobile(WIP--休眠運用) 10. CI/Branch運用 11. ドキュメント参照 12. 主要画面説明 13. 開発Tips 14. Rate limit(DRF throttle) 15. まとめ KAMI MUSUBIは、ユーザーの悩みや願いごとに応じて神社を提案し、神社詳細の確認から経路案内までつなぐ神社コンシェルジュアプリです。Webを中心に開発し、将来的にMobile(Expo)へ展開予定です。查看完整 README ↗
AI参拝ナビ MVP 統合ドキュメント
本アプリは Concierge First を採用し、「神社検索」ではなく「相談テーマから神社と出会う体験」を中心に設計されています。詳細は docs/product/concierge-first-final-spec.md を参照してください。
主導線は以下です。
相談テーマ → コンシェルジュ → 神社詳細 → 経路案内
### Concierge First
Concierge First では、トップ画面とコンシェルジュ画面を統合し、相談テーマを主入力として扱います。
- 主入力: 相談テーマ
- 条件追加: 参拝スタイル / 誕生日 / ご利益タグ
- 占星術・九星気学・風水: 補助シグナル
- 吉方位・相性: 詳細ページの補足情報
- 神社一覧・地図: サブ導線
詳細仕様は `docs/product/concierge-first-final-spec.md` を参照してください。
検索画面で過度な解釈や長い理由付けは行わず、深い意味づけはコンシェルジュ側に集約します。
現在の開発・ユーザー検証対象は Web MVP とし、次の4領域に集中する。
Mobile(Expo / Android / iOS)、御朱印画像登録等の画像機能拡張、課金機能の拡張は新規開発を保留する。既存コードや導線は直ちに削除しない。ただしUIの保留はAPI停止を意味しない。公開中のエンドポイントはセキュリティ上の管理対象に含め、停止または保護の実装・検証は別PRで行う。再開条件と優先順位は母艦判断とする。
技術責務の正本は docs/core/architecture.md、開発順序の正本は docs/core/roadmap.md。セキュリティ監査の所見は docs/audit/ で管理し、Critical/High修正が完了したとは扱わない。
KAMI MUSUBIは、ユーザーの悩みや願いごとに応じて神社を提案し、神社詳細の確認から経路案内までつなぐ神社コンシェルジュアプリです。Webを中心に開発し、将来的にMobile(Expo)へ展開予定です。
/map による周辺探索(補助機能)CONCIERGE_USE_LLM=0)cd backend
source ../.venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py runserver 127.0.0.1:8000
BILLING_STUB_PLAN=free BILLING_STUB_ACTIVE=0 python manage.py runserver 127.0.0.1:8000 --noreload
BILLING_STUB_PLAN=premium BILLING_STUB_ACTIVE=1 python manage.py runserver 127.0.0.1:8000 --noreload
export BILLING_STUB_PLAN=premium
python manage.py runserver
Places API 新ルートを使う場合
PLACES_API_NEW=1 python manage.py runserver 8000
cd /Users/morietsu/Desktop/jinja_app/backend && BILLING_STUB_PLAN=premium BILLING_STUB_ACTIVE=1 DISABLE_THROTTLE=1 python manage.py runserver 127.0.0.1:8000
make dev
cd apps/web
pnpm install
pnpm dev
注意: WebからはAPIに
/api/...経由でアクセスします
jinja_app/
├── backend/ # Django + DRF
├── apps/
│ ├── web/ # Next.js
│ └── mobile/ # Expo(WIP / 休眠運用あり)
└── docs/ # 設計・運用ドキュメント
apps/web/src/app/
├── api/ # BFF(Backend for Frontend)
│ ├── auth/ # 認証関連API
│ ├── concierge/ # コンシェルジュAPI
│ ├── favorites/ # お気に入りAPI
│ ├── goshuins/ # 御朱印API
│ ├── shrines/ # 神社API
│ └── users/ # ユーザーAPI
├── concierge/ # コンシェルジュページ
├── favorites/ # お気に入りページ
├── login/ # ログインページ
├── map/ # 地図ページ
├── mypage/ # マイページ
├── shrines/ # 神社詳細ページ
├── signup/ # サインアップページ
├── globals.css # グローバルCSS
├── layout.tsx # ルートレイアウト
└── page.tsx # トップページ
/api(Next Route Handler / BFF)経由でAPIを叩く{
baseURL: "/api",
withCredentials: true
}
/users/me/)"use client" を先頭に記述route.ts ファイルブラウザ → Next.js BFF → Django API
↓
Cookie (HttpOnly)
- access_token
- refresh_token
/api/auth/login/api/auth/login を利用lib/api/auth.ts も /api/auth/login を利用bffFetchWithAuthFromReq を認証転送の正本とする/api/auth/jwt/create(frontend route)は削除済み/api/auth/jwt/create/ を利用し、frontend は /api/auth/login のみを利用するNext.jsのRoute Handlerを使用して、以下を実現します。
/api/* だけを意識// apps/web/src/app/api/favorites/route.ts
export async function GET(req: NextRequest) {
return bffFetchWithAuthFromReq(req, "/api/favorites/", {
method: "GET"
});
}
/api/public/goshuins は shrine 指定必須apps/mobile/ はpnpm workspaceの正式メンバーで、CI・EAS Buildの構成は維持している。Android APKのビルド実績はあるが、Expo / Android / iOSの新規開発と実機QAは当面保留とする。依存関係はルートの pnpm-lock.yaml で管理し、再開時には互換性と安全性を改めて確認する。
maindevelop詳細は docs/40_infra_deploy.md を参照してください。
詳細設計・運用ルールは docs/ 配下に集約しています。
docs/10_arch_auth_proxy.mddocs/20_smoke_checks.mddocs/30_api_overview.mddocs/40_infra_deploy.mddocs/core/roadmap.mddocs/product/pricing.md, docs/product/premium-experience.mddocs/product/shrine-detail-layer.md/)/map)/shrines/[id])/concierge)/mypage)/favorites)• 神社登録は shrine 本体への直接追加ではない
• submission を別責務として扱う
• 投稿主体はログインユーザーのみ
• 状態は pending / approved / rejected
• approved 後に shrine 本体へ反映
• 画像アップロード、即公開、御朱印同時実装はスコープ外
• duplication detection は name + address を基本に扱う
• premium 判定の正本は backend billing state
• フロントは billing 状態を表示・再取得するだけ
• checkout 後は success / cancel / refetch を必須にする
• premium UI の対象は `docs/product/premium-experience.md` に従う
• 投稿機能は現時点では premium 条件と結びつけない
# Django開発サーバーのコンソール出力を確認
# ブラウザのDevToolsコンソール
# Next.jsのターミナル出力
デフォルトではLLMは無効です(CONCIERGE_USE_LLM=0)。有効化する場合のみ、以下を設定してください。
CONCIERGE_USE_LLM=1
OPENAI_API_KEY=...
# 任意
LLM_MODEL=...
LLM_MAX_TOKENS=...
LLM_BASE_URL=...
問題: 401エラーが頻発する
問題: CORSエラー
/api 経由にする問題: Cookie が送信されない
withCredentials: true が設定されていないConcierge API(/api/concierge/chat/)は throttle_scope="concierge" を使用します。デフォルトのレートは 8/min です。
環境変数で変更できます。
THROTTLE_CONCIERGECONCIERGE_THROTTLE(旧名称。設定されていれば上書き)例:
export THROTTLE_CONCIERGE=1/min
# ローカルでほぼ無効化(ingest以外)
export DISABLE_THROTTLE=1
このアプリは以下の特徴を持ちます。