diff --git a/atlas.json b/atlas.json index 9ac9408..d6181aa 100644 --- a/atlas.json +++ b/atlas.json @@ -10,36 +10,69 @@ "id": "windows-pc", "label": "Windows PC", "type": "device", - "description": "メイン開発機。Claude Code / VS Code / Git", + "description": "メイン開発機。Claude Code / VS Code / Git / Docker Desktop", "status": "active" }, { - "id": "iphone", - "label": "iPhone", + "id": "ubuntu-pc", + "label": "Ubuntu PC", "type": "device", - "description": "PWA テスト・モバイル確認", + "description": "Linux 開発・検証機。Tailscale 経由でアクセス", + "status": "active" + }, + { + "id": "android-phone", + "label": "Android (検証用)", + "type": "device", + "description": "PWA テスト・モバイル動作確認用スマートフォン", "status": "active" }, { "id": "synology", "label": "Synology NAS", "type": "device", - "description": "ローカルストレージ・Gitea ホスト", + "description": "ローカルバックアップ・Gitea ホスト。LAN 内常時稼働", "status": "active" }, + { + "id": "gitea", + "label": "Gitea", + "type": "service", + "description": "ローカル Git バックアップ。Synology 上で Docker 動作", + "url": "http://100.76.7.3:3000", + "status": "active", + "parent": "synology" + }, { "id": "vps-hetzner", "label": "VPS (Hetzner)", "type": "server", - "description": "Posimai API 本番サーバー。Docker コンテナで運用", + "description": "Posimai API 本番サーバー。Ubuntu 22.04、Docker で運用", "url": "https://api.soar-enrich.com", "status": "active" }, + { + "id": "docker", + "label": "Docker Engine", + "type": "service", + "description": "VPS 上のコンテナランタイム。Posimai API コンテナを管理", + "status": "active", + "parent": "vps-hetzner" + }, + { + "id": "posimai-api", + "label": "Posimai API", + "type": "service", + "description": "server.js。認証・記事・TTS・ジャーナル・習慣 API を提供", + "url": "https://api.soar-enrich.com", + "status": "active", + "parent": "vps-hetzner" + }, { "id": "tailscale", "label": "Tailscale", "type": "network", - "description": "デバイス間 VPN メッシュ。PC / iPhone / Synology / VPS を接続", + "description": "デバイス間 VPN メッシュ。全デバイスを安全に接続", "url": "https://tailscale.com", "status": "active" }, @@ -47,7 +80,7 @@ "id": "cloudflare", "label": "Cloudflare", "type": "network", - "description": "DNS 管理。api.soar-enrich.com 等のドメインを管理", + "description": "DNS 管理・CDN。api.soar-enrich.com 等のドメインを管理", "status": "active" }, { @@ -66,60 +99,50 @@ "url": "https://vercel.com", "status": "active" }, - { - "id": "stripe", - "label": "Stripe", - "type": "cloud", - "description": "決済処理。共同開発者と共有", - "url": "https://stripe.com", - "status": "active" - }, - { - "id": "gitea", - "label": "Gitea", - "type": "service", - "description": "ローカル Git バックアップ。Synology 上で Docker 動作", - "url": "http://100.76.7.3:3000", - "status": "active" - }, - { - "id": "docker", - "label": "Docker", - "type": "service", - "description": "VPS 上のコンテナランタイム。Posimai API コンテナを管理", - "status": "active" - }, - { - "id": "posimai-api", - "label": "Posimai API", - "type": "service", - "description": "server.js。認証・記事・TTS・ジャーナル API を提供", - "url": "https://api.soar-enrich.com", - "status": "active" - }, { "id": "posimai-apps", "label": "Posimai Apps", "type": "app", - "description": "25+ の posimai-* PWA 群。Vercel でホスト", + "description": "25+ の posimai-* PWA 群。Vercel でホスト、API を呼び出す", "url": "https://posimai-dashboard.vercel.app", + "status": "active", + "parent": "vercel" + }, + { + "id": "supabase", + "label": "Supabase", + "type": "cloud", + "description": "posimai-together のリアルタイムデータ・グループ共有機能", + "url": "https://supabase.com", + "status": "active" + }, + { + "id": "stripe", + "label": "Stripe", + "type": "cloud", + "description": "決済処理。共同開発者と共有、Kintone 連携実績あり", + "url": "https://stripe.com", "status": "active" } ], "edges": [ - { "from": "windows-pc", "to": "tailscale", "type": "connects", "label": "VPN" }, - { "from": "iphone", "to": "tailscale", "type": "connects", "label": "VPN" }, - { "from": "synology", "to": "tailscale", "type": "connects", "label": "VPN" }, - { "from": "vps-hetzner", "to": "tailscale", "type": "connects", "label": "VPN" }, - { "from": "windows-pc", "to": "gitea", "type": "push", "label": "git push" }, - { "from": "windows-pc", "to": "github", "type": "push", "label": "git push" }, - { "from": "github", "to": "vercel", "type": "trigger", "label": "auto deploy" }, - { "from": "vercel", "to": "posimai-apps", "type": "hosts" }, - { "from": "gitea", "to": "synology", "type": "runs-on" }, - { "from": "docker", "to": "vps-hetzner", "type": "runs-on" }, - { "from": "posimai-api", "to": "docker", "type": "runs-on", "label": "container" }, - { "from": "posimai-apps", "to": "posimai-api", "type": "calls", "label": "API" }, - { "from": "cloudflare", "to": "vps-hetzner", "type": "dns", "label": "DNS" }, - { "from": "posimai-apps", "to": "stripe", "type": "calls", "label": "payment" } + { "from": "windows-pc", "to": "tailscale", "type": "connects", "label": "VPN" }, + { "from": "ubuntu-pc", "to": "tailscale", "type": "connects", "label": "VPN" }, + { "from": "android-phone", "to": "tailscale", "type": "connects", "label": "VPN" }, + { "from": "synology", "to": "tailscale", "type": "connects", "label": "VPN" }, + { "from": "vps-hetzner", "to": "tailscale", "type": "connects", "label": "VPN" }, + { "from": "windows-pc", "to": "gitea", "type": "push", "label": "git push" }, + { "from": "windows-pc", "to": "github", "type": "push", "label": "git push" }, + { "from": "ubuntu-pc", "to": "gitea", "type": "push", "label": "git push" }, + { "from": "ubuntu-pc", "to": "github", "type": "push", "label": "git push" }, + { "from": "github", "to": "vercel", "type": "trigger", "label": "auto deploy" }, + { "from": "gitea", "to": "synology", "type": "runs-on" }, + { "from": "docker", "to": "vps-hetzner", "type": "runs-on" }, + { "from": "posimai-api", "to": "docker", "type": "runs-on", "label": "container" }, + { "from": "vercel", "to": "posimai-apps","type": "hosts" }, + { "from": "posimai-apps", "to": "posimai-api", "type": "calls", "label": "REST API" }, + { "from": "posimai-apps", "to": "supabase", "type": "calls", "label": "realtime" }, + { "from": "posimai-apps", "to": "stripe", "type": "calls", "label": "payment" }, + { "from": "cloudflare", "to": "vps-hetzner", "type": "dns", "label": "DNS" } ] } diff --git a/index.html b/index.html index ed55036..0f9c631 100644 --- a/index.html +++ b/index.html @@ -798,6 +798,30 @@ opacity: 0; transition: opacity 0.15s; } + + /* ── Containment hulls ────────────────────────────── */ + .group-hull { pointer-events: none; } + .group-hull-label { + font-size: 9px; + font-family: 'Inter', sans-serif; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + fill: var(--text3, #6B7280); + pointer-events: none; + opacity: 0.65; + } + + /* ── Tailscale scan ───────────────────────────────── */ + .scan-status { + font-size: 11px; + color: var(--text3); + padding: 3px 0; + display: none; + } + .scan-status.visible { display: block; } + .scan-status.ok { color: #4ADE80; } + .scan-status.err { color: #F87171; }
@@ -840,6 +864,21 @@ +