{"id":48616554,"url":"https://github.com/na0chan-go/home-dash","last_synced_at":"2026-04-09T02:09:47.440Z","repository":{"id":341837884,"uuid":"1171696708","full_name":"na0chan-go/home-dash","owner":"na0chan-go","description":"家庭内LANで動く、ローカルファーストな「家庭ホワイトボード」ダッシュボード。連絡共有・買い物メモ・ゴミの日確認を1画面に。","archived":false,"fork":false,"pushed_at":"2026-03-18T10:41:01.000Z","size":370,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-18T22:59:19.269Z","etag":null,"topics":["dashboard","docker","family","garbage-collection","golang","home-dashboard","home-lan","household","local-first","self-hosted","shopping-list","sqlite","vite","vue","vue3"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/na0chan-go.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-03T14:09:13.000Z","updated_at":"2026-03-18T10:41:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/na0chan-go/home-dash","commit_stats":null,"previous_names":["na0chan-go/home-dash"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/na0chan-go/home-dash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na0chan-go%2Fhome-dash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na0chan-go%2Fhome-dash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na0chan-go%2Fhome-dash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na0chan-go%2Fhome-dash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/na0chan-go","download_url":"https://codeload.github.com/na0chan-go/home-dash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/na0chan-go%2Fhome-dash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31581864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","docker","family","garbage-collection","golang","home-dashboard","home-lan","household","local-first","self-hosted","shopping-list","sqlite","vite","vue","vue3"],"created_at":"2026-04-09T02:09:42.075Z","updated_at":"2026-04-09T02:09:47.427Z","avatar_url":"https://github.com/na0chan-go.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HomeDash\n\nHomeDash は家庭内LANで運用する「家庭ホワイトボード」アプリです。\nMVP0では次の3機能に限定しています。\n\n- 連絡共有（notice）\n- 買い物メモ（shopping）\n- ゴミ表示（今日・明日）\n\n## 画面イメージ\n\n![HomeDash ダッシュボード画面](docs/screenshots/dashboard-20260323.png)\n\nHomeDash のダッシュボード画面イメージです。\n\n## 前提\n\n- 外部公開はしない（家庭内LAN / 必要時はVPN）\n- Docker前提で運用する\n- データはローカル保存する（SQLite / 設定ファイル）\n\n## バージョニング方針\n\n- 本プロジェクトは SemVer（`vX.Y.Z`）を採用します。\n- MVP0の初回リリースは `v0.1.0` とします。\n- `v0` 系でも破壊的変更は避け、API互換は `docs/API.md` のルールに従います。\n- 変更内容は必ず `CHANGELOG.md` の `Unreleased` に先に追記し、リリース時に確定版へ移動します。\n\n## Dockerタグ方針（現行運用）\n\n- 現在は `docker compose up --build` によるローカルビルド運用です。\n- 「どの版を動かしているか」は Gitタグ（`v0.1.0` など）で管理します。\n- 更新時は対象タグをチェックアウトして起動し、問題時は1つ前のタグへ戻します。\n- 将来的に GHCR などへタグ付き配布する余地はありますが、MVP0では未実装です。\n\n## 運用モード（認証）\n\n### 家庭内LANモード（既定）\n\n- `AUTH_TOKEN` 未設定\n- 今まで通り認証なしで利用\n\n### VPN/外部アクセス想定モード（推奨）\n\n- `AUTH_TOKEN` を設定\n- `/api/v1/*` は `Authorization: Bearer \u003ctoken\u003e` が必須\n- `/`（Vue画面）は開けますが、トークンなしではAPIが `401` になり画面に認証エラーが表示されます\n\n## 起動方法\n\n1. 必要に応じて `.env.example` をもとに `.env` を作成\n2. 次のコマンドで起動\n\n```bash\ndocker compose up --build\n```\n\n起動後のアクセス先:\n\n- API: `http://localhost:8080`\n- ヘルスチェック: `http://localhost:8080/api/v1/health`\n- 画面: `http://localhost:8080`\n\n停止:\n\n```bash\ndocker compose down\n```\n\n## 実機確認手順（Mac + iPad/iPhone）\n\n1. 最新コードを取得\n\n```bash\ngit checkout main\ngit pull\n```\n\n2. バックグラウンドで起動\n\n```bash\ndocker compose up --build -d\n```\n\n3. PC側で疎通確認\n\n```bash\ncurl http://localhost:8080/api/v1/health\n```\n\n4. MacのIP確認（同一Wi-Fi）\n\n```bash\nipconfig getifaddr en0\n```\n\n`en0` で出ない場合は `en1` も試してください。\n\n5. iPad/iPhoneで確認\n\n- Safariで `http://\u003cMacのIP\u003e:8080` を開く\n- PWA確認時は「共有」→「ホーム画面に追加」\n\n6. 最低限の動作チェック\n\n- 連絡メモ: 追加 / ピン / 削除\n- 買い物メモ: 追加 / 完了切替 / 削除\n- ゴミ: 今日・明日表示\n- 5分放置でスクリーンセーバ、タップで復帰\n- `22:00-06:00` で夜間暗転\n\n7. 終了\n\n```bash\ndocker compose down\n```\n\n### 実機確認時の補足\n\n- `AUTH_TOKEN` を設定している場合、`/api/v1/*` は Bearer 認証が必須です\n- `AUTH_TOKEN` 設定時の `health` 確認例:\n\n```bash\ncurl http://localhost:8080/api/v1/health \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n- iPad/iPhone と Mac が同じWi-Fiに接続されていることを確認してください\n- `docker compose ps` で `app` が `Up` になっていることを確認してください\n- Macのファイアウォール設定で `8080` へのアクセスが遮断されていないか確認してください\n- 不具合時はログ確認:\n\n```bash\ndocker compose logs -f app\n```\n\n## iPadホーム画面追加（PWA）\n\n1. iPad の Safari で `http://\u003cHomeDashサーバーIP\u003e:8080` を開く\n2. 共有ボタンを押して「ホーム画面に追加」を選択\n3. 以後はホーム画面の `HomeDash` アイコンから起動\n\nホーム画面から起動すると standalone 表示（アプリ風表示）になります。\n\n## 常設運用の推奨設定（焼き付き/眩しさ対策）\n\n- 夜間暗転: 既定で `22:00-06:00`（Asia/Tokyo）に画面全体を暗転します。\n- スクリーンセーバ: 既定で `5分` 無操作時に薄暗い画面へ切り替わります。\n- 解除方法: 画面をタップ（またはキー入力）すると即解除します。\n- 解除時動作: 解除したタイミングで `dashboard` を即再取得します。\n\n時間設定を変える場合は `web/.env` を作成し、以下を設定してから再ビルドしてください。\n\n```bash\ncp web/.env.example web/.env\n```\n\n```dotenv\nVITE_DIM_START=22:00\nVITE_DIM_END=06:00\nVITE_SCREENSAVER_IDLE_MS=300000\n```\n\n反映:\n\n```bash\ndocker compose up --build\n```\n\n## 初期設定\n\n### `.env`\n\n`.env` はコミットしません。必要なら `.env.example` をコピーして利用します。\n\n主要な環境変数:\n\n- `APP_ADDR`（デフォルト: `:8080`）\n- `APP_VERSION`（デフォルト: `unknown`）\n- `DB_PATH`（デフォルト: `/data/app.db`）\n- `GARBAGE_SCHEDULE_PATH`（デフォルト: `config/garbage_schedule.json`）\n- `BACKUP_DIR`（デフォルト: `/data/backups`）\n- `BACKUP_KEEP`（デフォルト: `30`）\n- `BACKUP_INTERVAL`（デフォルト: `24h`）\n- `AUTH_TOKEN`（任意。設定すると `/api/v1/*` 認証ON）\n\n### `config/garbage_schedule.json`\n\nゴミ曜日ルールは JSON ファイルで管理します（DB化しません）。\n\n- キー: `sunday`〜`saturday`\n- 値: 文字列配列\n- 空配列 `[]` は「なし」\n\n例:\n\n```json\n{\n  \"sunday\": [],\n  \"monday\": [\"燃えるゴミ\"],\n  \"tuesday\": [\"燃えないゴミ\", \"有害危険ゴミ\", \"古紙類\", \"繊維\"],\n  \"wednesday\": [],\n  \"thursday\": [\"燃えるゴミ\"],\n  \"friday\": [\"びん\", \"かん\", \"ペットボトル\", \"容器包装プラスチック\"],\n  \"saturday\": []\n}\n```\n\n## API（MVP0）\n\nすべて `/api/v1` 配下、JSONレスポンスです。\n\n### health\n\n- `GET /api/v1/health`\n\n### status（運用確認）\n\n- `GET /api/v1/status`\n\n`/api/v1/status` は Bearer 認証が必須です。\n- `AUTH_TOKEN` 設定時: `Authorization: Bearer \u003ctoken\u003e` が必要\n- `AUTH_TOKEN` 未設定時: `403`（`status endpoint requires AUTH_TOKEN`）を返します\n\n```bash\ncurl http://localhost:8080/api/v1/status \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n### dashboard\n\n- `GET /api/v1/dashboard`\n\n初期表示用の集約APIです。以下をまとめて返します。\n\n- `generatedAt`（Asia/Tokyo）\n- `notes.notice`\n- `notes.shopping`\n- `garbage.today`\n- `garbage.tomorrow`\n\n### notes\n\n- `GET /api/v1/notes?kind=notice|shopping\u0026limit=50`\n- `POST /api/v1/notes`\n- `DELETE /api/v1/notes/:id`\n- `PATCH /api/v1/notes/:id/pin`\n- `PATCH /api/v1/notes/:id/done`\n\n作成例:\n\n```bash\ncurl -X POST http://localhost:8080/api/v1/notes \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\"kind\":\"notice\",\"body\":\"牛乳を買ってください\",\"pinned\":true}'\n```\n\n### garbage\n\n- `GET /api/v1/garbage/today`\n- `GET /api/v1/garbage/tomorrow`\n- `GET /api/v1/garbage/summary`\n\n### admin（バックアップ）\n\n- `POST /api/v1/admin/backup`\n\n`AUTH_TOKEN` 設定時のみ実行できます。`Authorization: Bearer \u003ctoken\u003e` が必須です。\n\n```bash\ncurl -X POST http://localhost:8080/api/v1/admin/backup \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n## バックアップ/復元\n\n### バックアップ\n\n- 保存先: `/data/backups/`\n- 形式: `app-YYYYMMDD-HHMMSS.db`（同一秒は連番付き）\n- 保持数: `BACKUP_KEEP` を超えた古い世代は自動削除\n- 自動実行: サーバ起動後、`BACKUP_INTERVAL` ごとに定期バックアップ\n- 手動実行: `POST /api/v1/admin/backup`\n\n### 復元手順\n\n1. `docker compose down` で停止\n2. 念のため現行DBを退避  \n   例: `cp ./data/app.db ./data/app.db.before-restore`\n3. 復元したいバックアップを `./data/app.db` に上書き  \n   例: `cp ./data/backups/app-20260304-130000.db ./data/app.db`\n4. `docker compose up --build -d` で起動\n5. `GET /api/v1/health` と画面表示を確認\n\n## 困った時の確認手順\n\nまず `status` でアプリ状態を確認してください。\n\n```bash\ncurl http://localhost:8080/api/v1/status \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n主な確認項目:\n- `db.ok` が `true` か\n- `config.garbageScheduleLoaded` が `true` か\n- `lastBackup` が更新されているか\n\n## 注意事項\n\n- 家庭内LAN前提です。インターネットへ直接公開しないでください。\n- `.env` はコミットしないでください。\n- 祝日・年末年始などの特例は MVP0 対象外です（将来対応予定）。\n- MVP0範囲外（天気/室温/株価/献立/在庫/IoT等）は実装しません。\n- 本アプリは公開前提で作っていません。ルーターのポート開放はしないでください。\n- VPN経由で使う場合は `AUTH_TOKEN` 設定を強く推奨します。\n- `admin` 系エンドポイントはバックアップ用途のみ提供しています（`/api/v1/admin/backup`）。\n- オフライン時も UI の枠は開けますが、`/api/v1/*` のデータ更新はできません。\n  オンライン復帰後は自動で再取得して通常動作に戻ります。\n\n## Development\n\n### CI\n\nGitHub Actions で以下をチェックします。\n\n- Go build\n- Go test\n- Vue build\n- Docker build\n\n## 開発/運用\n\n- 開発ルール: `AGENT.md`\n- アーキテクチャ概要: `docs/ARCHITECTURE.md`\n- リリース手順: `docs/RELEASE.md`\n- 更新手順: `docs/UPDATE.md`\n- `AUTH_TOKEN` 未設定時の更新は `docs/UPDATE.md` の「`AUTH_TOKEN` を使わない場合」を参照してください\n- 変更履歴: `CHANGELOG.md`\n- 運用ログ（日次1分）: `docs/OPS_LOG.md`\n- 週次トリアージ手順: `docs/TRIAGE.md`\n- 週次レビュー手順: `docs/WEEKLY_REVIEW.md`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fna0chan-go%2Fhome-dash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fna0chan-go%2Fhome-dash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fna0chan-go%2Fhome-dash/lists"}