尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
本番: https://surechigai.kimito.link GitHub リポジトリ: kimito-link/surechigai-romi.link 移動の副産物として封筒(すれ違い)が溜まり、帰宅後にまとめて開封する受動体験アプリ。 DSすれちがい通信の本質「開いた時に既に何かが起きている」をコアに据え、Xログインのみ・アプリ内DM禁止で運営する。 コンセプトを「移動の足あとを正確に残し、後で思い出の場所をたどれる/推しの軌跡を聖地巡礼できる」へ転換。 当初の「生座標を保存しない・48h削除」は廃止した。 1. 正確な座標を残す — lat/lng/accuracyM を保存。後でその場所に行ける精度。マッチング用に丸め値も併せて保持 2. 消さない(永続保存) — locations は削除しない。日を重ねるほど軌跡が積み上がる 3. タイムシフトマッチング — 同時刻同地点が不要。過去30日同セル通過者と成立 4. 自衛はユーザーに委ねる — 隠したい場所は「移動専用アカウント」の利用で(Xで名前を出してやる前提のため) • Node.js 22.x 以上 • pnpm 9.x 以上檢視完整 README ↗
本番: https://surechigai.kimito.link
GitHub リポジトリ: kimito-link/surechigai-romi.link
移動の副産物として封筒(すれ違い)が溜まり、帰宅後にまとめて開封する受動体験アプリ。 DSすれちがい通信の本質「開いた時に既に何かが起きている」をコアに据え、Xログインのみ・アプリ内DM禁止で運営する。
設計書: ../_archive/surechigai-nico/docs/V2-SURECHIGAI-DESIGN.md
| 特性 | 内容 |
|---|---|
| コンセプト | 移動の副産物としてすれ違い体験を積み重ねる |
| ログイン | X (Twitter) OAuth 2.0 のみ |
| 位置情報 | 正確な座標(lat/lng/accuracy)を保存し、後でその思い出の場所に行ける精度で残す。すれ違いマッチング用に H3 res8(約460m)+ 500m グリッドの丸め値も併せて保持 |
| マッチング | オンデマンド即時 + タイムシフト(過去30日同セル)の2本柱 |
| 削除ポリシー | 永続保存(48h削除は廃止)。足あとを思い出として残す方針 |
| 交流 | X に委譲。アプリ内は定型スタンプ一方向リアクションのみ。DM禁止 |
| インフラ | Vercel (フロント+API Functions) + Railway PostgreSQL + GitHub Actions スイープ |
コンセプトを「移動の足あとを正確に残し、後で思い出の場所をたどれる/推しの軌跡を聖地巡礼できる」へ転換。 当初の「生座標を保存しない・48h削除」は廃止した。
lat/lng/accuracyM を保存。後でその場所に行ける精度。マッチング用に丸め値も併せて保持locations は削除しない。日を重ねるほど軌跡が積み上がる| レイヤー | 採用技術 |
|---|---|
| フロントエンド | Expo Router (web/iOS/Android 1コードベース), NativeWind, tRPC client |
| バックエンド | tRPC + Express (Vercel Functions に同居), Drizzle ORM |
| DB | Railway PostgreSQL, H3 + B-tree (PostGIS 非依存)。DATABASE_URL は Railway 外部URL *.proxy.rlwy.net。詳細は CLAUDE.md「Railway / データベースについて」 |
| 認証 | Clerk + Twitter OAuth 2.0 PKCE |
| 位置精度 | H3 res8 (約460m), h3-js ライブラリ |
| モデレーション | Groq llama-3.1-8b-instant (14,400 RPD) 主 + Gemini Flash-Lite 控え |
| 地図 (フェーズ2) | MapLibre + OpenFreeMap (キー不要・無制限) |
| 通知 (フェーズ2) | Expo Push (完全無料) |
pnpm install
*.proxy.rlwy.net)を取得(内部URL *.railway.internal はローカルから接続不可)DATABASE_URL に設定# DB スキーマを Railway PostgreSQL に適用
pnpm db:push
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY と CLERK_SECRET_KEY を取得https://clerk.kimito.link/v1/oauth_callbackhttp://localhost:8081/oauth/twitter-callbackTWITTER_CLIENT_ID と TWITTER_CLIENT_SECRET を取得.env.example をコピーして .env.local を作成:
cp .env.example .env.local
# 各変数を編集
pnpm dev
| 変数名 | 必須 | 説明 |
|---|---|---|
DATABASE_URL | 必須 | Railway PostgreSQL 接続文字列(外部URL *.proxy.rlwy.net) |
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY | 必須 | Clerk 公開キー |
CLERK_SECRET_KEY | 必須 | Clerk シークレットキー |
TWITTER_CLIENT_ID | 必須 | Twitter OAuth 2.0 クライアント ID |
TWITTER_CLIENT_SECRET | 必須 | Twitter OAuth 2.0 クライアントシークレット |
ENCRYPTION_KEY | 必須 | Twitter トークン暗号化用 64 文字 hex キー (openssl rand -hex 32) |
SESSION_SECRET | 必須 | セッション署名用シークレット |
SWEEP_SECRET | 必須 | GitHub Actions スイープ Webhook 認証トークン |
NODE_ENV | 任意 | development / production |
PORT | 任意 | バックエンドポート (デフォルト: 3000) |
SENTRY_DSN | 任意 | Sentry エラー監視 DSN |
GROQ_API_KEY | 任意 | Groq API キー (ひとこと NGワードモデレーション) |
GEMINI_API_KEY | 任意 | Gemini API キー (モデレーション控え) |
# 本番向け guest smoke + 全ページ監査(mobile + desktop)
PLAYWRIGHT_BASE_URL=https://surechigai.kimito.link pnpm e2e
# 監査のみ
pnpm e2e:audit
# 認証済み E2E 用 — ブラウザで X ログイン完了後 .auth/auth-state.json を保存
pnpm e2e:auth-save
手動チェックリスト(認証 6タブ): docs/critical-features-checklist.md
監査結果: docs/investigation/full-site-audit-results.md
| 設定項目 | 値 |
|---|---|
| ドメイン | surechigai.kimito.link |
| Framework Preset | Other |
| Build Command | pnpm expo export -p web |
| Output Directory | dist |
| Install Command | pnpm install |
| Node.js Version | 22.x |
Vercel の Environment Variables に上記の「環境変数一覧」を全て設定すること。
スイープワークフロー (sweep.yml) に以下の secrets が必要:
| Secret 名 | 内容 |
|---|---|
DATABASE_URL | Railway PostgreSQL 接続文字列 |
SWEEP_SECRET | スイープ Webhook 認証トークン (.env.local の値と一致させる) |
API_BASE_URL | 本番 API URL (例: https://surechigai.kimito.link) |
surechigai-romi.link/
├── app/
│ ├── (tabs)/ # 5タブ画面
│ │ ├── index.tsx # ポスト(封筒開封UI)
│ │ ├── checkin.tsx # チェックイン(位置送信)
│ │ ├── zukan.tsx # 図鑑(47都道府県グリッド)
│ │ ├── map.tsx # 軌跡マップ
│ │ └── mypage.tsx # マイページ
│ └── oauth/
│ └── twitter-callback.tsx
├── modules/
│ └── encounter/ # すれ違いコアロジック
│ ├── core/ # 純TS: geo/tiers/matching/moderation/geocoding/privacy
│ └── db/ # Drizzle クエリ
├── server/
│ ├── routers/
│ │ ├── encounter.ts # tRPC encounter ルーター
│ │ ├── safety.ts # ブロック・通報
│ │ └── zukan.ts # 図鑑・訪問エリア
│ └── db/ # DB クエリ層
├── drizzle/
│ └── schema.ts # Railway PostgreSQL スキーマ定義
├── .github/workflows/
│ └── sweep.yml # 日次スイープ: DB keepalive・タイムシフトマッチング回収(48h削除は廃止)
├── .env.example # 環境変数テンプレート
└── CLAUDE.md # AIアシスタント向けコア・ディレクティブ
pnpm add maplibre-gl 後、app/(tabs)/map.web.tsx で H3 セルを GeoJSON → maplibre-gl レイヤーとして描画safety.listBlocked を追加して mypage.tsx に接続modules/encounter/ を doin-challenge.com に移植MIT License