feat: initial commit — posimai-atlas v1
This commit is contained in:
commit
e76939cc42
|
|
@ -0,0 +1,125 @@
|
||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"owner": "mai",
|
||||||
|
"description": "Posimai 開発インフラ構成",
|
||||||
|
"updated": "2026-03-29",
|
||||||
|
"version": "1"
|
||||||
|
},
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": "windows-pc",
|
||||||
|
"label": "Windows PC",
|
||||||
|
"type": "device",
|
||||||
|
"description": "メイン開発機。Claude Code / VS Code / Git",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "iphone",
|
||||||
|
"label": "iPhone",
|
||||||
|
"type": "device",
|
||||||
|
"description": "PWA テスト・モバイル確認",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "synology",
|
||||||
|
"label": "Synology NAS",
|
||||||
|
"type": "device",
|
||||||
|
"description": "ローカルストレージ・Gitea ホスト",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vps-hetzner",
|
||||||
|
"label": "VPS (Hetzner)",
|
||||||
|
"type": "server",
|
||||||
|
"description": "Posimai API 本番サーバー。Docker コンテナで運用",
|
||||||
|
"url": "https://api.soar-enrich.com",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tailscale",
|
||||||
|
"label": "Tailscale",
|
||||||
|
"type": "network",
|
||||||
|
"description": "デバイス間 VPN メッシュ。PC / iPhone / Synology / VPS を接続",
|
||||||
|
"url": "https://tailscale.com",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cloudflare",
|
||||||
|
"label": "Cloudflare",
|
||||||
|
"type": "network",
|
||||||
|
"description": "DNS 管理。api.soar-enrich.com 等のドメインを管理",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "github",
|
||||||
|
"label": "GitHub",
|
||||||
|
"type": "cloud",
|
||||||
|
"description": "ソースコード管理。push で Vercel 自動デプロイをトリガー",
|
||||||
|
"url": "https://github.com/posimai",
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vercel",
|
||||||
|
"label": "Vercel",
|
||||||
|
"type": "cloud",
|
||||||
|
"description": "全 posimai-* アプリのホスティング・自動デプロイ",
|
||||||
|
"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 でホスト",
|
||||||
|
"url": "https://posimai-dashboard.vercel.app",
|
||||||
|
"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" }
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"id": "/posimai-atlas/",
|
||||||
|
"name": "Atlas",
|
||||||
|
"short_name": "Atlas",
|
||||||
|
"description": "インフラ構成図・サービス依存マップ",
|
||||||
|
"start_url": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"display_override": ["window-controls-overlay", "standalone"],
|
||||||
|
"background_color": "#0C1221",
|
||||||
|
"theme_color": "#0C1221",
|
||||||
|
"orientation": "any",
|
||||||
|
"categories": ["productivity", "utilities"],
|
||||||
|
"icons": [
|
||||||
|
{ "src": "/logo.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
|
||||||
|
{ "src": "/logo.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"name": "posimai-atlas",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"deploy": "git push gitea main && git push github main"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
const CACHE = 'posimai-atlas-v1';
|
||||||
|
const STATIC = ['/', '/index.html', '/manifest.json', '/logo.png', '/atlas.json'];
|
||||||
|
|
||||||
|
self.addEventListener('install', e => {
|
||||||
|
e.waitUntil(caches.open(CACHE).then(c => c.addAll(STATIC)));
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('activate', e => {
|
||||||
|
e.waitUntil(
|
||||||
|
caches.keys().then(keys =>
|
||||||
|
Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k)))
|
||||||
|
).then(() => self.clients.claim())
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('fetch', e => {
|
||||||
|
if (e.request.method !== 'GET') return;
|
||||||
|
if (!e.request.url.startsWith(self.location.origin)) return;
|
||||||
|
|
||||||
|
e.respondWith(
|
||||||
|
caches.open(CACHE).then(cache =>
|
||||||
|
cache.match(e.request).then(cached => {
|
||||||
|
const network = fetch(e.request).then(res => {
|
||||||
|
if (res.ok && res.type === 'basic') cache.put(e.request, res.clone());
|
||||||
|
return res;
|
||||||
|
}).catch(() => cached);
|
||||||
|
return cached || network;
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue