尚未检测到更新。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コードなど)、グループの自動解散、プライバシー同意文言の整備、オフライン時の挙動。