候補者の街頭演説予定・実施中・終了を地図で可視化するWebアプリケーションです。
サポーター作の非公式サイトです。
- 候補者一覧表示(立候補区分・選挙区表示制御に対応)
- 候補者ページ(予定一覧 + 地図)
- イベント詳細ページ
- 演説状態表示(
PLANNED/LIVE/ENDED) - MoveHint(場所変更報告から推定地点を表示)
- 共有ボタン(X/Twitter, Facebook, LINE, クリップボード)
- 公開リクエスト投稿(新規・変更提案)
- 報告機能(開始・終了・場所変更・確認)
- 管理ログイン(数字ID + パスワード)
- 候補者CRUD
- 演説予定CRUD
- 演説予定CSV一括入稿(管理画面
/admin/events/bulk) - 公開リクエスト審査(絞り込み・一括承認/却下)
- サイト設定(表示制御・共有テンプレート)
- APIキー管理UI(SiteAdmin向け)
- 画像アップロードAPI(候補者画像・管理者のみ)
GET /api/public/candidates(APIキー必須)GET /api/public/candidates/{slug}/events(APIキー必須)GET /api/public/settings(認証不要)GET /api/docs(OpenAPI JSON)
GET /api/cron/auto-approve(報告ベースの自動承認)
- フレームワーク: Next.js 15 (App Router)
- 言語: TypeScript
- UI: Tailwind CSS + shadcn/ui
- 地図: Leaflet + React Leaflet
- 認証: NextAuth.js v5(Credentials)
- DB: PostgreSQL + Prisma
- ストレージ:
public/og-images(OG画像) + Vercel Blob(管理画面の画像アップロード用途・任意) - 分析: Vercel Analytics(
@vercel/analytics) - テスト環境: Vitest / Playwright(実行基盤あり)
npm installCopy-Item .env.example .envcp .env.example .env最低限、以下を設定してください。
DATABASE_URLNEXTAUTH_URLNEXTAUTH_SECRETAUTH_SECRET(通常NEXTAUTH_SECRETと同値)REPORTER_HASH_SALT
npm run db:generate
npm run db:pushnpm run create:admin-user手動指定する場合:
npm run create:admin-user -- --userId 123456 --password AdminPass123 --name "管理者" --role SiteAdminnpm run dev- 公開:
http://localhost:3000 - 管理ログイン:
http://localhost:3000/admin/login
.env.example に合わせた主な項目です。
DATABASE_URL: PostgreSQL接続文字列NEXTAUTH_URL: ベースURLNEXTAUTH_SECRET: NextAuth秘密鍵AUTH_SECRET: NextAuth互換秘密鍵(通常同値)REPORTER_HASH_SALT: レポーター識別ハッシュ用ソルト
BLOB_READ_WRITE_TOKEN: Vercel Blob利用時に必要CRON_SECRET: Cronエンドポイント保護用ALLOWED_ORIGINS: 公開APIのCORS許可オリジンNEXT_PUBLIC_UMAMI_WEBSITE_IDNEXT_PUBLIC_UMAMI_SCRIPT_URL
npm run devnpm run buildnpm run startnpm run lint
npm run db:generatenpm run db:pushnpm run db:migratenpm run db:studio
npm run create:admin-usernpm run seed
npm run ingest:facilitiesnpm run check:facilitiesnpm run cleanup:sample-facilitiesnpm run cleanup:all-sample-datanpm run cleanup:all-candidates-and-events
npm run testnpm run test:e2e
- 環境変数をVercelに登録(特に
DATABASE_URL,NEXTAUTH_URL,NEXTAUTH_SECRET,AUTH_SECRET,REPORTER_HASH_SALT) - 画像アップロード機能を使う場合のみ
BLOB_READ_WRITE_TOKENを設定 - Cron保護のため
CRON_SECRETの設定を推奨
{}/api/cron/auto-approve を使う場合のみ、必要に応じて Cron を追加してください。
- 他党イベント(
RivalEvent)の管理UI/APIは未実装 EventHistoryは記録されるが閲覧UIは未実装- 施設データは取り込み可能だが地図レイヤー表示は未実装
- 画像アップロードAPI(
/api/admin/upload)はあるが管理画面からの導線は未整備 - Vitest/Playwright のテストコードはほぼ未整備
- システム仕様:
docs/SPECIFICATION.md - API:
docs/API.md - APIセットアップ:
docs/API_SETUP.md - DBセットアップ:
docs/DATABASE_SETUP.md - 施設データ:
docs/FACILITY_DATA.md - 本番構築:
docs/PRODUCTION_SETUP.md - Vercel構築ガイド:
docs/VERCEL_DEPLOYMENT_GUIDE.md - 本番クイックスタート:
docs/QUICK_START_PRODUCTION.md - 貢献方法:
CONTRIBUTING.md
LICENSE を参照してください。