Compare commits
2 Commits
96f22b6a82
...
a1483ed00b
| Author | SHA1 | Date |
|---|---|---|
|
|
a1483ed00b | |
|
|
925638250b |
42
STATUS.md
42
STATUS.md
|
|
@ -6,8 +6,30 @@
|
||||||
|
|
||||||
- 特になし
|
- 特になし
|
||||||
|
|
||||||
|
## mai のPC から実行待ち
|
||||||
|
|
||||||
|
- 特になし(**posimai-boki** は独立リポジトリで Gitea/GitHub へ push 済み。追加分を出したときは `cd posimai-boki && npm run deploy`)
|
||||||
|
|
||||||
## 次にやること(優先順)
|
## 次にやること(優先順)
|
||||||
|
|
||||||
|
### posimai-boki(P1 — P0 完了+学習フロー強化済み)
|
||||||
|
1. **P1-1(ほぼ達成)**: 概念は「もっと詳しく」で折りたたみ済み。任意改善: `details/summary` への置き換え・アクセシビリティ微調整
|
||||||
|
2. **P1-2(一部達成)**: 「3ステップで学ぶ」(用語→仕訳イメージ→理解度)実装済み。残り: **既存 quiz のメタ分類**(難易タグ・出題意図)が必要ならデータ設計
|
||||||
|
3. **P1-3: 深掘りモーダル** — 比喩・長い補足のモーダル分離(未着手)
|
||||||
|
4. **技術負債(任意)**: 自動テスト、CSS の `index.html` 外だし、`categories.js` の分割、ビルド導入(ハッシュ付きアセット)
|
||||||
|
|
||||||
|
### posimai-boki P0 完了状態(2026-04-19 〜 更新)
|
||||||
|
- URL ?unit= 同期でリロード後も単元を復元 ✓
|
||||||
|
- 全 23 単元に examtips(試験対策メモ)✓
|
||||||
|
- freq/diff(頻出度・難易度)全単元設定 ✓
|
||||||
|
- ミス追跡(wrongUnits localStorage)✓
|
||||||
|
- ホームに「今日の学習」ブロック(苦手 + 未学習 を1タップで開始)✓
|
||||||
|
- サイドバーに苦手インジケーター ✓
|
||||||
|
- **弱点集中特訓**・**単元内 3 ステップ**・概念折りたたみ・ブロック並び(概念→要点→試験メモ→3ステップ→理解度)✓
|
||||||
|
- **データとアプリの分離**: `js/data/categories.js` / `drills.js` + `js/app.js` ✓
|
||||||
|
- **表示 HTML**: DOMPurify + `safeHtml()`、解説の保存時サニタイズ ✓
|
||||||
|
- **学習フロー UX**: 戻る=1枚前、学習フローを終了(理解度保持)、理解度をクリアして学ぶ、`#comprehension-quiz` へスクロール ✓
|
||||||
|
|
||||||
### Guard / Tauri
|
### Guard / Tauri
|
||||||
1. **Timer → Pulse 連携(セッションログ)** — タイマー終了時にセッション記録モーダル。`posimai-timer-sessions` に保存
|
1. **Timer → Pulse 連携(セッションログ)** — タイマー終了時にセッション記録モーダル。`posimai-timer-sessions` に保存
|
||||||
2. **Tauri アプリ動作確認** — デスクトップショートカットから起動、CodeViewer が WebView でも動くか確認
|
2. **Tauri アプリ動作確認** — デスクトップショートカットから起動、CodeViewer が WebView でも動くか確認
|
||||||
|
|
@ -75,6 +97,15 @@ node_modules/.bin/tauri build
|
||||||
| habit/pulse → VPS API 移行 | premium 対象決定後 | テーブルは VPS 存在済み。localStorage データの移行 UX 設計が必要 |
|
| habit/pulse → VPS API 移行 | premium 対象決定後 | テーブルは VPS 存在済み。localStorage データの移行 UX 設計が必要 |
|
||||||
| user_activity テーブル追加 | mai 確認必要(DB スキーマ変更) | Digest 週次集計の前提。CLAUDE.md 要確認事項 |
|
| user_activity テーブル追加 | mai 確認必要(DB スキーマ変更) | Digest 週次集計の前提。CLAUDE.md 要確認事項 |
|
||||||
| Redis 移行(webauthnChallenges) | スケール要件が出てから | 現状インメモリで問題なし |
|
| Redis 移行(webauthnChallenges) | スケール要件が出てから | 現状インメモリで問題なし |
|
||||||
|
| **Brain アクセントカラー確定** | mai 判断 | 2026-04-19 に indigo (`#818CF8`) → teal (`#6EE7B7`) へ変更。Posimai 標準に合わせたが、Brain は読書アプリとして indigo の方が雰囲気に合う可能性あり。indigo に戻す場合は `[data-app-id="posimai-brain"] { --accent: #818CF8; --accent-dim: rgba(129,140,248,.12); }` を style.css に追加。 |
|
||||||
|
|
||||||
|
## 直近でやったこと(2026-04-18 — posimai-boki)
|
||||||
|
|
||||||
|
- **リポジトリ**: `posimai-boki` 独立リポジトリ(Gitea/GitHub)。`npm run deploy` = 両リモート push → Vercel 自動デプロイ
|
||||||
|
- **構成**: カリキュラムを `js/data/categories.js` / `drills.js`、Alpine 本体を `js/app.js` に分割。`sw.js` で該当 JS をプリキャッシュ
|
||||||
|
- **セキュリティ**: DOMPurify(固定版 + SRI)、`x-html` は `safeHtml` 経由、クイズ解説は保存時サニタイズ
|
||||||
|
- **UX**: 単元ブロック順、Step1 タップ進行、戻る=1枚前、「学習フローを終了」、弱点特訓は「特訓をやめる」、理解度クリアして学ぶ、Step3 から `#comprehension-quiz` へ誘導
|
||||||
|
- **STATUS**: 本節および「mai のPC から実行待ち」の posimai-boki 古い記述を整理
|
||||||
|
|
||||||
## 直近でやったこと(2026-04-14 セッション2)
|
## 直近でやったこと(2026-04-14 セッション2)
|
||||||
|
|
||||||
|
|
@ -149,13 +180,4 @@ node_modules/.bin/tauri build
|
||||||
- **Together Supabase 撤退(2026-04-06)**: VPS PostgreSQL に完全移行(61件投稿)
|
- **Together Supabase 撤退(2026-04-06)**: VPS PostgreSQL に完全移行(61件投稿)
|
||||||
- **セキュリティ修正 4件(2026-04-06)**: e.message 直返し撤廃・WebSocket 認証・SSRF・Feed 認証
|
- **セキュリティ修正 4件(2026-04-06)**: e.message 直返し撤廃・WebSocket 認証・SSRF・Feed 認証
|
||||||
- **全体最適化(2026-04-10)**: skipWaiting 追加(4アプリ)・SW 登録追加(2アプリ)・brain ハードコード色修正
|
- **全体最適化(2026-04-10)**: skipWaiting 追加(4アプリ)・SW 登録追加(2アプリ)・brain ハードコード色修正
|
||||||
- **ドキュメント最新化**: server-refactor-plan.md マージ・atlas.json Supabase 削除/Gemini 追加・projects.json 更新・timeline 追記
|
- **ドキュメント最新化**: server-refactor-plan.md マージ・atlas.json Supabase 削除/Gemini 追加・projects.json 更新・timeli
|
||||||
|
|
||||||
## コードの「正」はどこか
|
|
||||||
|
|
||||||
| 何 | 正 | 役割 |
|
|
||||||
|----|-----|------|
|
|
||||||
| コード | **GitHub** | Vercel がここを参照。確認はここ |
|
|
||||||
| フロント本番 | **Vercel** | GitHub push で自動デプロイ |
|
|
||||||
| バックエンド本番 | **VPS** | `bash deploy-server.sh` で更新 |
|
|
||||||
| Gitea | バックアップのみ | push するだけ・確認先にしない |
|
|
||||||
|
|
@ -2591,7 +2591,7 @@ ${excerpt}
|
||||||
r.get('/together/groups/:groupId', async (req, res) => {
|
r.get('/together/groups/:groupId', async (req, res) => {
|
||||||
if (!/^[a-zA-Z0-9_-]+$/.test(req.params.groupId)) return res.status(400).json({ error: 'invalid groupId' });
|
if (!/^[a-zA-Z0-9_-]+$/.test(req.params.groupId)) return res.status(400).json({ error: 'invalid groupId' });
|
||||||
try {
|
try {
|
||||||
const result = await pool.query('SELECT id, name, created_at FROM together_groups WHERE id=$1', [req.params.groupId]);
|
const result = await pool.query('SELECT id, name, invite_code, created_at FROM together_groups WHERE id=$1', [req.params.groupId]);
|
||||||
if (result.rows.length === 0) return res.status(404).json({ error: 'グループが見つかりません' });
|
if (result.rows.length === 0) return res.status(404).json({ error: 'グループが見つかりません' });
|
||||||
res.json(result.rows[0]);
|
res.json(result.rows[0]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue