尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
買い物中に別行動になった家族・友人と、だいたいの位置を「レーダー」でざっくり共有するアプリ。 正確な地図やナビではなく、方角と距離だけを見せる。詳しい設計思想は design-spec.md を参照。 技術構成: Vite + TypeScript(フレームワークなし) + Supabase(DB。読み書きはRPC関数経由、5秒ごとのポーリングで同期)。 • Node.js(18以上) • Supabaseの無料アカウント( https://supabase.com )檢視完整 README ↗
買い物中に別行動になった家族・友人と、だいたいの位置を「レーダー」でざっくり共有するアプリ。
正確な地図やナビではなく、方角と距離だけを見せる。詳しい設計思想は design-spec.md を参照。
技術構成: Vite + TypeScript(フレームワークなし) + Supabase(DB。読み書きはRPC関数経由、5秒ごとのポーリングで同期)。
npm install
pg_cron を有効化(古いグループの自動削除に使う)supabase/schema.sql の中身を全部貼り付けて実行
(groups テーブルと members テーブル、読み書き用のRPC関数一式、古いグループの自動削除ジョブが作られる。テーブルへの直接アクセスは塞がれていて、必ずRPC経由になる)Project URLanon public キー(新しいSupabaseでは Publishable key という名前)既存のSupabaseプロジェクトを古い方式(テーブル直アクセスを許可するRLS)から移行する場合は、supabase/harden_rls.sql を先に実行してから supabase/schema.sql を実行してください。
.env.example をコピーして .env を作り、2-2でコピーした値を入れる。
cp .env.example .env
VITE_SUPABASE_URL=https://xxxxx.supabase.co
VITE_SUPABASE_ANON_KEY=xxxxxxxxxxxxxxxxxxxx
.env はGitにコミットしない(.gitignore済み)。
npm run dev
表示されたURL(http://localhost:5173 など)をブラウザで開く。
注意: 位置情報の許可ダイアログはHTTPSでないと基本的に出ない。localhost は例外的に許可されるブラウザが多いのでローカル開発では動くはずだが、スマホ実機で試す場合は同じネットワーク上でも http:// のIPアドレスだと出ないことがある(後述のVercelデプロイ後に試すのが確実)。
VITE_SUPABASE_URL と VITE_SUPABASE_ANON_KEY を設定npm run build / Output: dist。Viteプロジェクトなので自動検出されるはず)Vercelは自動でHTTPSになるので、スマホでの位置情報許可もそのまま機能する。
| ファイル | 役割 |
|---|---|
src/main.ts | 画面遷移・位置情報の取得と送信・ポーリング・レーダー描画。ロジックの本体 |
src/lib/geo.ts | 距離(Haversine)・方角(bearing)の計算 |
src/lib/colors.ts | 参加順に応じたメンバーカラーの割り当て(6色パレット、6人目以降はループ) |
src/lib/format.ts | 距離・経過時間の表示フォーマット、グループコード生成 |
src/lib/supabase.ts | Supabaseクライアントの初期化 |
src/style.css | デザイントークン(色・フォント・角丸など)を含む全スタイル |
supabase/schema.sql | DBスキーマ・RPC関数(読み書きの唯一の窓口) |
supabase/harden_rls.sql | 古い設定からの移行スクリプト(初回セットアップでは不要) |
groups/members に「誰でも読み書きOK」というRLSを設定していたが、これだと「グループコードを知らない第三者でも、Supabaseに直接問い合わせれば全グループ・全メンバーの現在地を丸ごと取得できてしまう」という問題があった。今は直接のテーブルアクセスを塞ぎ、get_group_members(p_code) のような「指定したグループの情報だけ返す」RPC関数だけを公開している。ただし4文字のグループコードを総当たりされるリスクはゼロではない(仕様書の「コードを知っている人には見える」というモデル自体がそういう前提)。postgres_changes)は「テーブルへの直接読み取り許可」が必要な仕組みで、上記のアクセス制限と両立しないため。仕様書 5.2 に書かれているもう一つの選択肢(3〜5秒間隔のポーリング)を採用した。pg_cronでcleanup_stale_groups()を毎日実行し、7日間誰も位置情報を更新していないグループをメンバーごと削除している(有効化手順は下記コメント参照)。仕様書7章と同じ:招待方法(QRコードなど)、グループの自動解散、プライバシー同意文言の整備、オフライン時の挙動。