プライバシーの説明
この説明は、このリポジトリの Marginlog のコードがデータをどう扱うかを述べます。名前のある組織が発行したプライバシーポリシーではありません。
これらの項目は意図して空です。このページは作りません。
案件と写真はこのブラウザに残ります
アカウントはありません。案件を保存しても案件の内容はアップロードされません。ブラウザに残るものは次のとおりです。
- localStorage marginlog:v1 — 案件名、相手、望む結果、記録本文、入力した時刻、起きたと書いた時刻、深刻度、継続時間、タグ、目撃のメモ、追加メモ、無効の理由、対応の段階、アーカイブ、選んだ言語、開いている案件。
- localStorage marginlog:v1:cp — 封印した記録の数と最後の指紋。記録の末尾が短くなったことに後から気づくためです。
- localStorage marginlog:v1:lastbackup — バックアップを最後にダウンロードした時刻。
- localStorage marginlog:v1:corrupt と marginlog:v1:corrupt-b — アプリが読めなかったデータの写し。残せた場合だけ。
- IndexedDB データベース marginlog、ストア photos — 縮小した写真。
- localStorage marginlog:license — 確認を通ったライセンスキーと、最後に確認した時刻。
- localStorage marginlog:gate — 最後の状態が有料確認をオンと答えたか(1 または 0)。
- localStorage marginlog-ai-key — Anthropic の API キー。保存した場合だけ。
ブラウザでこのサイトのデータを消すと、そのブラウザの写しは消えます。アプリは案件を削除でき(少しの間元に戻せます)、AI キーも消せます。このコードは案件のサーバー上の写しを持たないので、サーバーから消す対象がなく、削除の期限も書きません。
書き出したファイルには個人データが入り得ます
ダウンロードは、あなたが自分で送らない限り端末にあります。入力した内容が入っており、他の人の名前や情報が含まれることがあります。
- バックアップ JSON(写真を含む)。パスフレーズを付けると AES-GCM で暗号化します。鍵は PBKDF2-SHA256、反復 310000 回で作ります。パスフレーズは保存しません。忘れたパスフレーズをこのアプリは復元できません。
- 報告書(コピー、印刷または PDF、Markdown)、時系列(.txt)、CSV、ダイジェスト(.md)、カレンダー(.ics)、書面通知の下書き。
- 印刷と PDF には写真が入り得ます。報告書と CSV には短い指紋が入ります。カレンダーには入力した案件名と段階名が入ります。
ライセンス確認
アプリを開くと、この同じウェブサイトへ GET /api/license を送ります。本文はありません。応答 JSON の configured は true か false です。configured が true になるのは、サーバー環境に LEMONSQUEEZY_PRODUCT_ID があるときだけです。このリポジトリの関数はそのリクエストをデータベースに書きません。
ロック解除を押したとき、およびキーが保存されているあいだ約 7 日ごと、アプリは POST /api/license で JSON {"key":"<ライセンスキー>"} を送ります。
有料確認がオフなら、関数は {configured:false} を返し、Lemon Squeezy には連絡しません。
オンなら、関数はキーをフォーム項目 license_key として https://api.lemonsqueezy.com/v1/licenses/validate に送ります。Lemon Squeezy が valid と答え、状態が active または inactive で、商品 id が LEMONSQUEEZY_PRODUCT_ID と一致するときだけ受け入れます。ブラウザに伝えるのは {configured, valid} だけです。この関数は Lemon Squeezy の応答の残りを保存しません。ブラウザはその後キーを localStorage に保存します。
サービスワーカーは /api をキャッシュしません。状態のリクエストもブラウザの HTTP キャッシュを使わないよう求めます(cache: no-store)。案件の本文、写真、名前、AI キーはライセンスのリクエストに含まれません。
支払い
このウェブサイトはチェックアウトを提供しません。アプリ設定のチェックアウト先は、まだ example.com を含む仮のアドレスで、そのため購入ボタンは隠れたままです。価格、返金、請求、有効化の回数はまだ提供されていません。テストのチェックアウトは販売ではなく、このサイトはそこへリンクしません。
ライセンスのコードは、上に書いたとおり Lemon Squeezy のライセンス API を呼べます。それは店が開いていることや、価格が決まっていることを意味しません。
任意の AI
自分の API キーを保存し「AIで分析」を押すまで、Anthropic には何も送りません。リクエストは POST https://api.anthropic.com/v1/messages 、モデル claude-haiku-5-5 です。キーは x-api-key ヘッダーです。このブラウザにだけあり、/api/license には送りません。
メッセージは一つの案件の件数と日付です。種類、合計、期間、継続時間、深刻度、欠けている詳細(文字数、継続時間、目撃者、写真、記録のタイミング、タグ)、準備の確認、段階のタイミング。案件名、記録本文、メモ、氏名、住所、電話番号、タグは含まれません。相手を入力していた場合、送る表示は 당사자 A です。応答は画面に出るだけで、このコードはディスクに書きません。推定であり、法的な評価ではありません。
ホスティングと他の当事者
サイトは Cloudflare Pages で https://marginlog.pages.dev に公開されます。開くと、そのホストへ通常のブラウザリクエストが行き、ページのアドレス、IP アドレス、ユーザーエージェントが含まれ得ます。このリポジトリは解析スクリプトを加えず、独自のクッキーを置きません。ホストが接続記録をどれだけ保管するかは書きません。
このコードが連絡し得る相手:
- Cloudflare — ページと /api/license のホスト。
- Lemon Squeezy(api.lemonsqueezy.com)— 上のライセンス確認だけ。有料確認がオンのときだけ。
- Anthropic(api.anthropic.com)— 任意の AI リクエストだけ。
このサイトはフォントファイル、解析スクリプト、支払いのフレームを読み込みません。書体は端末に既にあるものです。サービスワーカーは同一オリジンの成功した GET 応答だけを保存し、/api 以下は除外します。他のウェブサイトの応答は保存しません。