NECOPO MVP System Documentation
自然を守る人が、報われる仕組みを。
NECOPO は、自然共生サイトを起点に、生態系保全に人・活動・価値がめぐるエコシステムを目指す MVP です。このページでは、開発時に段階的に決めてきた思想、要求、設計方針、DB 構成、画面構成、現時点のシステム仕様を整理します。
2026-05-24 時点の公開テスト用資料
Purpose
開発の背景と目的
自然保全活動は、現地で手を動かす人、土地やサイトを維持する人、活動を支える人など、多くの関係者によって成り立ちます。 しかし、その貢献は見えにくく、活動の価値が循環する仕組みはまだ十分ではありません。
NECOPO MVP は、自然共生サイトや保全活動を起点に、ポイント、出品、交換、問い合わせを小さく回してみるための実験システムです。 最初から完成形を作るのではなく、関係者が実際に触りながら、価値の流れ、運用負荷、UX、制度上の論点を確認することを目的にしています。
Actors
想定ユーザーと利用シーン
一般ユーザー
ログインし、HOMEで残高を確認し、交換広場で出品や購入申請を行います。
出品者
商品・サービスを出品し、購入申請を確認し、承認や取り下げを行います。
管理者
テスト参加者へのポイント付与、状態確認、運用上の調整を行います。
テスト参加者
不具合・改善要望掲示板で、使い勝手や導線へのフィードバックを投稿します。
MVP Scope
現在実装している機能
- OAuth を中心にしたアカウント作成・ログイン
- HOME でのウォレット、残高、取引履歴の確認
- 交換広場での出品一覧、出品詳細、購入申請
- 購入申請時のポイントロック、出品者承認、完了処理
- 出品ごとの公開チャット
- 出品者による出品取り下げとロック金額の解除
- 管理者によるポイント付与
- 不具合・改善要望掲示板
- サイトポリシー、利用規約などの文書ページ
Screen Flow
画面構成と画面遷移
TOP
プロジェクトの入口。アカウント作成・ログイン画面へ誘導します。
LOGIN
Google / GitHub OAuth を中心に認証します。Magic Link は補助導線です。
HOME
ユーザー、ウォレット、残高、取引履歴を確認します。
交換広場
出品一覧を見て、出品詳細や新規出品へ進みます。
出品詳細
説明、価格、在庫、購入申請、出品チャットを扱います。
カート管理
購入申請の状態、承認待ち、完了に向けた状況を確認します。
出品者管理
申請承認、却下、出品取り下げを行います。
お問い合わせ
不具合・改善要望をスレッド形式で投稿し、OPEN / CLOSED を管理します。
主要遷移
TOP → LOGIN → HOME → 交換広場 → 出品詳細 → 購入申請 → カート管理 → 取引完了
交換広場 → 新規出品 → 出品者管理 → 申請承認 / 出品取り下げ
フッター → お問い合わせ → スレッド作成 → 返信 → CLOSE / REOPEN
Architecture
設計方針
- 認証済みユーザーだけが残高、取引、出品、チャットを操作できること
- Supabase Auth のユーザーとアプリ側ユーザーを分離し、auth_user_id で連携すること
- ポイント残高は available と locked に分け、申請中の金額を明示できること
- 取引の状態遷移を DB 上に残し、あとから履歴を追えること
- RLS により、本人に関係するウォレット、残高、取引だけを読めること
- DB 変更は migration SQL として Git 管理できること
技術構成
フロントエンドは Next.js、公開基盤は Cloudflare Workers / Pages、認証と DB は Supabase を使っています。Cloudflare では build variables と runtime variables の両方に Supabase 環境変数を設定し、公開環境では OAuth を中心に認証します。
Database
データ設計
| テーブル | 役割 |
|---|---|
| auth.users | Supabase Auth が管理する認証ユーザー。OAuth や Magic Link の入口。 |
| public.users | NECOPO アプリ上のユーザー。display_name、role、status、auth_user_id を持つ。 |
| wallets | ユーザーやサイトアカウントが持つ財布。owner_type と owner_id で所有者を表す。 |
| balances | ウォレットごとの利用可能額とロック額を保持する。 |
| transactions | 付与、移転、ロック、解除など、ポイント変動の履歴を残す。 |
| listings | 交換広場に出す商品・サービスの出品情報。 |
| trade_requests | 購入申請、承認、却下、完了、取り下げ時キャンセルを管理する。 |
| listing_messages | 出品ごとの公開問い合わせチャット。 |
| feedback_threads / feedback_posts | 不具合・改善要望掲示板のスレッドと返信。 |
関係の中心
`auth.users.id` → `public.users.auth_user_id` → `wallets.owner_id` → `balances.wallet_id` / `transactions.from_wallet_id` / `transactions.to_wallet_id` という流れで、認証ユーザー、アプリユーザー、ウォレット、残高、取引履歴をつなぎます。
Specification
現時点のシステム仕様
認証
ログイン画面では Google 認証と GitHub 認証を主導線にしています。Magic Link は送信制限の影響が大きいため、新規登録用の補助導線として下部に配置しています。
ポイントと取引
購入申請時に必要額を locked に移し、出品者の承認後に取引を進めます。取り下げやキャンセル時にはロック金額を解除し、履歴を残します。
チャット
出品詳細には出品ごとの公開チャットを設置しています。問い合わせ掲示板は不具合・改善要望ごとにスレッドを分け、 作成者または admin が CLOSE / REOPEN できます。
AI Development
Codex を用いた開発プロセス
本 MVP は、思想や要求を人間が提示し、Codex がコード、SQL、RLS、UI、デバッグを対話的に支援する形で進めています。 仕様を最初に固定するのではなく、動くものを確認しながら、認証方式、RLS、画面導線、問い合わせ掲示板などを段階的に具体化しました。
生成AIの役割は、単にコードを書くことだけではありません。エラーの切り分け、Supabase と Cloudflare の環境差分の確認、SQL Editor 用の文面作成、Git 管理すべき migration の整理など、開発の周辺作業にも広がっています。
Next Issues
今後の検討課題
- UX と導線の継続整理
- 画像アップロード、証跡、活動レポートとの連携
- 本番用 OAuth Provider 設定と Supabase Pro 運用
- バックアップ、復旧手順、監査ログの整備
- 法務文書、特定商取引、個人情報保護の確定
- ポイント設計、手数料、バーン、会計上の扱いの精査