From bbb092c5868504dca4b20cc49c2b826894602b81 Mon Sep 17 00:00:00 2001 From: posimai Date: Thu, 23 Apr 2026 16:17:45 +0900 Subject: [PATCH] init: Posimai Chronicle v0 skeleton --- index.html | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++ logo.svg | 12 +++++ manifest.json | 16 ++++++ package.json | 9 ++++ sw.js | 31 +++++++++++ vercel.json | 42 +++++++++++++++ 6 files changed, 254 insertions(+) create mode 100644 index.html create mode 100644 logo.svg create mode 100644 manifest.json create mode 100644 package.json create mode 100644 sw.js create mode 100644 vercel.json diff --git a/index.html b/index.html new file mode 100644 index 0000000..7441615 --- /dev/null +++ b/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + Posimai Chronicle + + + + + + + + + + + + + +
+
+ + Posimai Chronicle +
+ +
+ +
+
+
+

Chronicle 原形(v0)

+

+ これは「開発ログ・気分・作業負荷」を統合して、公開前の下書きを作るための最小画面です。 + 現在はモック表示のみで、外部API接続や自動投稿は実行しません。 +

+
+
+
入力ソース
+
5
+
+
+
下書き候補
+
1
+
+
+
公開可否
+
確認待ち
+
+
+

次段階: Gitea/Journal/Habit/Pulse/Station の読み取り接続

+
+ +
+
+

1. 収集

+

コミット、Issue、体調ログ、負荷メトリクスを時系列に整列。

+
+
+

2. 生成

+

要点を3段構成でドラフト化(進捗、学び、次の一手)。

+
+
+

3. レビュー

+

公開前に1行コメントを追記し、タイトルを最終確定。

+
+
+

4. 公開

+

公開先へ送信。失敗時は draft 状態のまま保持。

+
+
+
+
+ +
+ + + + diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..a048a56 --- /dev/null +++ b/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..72c6e58 --- /dev/null +++ b/manifest.json @@ -0,0 +1,16 @@ +{ + "id": "/posimai-chronicle/", + "name": "Posimai Chronicle", + "short_name": "Chronicle", + "description": "AI駆動開発の記録を下書き化するChronicleの原形", + "start_url": "/", + "display": "standalone", + "display_override": ["window-controls-overlay", "standalone"], + "background_color": "#0D0D0D", + "theme_color": "#0D0D0D", + "orientation": "portrait-primary", + "categories": ["productivity"], + "icons": [ + { "src": "/logo.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any maskable" } + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..223f2c8 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "name": "posimai-chronicle", + "version": "0.1.0", + "description": "AI駆動開発ログを下書き化する Chronicle の原形", + "private": true, + "scripts": { + "deploy": "git push gitea main && git push github main" + } +} diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..f966260 --- /dev/null +++ b/sw.js @@ -0,0 +1,31 @@ +const CACHE = "posimai-chronicle-v1"; +const STATIC = ["/", "/index.html", "/manifest.json", "/logo.svg"]; + +self.addEventListener("install", e => { + e.waitUntil(caches.open(CACHE).then(c => c.addAll(STATIC))); + self.skipWaiting(); +}); + +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; + }) + ) + ); +}); diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..ce2cd75 --- /dev/null +++ b/vercel.json @@ -0,0 +1,42 @@ +{ + "headers": [ + { + "source": "/sw.js", + "headers": [ + { + "key": "Cache-Control", + "value": "public, max-age=0, must-revalidate" + } + ] + }, + { + "source": "/(.*)", + "headers": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "X-XSS-Protection", + "value": "1; mode=block" + }, + { + "key": "Referrer-Policy", + "value": "strict-origin-when-cross-origin" + }, + { + "key": "Content-Security-Policy", + "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://unpkg.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://fonts.gstatic.com https://posimai-ui.vercel.app; font-src 'self' data: https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self'; worker-src 'self'; frame-ancestors 'none';" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=31536000; includeSubDomains" + } + ] + } + ] +}