尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
自転車(中古車体・パーツ)に特化した C2C マーケットプレイスの MVP。 • スマホファースト(375px 基準)で設計し、PC はレスポンシブ対応 • 対応ブラウザ: 最新版 Chrome / Safari / Edge(iOS Safari・Android Chrome を含む) • ユーザー種別: 出品者・購入者(同一アカウントで兼任)・運営管理者 マイグレーションを足したら pnpm db:hosted を実行して、 生成された supabase/setup-hosted.sql を一緒にコミットする(CI が確認する)。 管理画面(/admin)は users.role = 'admin' のユーザーのみアクセスできます。 管理画面上での管理者追加 UI は MVP の対象外のため、DB を直接更新してください。 決済の確定は Webhook のみを正としています。Stripe CLI で転送してください。 テストカードは 4242 4242 4242 4242(有効期限は未来の任意日、CVC は任意の3桁)。 評価の14日自動公開と、未決済取引の掃除を行います。檢視完整 README ↗
自転車(中古車体・パーツ)に特化した C2C マーケットプレイスの MVP。
| レイヤ | 採用 |
|---|---|
| アプリ | Next.js 16(App Router / Turbopack)+ React 19 + TypeScript |
| UI | Tailwind CSS v4 + shadcn/ui |
| DB / 認証 / 画像 | Supabase(PostgreSQL / Auth / Storage) |
| 決済 | Stripe Checkout + Webhook |
| メール | Resend |
| ホスティング | Vercel(日次バッチは Vercel Cron) |
| テスト | Vitest(ユニット)/ Playwright(E2E) |
前提: Node.js 20.9 以上、pnpm、Docker
pnpm install
# Supabase をローカル起動(初回はイメージ取得に数分かかる)
pnpm db:start
# 出力された ANON_KEY / SERVICE_ROLE_KEY を .env.local に設定する
cp .env.example .env.local
# 型を生成
pnpm db:types
pnpm dev # http://localhost:3000
pnpm lint # ESLint
pnpm format # Prettier(整形)
pnpm typecheck # tsc --noEmit
pnpm test # Vitest(ユニット)
pnpm test:e2e # Playwright(E2E。シードを入れてから流す)
pnpm build # 本番ビルド
pnpm db:reset # マイグレーション再適用 + シード
pnpm db:types # src/types/database.ts を再生成
pnpm db:hosted # supabase/setup-hosted.sql を作り直す
マイグレーションを足したら pnpm db:hosted を実行して、
生成された supabase/setup-hosted.sql を一緒にコミットする(CI が確認する)。
| 用途 | URL |
|---|---|
| アプリ | http://localhost:3000 |
| Supabase API | http://127.0.0.1:54321 |
| 送信メールの確認(Inbucket) | http://127.0.0.1:54324 |
node scripts/seed-dev.mjs 500 # ダミー商品を 500 件作成
管理画面(/admin)は users.role = 'admin' のユーザーのみアクセスできます。
管理画面上での管理者追加 UI は MVP の対象外のため、DB を直接更新してください。
update public.users set role = 'admin' where email = '[email protected]';
決済の確定は Webhook のみを正としています。Stripe CLI で転送してください。
stripe listen --forward-to localhost:3000/api/webhooks/stripe
# 表示された whsec_... を .env.local の STRIPE_WEBHOOK_SECRET に設定する
テストカードは 4242 4242 4242 4242(有効期限は未来の任意日、CVC は任意の3桁)。
評価の14日自動公開と、未決済取引の掃除を行います。
curl -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/cron/daily
.env.example を参照してください。本番(Vercel)にも同じキーを設定します。
| 変数 | 用途 |
|---|---|
NEXT_PUBLIC_APP_URL | メール本文・OAuth リダイレクトの絶対 URL |
PLATFORM_FEE_RATE | 販売手数料率(表示のみ。精算処理は対象外) |
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY | クライアント用 |
SUPABASE_SERVICE_ROLE_KEY | サーバー専用。src/lib/supabase/admin.ts からのみ参照 |
SUPABASE_DB_URL | supabase db push 用の direct connection |
STRIPE_SECRET_KEY / STRIPE_WEBHOOK_SECRET | 決済 |
RESEND_API_KEY / EMAIL_FROM | メール送信 |
CRON_SECRET | /api/cron/daily の保護 |
Supabase(本番プロジェクト)
supabase link --project-ref <ref> → pnpm db:pushsupabase/seed.sql のブランドマスタを投入/auth/callback を登録listing-images / avatars バケットが作成されていることを確認Google OAuth(甲名義の Google Cloud プロジェクト)
https://<supabase-ref>.supabase.co/auth/v1/callback を追加Stripe
https://<本番ドメイン>/api/webhooks/stripe を登録checkout.session.completed, checkout.session.expiredSTRIPE_WEBHOOK_SECRET に設定Resend
Vercel
vercel.json の Cron(毎日 JST 4:00)が登録されることを確認docs/requirements/)| ドキュメント | 内容 |
|---|---|
| 00_overview.md | 目的・前提・スコープ・対象外・用語定義 |
| 01_functional.md | 機能要件(FR-01〜FR-14) |
| 02_screens.md | 画面一覧・遷移・UI/UX 方針 |
| 03_data_model.md | データモデル |
| 04_tech_stack.md | 技術スタック・外部サービス |
| 05_non_functional.md | 非機能要件 |
| 06_development_plan.md | 開発計画・受入基準 |
docs/plan/)| ドキュメント | 内容 |
|---|---|
| 00_execution_guide.md | 実行ガイド・ADR・ディレクトリ構成 |
| 01_bootstrap.md 〜 08_notifications_polish.md | フェーズ別の実装計画 |
| ACCEPTANCE_RESULT.md | 受入テストの実施結果 |
| RESPONSIVE_CHECK.md | レスポンシブ点検の結果 |
| BACKLOG.md | スコープ外の改善候補 |
別紙1 第3項に基づき、以下は本 MVP に含まれません。