iArt.ai
AI motion graphics software — the After Effects alternative anyone can use. Create animations and explainer videos from a text prompt in minutes.
Web-based RSS reader with AI summarization and translation
MediaKotlin · SwiftGitHub @m-tkgOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Web + iOS + Android の RSS リーダー。REST API を共有する Web フロントエンドとモバイルネイティブアプリ。Read the full README ↗
Web + iOS + Android の RSS リーダー。REST API を共有する Web フロントエンドとモバイルネイティブアプリ。
| レイヤー | 技術 |
|---|---|
| Backend | Node.js + Hono + TypeScript + better-sqlite3 |
| Frontend | React 19 + Vite + TanStack Query + Tailwind CSS v4 |
| iOS/iPadOS/macOS | SwiftUI + Swift 6.0 + URLSession(iOS 17.0+ / Mac Catalyst) |
| Android | Kotlin 2.1 + Jetpack Compose + OkHttp(Android 13+) |
| DB | SQLite(WAL モード) |
| Test | Vitest(backend + frontend) / XCTest(iOS/iPadOS/macOS) / JUnit4(Android) |
| Infra | Docker Compose + nginx / systemd(Raspberry Pi)/ GitHub Actions(CI) |
gogai/
├── backend/
│ ├── src/
│ │ ├── db/schema.ts # DB 初期化・スキーマ定義(マイグレーション管理)
│ │ ├── routes/ # Hono ルーター(パース + サービス呼び出しのみ)
│ │ │ ├── admin.ts # 更新確認 + git pull + 再起動
│ │ │ ├── articles.ts
│ │ │ ├── feeds.ts
│ │ │ ├── groups.ts
│ │ │ ├── settings.ts
│ │ │ ├── stocks.ts
│ │ │ └── stock-categories.ts
│ │ ├── services/ # ビジネスロジック
│ │ │ ├── articles.ts
│ │ │ ├── feed-discovery.ts # RSS URL 自動検出
│ │ │ ├── feed-refresher.ts # フィード再取得
│ │ │ ├── feed-registration.ts # フィード登録・URL変更・再取得の共通フロー
│ │ │ ├── feeds.ts
│ │ │ ├── groups.ts
│ │ │ ├── rss-fetcher.ts
│ │ │ ├── settings.ts
│ │ │ ├── stocks.ts
│ │ │ └── stock-categories.ts
│ │ └── index.ts # サーバーエントリーポイント(起動・スケジューリング)
│ └── data/ # SQLite DB(.gitignore 済み)
├── frontend/
│ └── src/
│ ├── api/ # client.ts / types.ts / queryKeys.ts / errors.ts
│ ├── components/
│ │ ├── articles/ # ArticleCard など
│ │ ├── sidebar/ # GroupSection / FeedList / FeedItem / AddForms
│ │ ├── ui/
│ │ ├── ArticleDetail.tsx
│ │ ├── ArticleList.tsx
│ │ ├── Settings.tsx
│ │ └── Sidebar.tsx
│ ├── hooks/ # useFeedMutations / useGroupMutations / useDragReorder など
│ └── App.tsx
├── ios/ # iOS / iPadOS / macOS(Mac Catalyst) アプリ(Xcode プロジェクト)
│ ├── Gogai.xcodeproj/
│ ├── Gogai/ # アプリ本体(詳細は CLAUDE.md 参照)
│ ├── GogaiShareExtension/ # 共有シート拡張(URL をストックに追加)
│ └── GogaiTests/ # XCTest ユニットテスト
├── android/ # Android アプリ(Gradle プロジェクト)
│ └── app/src/main/kotlin/com/mtkg/gogai/ # 本体(詳細は CLAUDE.md 参照)
├── daemon/ # systemd サービスファイル(Raspberry Pi 用)
│ ├── gogai-backend.service
│ ├── gogai-frontend.service
│ ├── gogai-cloudflare.service # Cloudflare Tunnel サービス
│ ├── cloudflare-tunnel.sh # Tunnel 起動 + Gist 書き込みスクリプト
│ └── setup.sh
├── .github/workflows/
│ └── ci.yml # CI(backend / frontend / android のテスト)
├── docker-compose.yml
├── Makefile
└── README.md
git clone 後は以下だけで動きます。.env は不要(PORT/DB_PATH はデフォルト値で動作)。
node_modules/・backend/data/(SQLite DB)・ios/build/ などはすべて .gitignore 対象で、
コマンド実行時や Xcode のビルド時に自動生成されるため、手動で用意するものはありません。
git clone [email protected]:m-tkg/gogai.git
cd gogai
# 依存関係インストール
make install
# バックエンド・フロントエンドを同時起動
make dev
# → Backend: http://localhost:3040
# → Frontend: http://localhost:5173
git clone https://github.com/m-tkg/gogai.git
cd gogai
make install
bash daemon/setup.sh
# → http://<raspi-ip>:5173
以降は Makefile で管理:
make daemon-start # 起動
make daemon-stop # 停止
make daemon-restart # 再起動
make daemon-status # 状態確認
make daemon-logs # ログ表示(リアルタイム)
または設定画面の「↻ git pull && 再起動」ボタンでブラウザから更新可能。
外出先から iOS アプリで接続する場合、Cloudflare Tunnel を使って Raspberry Pi を外部公開できます。
# 1. daemon/.env を作成(GitHub Classic PAT で gist スコープが必要)
cat > daemon/.env << EOF
GITHUB_PAT=ghp_xxxxxxxxxxxxxxxxxx
EOF
# 2. cloudflare-tunnel サービスを起動
sudo systemctl enable gogai-cloudflare
sudo systemctl start gogai-cloudflare
起動すると以下が自動実行されます:
*.trycloudflare.com URL を取得https://gist.github.com/<your-username>/<your-gist-id>自分の Apple アカウントでビルドする場合は、署名設定(Team ID / Bundle ID)を
ios/Config/Local.xcconfig で上書きする必要がある。詳細は
ios/README.md を参照。
# 起動(http://localhost:8080)
make docker-up
# イメージを再ビルドして起動
make docker-build
# ログ確認
make docker-logs
# 停止
make docker-down
要約・翻訳は iOS/iPadOS/macOS 側のオンデバイス AI(Foundation Models)で生成するため、 サーバー側に AI プロバイダー設定は存在しません(生成結果をストックに保存するのみ)。
| Method | Path | 説明 |
|---|---|---|
| GET | /api/groups | グループ一覧 |
| POST | /api/groups | グループ作成 { name } |
| PUT | /api/groups/:id | グループ更新 { name } |
| DELETE | /api/groups/:id | グループ削除 |
| PATCH | /api/groups/reorder | グループの並び替え { ids: number[] } |
| POST | /api/groups/:id/refresh | グループ配下のフィードを一括更新 |
| Method | Path | 説明 |
|---|---|---|
| GET | /api/feeds | フィード一覧 |
| POST | /api/feeds | フィード追加 { url, groupId? } ※ドメイン URL も可 |
| PUT | /api/feeds/:id | フィード更新 { title?, groupId? } |
| DELETE | /api/feeds/:id | フィード削除(記事も CASCADE 削除) |
| PATCH | /api/feeds/reorder | フィードの並び替え { ids: number[] } |
| POST | /api/feeds/refresh-all | 全フィードを一括更新 |
| POST | /api/feeds/:id/refresh | 記事を手動更新 |
| Method | Path | 説明 |
|---|---|---|
| GET | /api/articles | 記事一覧 ?feedId=&groupId=&unreadOnly=&likedOnly=&dislikedOnly=&limit=&offset= |
| GET | /api/articles/counts | フィードごとの記事数・未読数・like 数・dislike 数 |
| GET | /api/articles/:id | 記事詳細 |
| POST | /api/articles/:id/read | 既読にする |
| POST | /api/articles/:id/unread | 未読にする |
| POST | /api/articles/:id/like | like する(ユーザーの好みとして記録) |
| POST | /api/articles/:id/unlike | like を外す |
| POST | /api/articles/:id/dislike | dislike する(好みでないとして記録) |
| POST | /api/articles/:id/undislike | dislike を外す |
likedOnly=true / dislikedOnly=true を指定すると評価済みの記事だけを、評価した日時
(liked_at / disliked_at)の降順(sortBy より優先)で返す。
外部のキュレーション AI に正例・負例を渡すための取得口として使う。
like と dislike は排他。一方を付けるともう一方は自動的に外れる(サーバー側で保証)。
評価された記事は保持期間(retention_days)を過ぎても自動削除されない。
| Method | Path | 説明 |
|---|---|---|
| GET | /api/stocks | ストック一覧 ?category_id= |
| POST | /api/stocks | ストック追加 { url, title?, source?, category? } |
| PUT | /api/stocks/:id | タイトル・カテゴリ更新 { title, category } |
| DELETE | /api/stocks/:id | ストック削除 |
| PUT | /api/stocks/:id/summary | 要約を保存(端末側でオンデバイス生成した結果) { summary } |
| GET | /api/stocks/:id/translation | 翻訳結果を取得 |
| PUT | /api/stocks/:id/translation | 翻訳結果を保存 { segments } |
| DELETE | /api/stocks/:id/translation | 翻訳結果を削除(再翻訳用) |
| Method | Path | 説明 |
|---|---|---|
| GET | /api/stock-categories | カテゴリ一覧 |
| PATCH | /api/stock-categories/reorder | カテゴリの並び替え { ids: number[] } |
| Method | Path | 説明 |
|---|---|---|
| GET | /api/settings | 設定を取得 |
| PUT | /api/settings | 設定を更新 { retention_days } (3〜180) |
| Method | Path | 説明 |
|---|---|---|
| GET | /api/admin/update-check | git fetch でリモートと比較し更新の有無を返す |
| POST | /api/admin/restart | git pull + npm run build → レスポンス返却後に process.exit(0) で終了(systemd が自動再起動) |
groups (id, name, is_secret, display_order, created_at)
feeds (id, url, title, favicon_url, group_id→groups, last_fetched_at, display_order, created_at)
articles (id, feed_id→feeds, guid, title, link, summary, content,
published_at, is_read, read_at, liked_at, disliked_at, created_at)
settings (key, value)
stock_categories (id, name, display_order, created_at)
stocks (id, url, title, source, category_id→stock_categories,
summary, stocked_at, created_at)
stock_translations (stock_id→stocks, segments, translated_at)
feeds.group_id は ON DELETE SET NULL(グループ削除時にフィードは残る)articles.feed_id は ON DELETE CASCADE(フィード削除時に記事も削除)articles.liked_at / articles.disliked_at: NULL = 未評価。両者は排他(一方を付けると他方が NULL になる)。
評価された記事は保持期間を過ぎても自動削除されないstocks.category_id は stock_categories への必須参照(旧お気に入り機能をストックへ統合した後継)stock_translations.stock_id は ON DELETE CASCADE(ストック削除時に翻訳も削除)settings: key-value 形式(現在 retention_days のみ)| 変数 | デフォルト | 説明 |
|---|---|---|
PORT | 3040 | バックエンドのポート番号 |
DB_PATH | backend/data/rss.db | SQLite ファイルパス |
| コマンド | 説明 |
|---|---|
make install | 両プロジェクトの依存関係をインストール |
make dev | バックエンド・フロントエンドを並列起動 |
make dev-backend | バックエンドのみ起動 |
make dev-frontend | フロントエンドのみ起動 |
make build | 両プロジェクトをビルド |
make test | backend + frontend のテストを実行 |
make test-watch | backend テストをウォッチモードで実行 |
make typecheck | 型チェックのみ実行 |
make clean | dist を削除 |
make docker-up | Docker コンテナを起動 |
make docker-down | Docker コンテナを停止 |
make docker-build | イメージを再ビルドして起動 |
make docker-logs | ログを表示 |
make docker-clean | コンテナ・イメージ・ボリュームをすべて削除 |
make daemon-setup | systemd サービスをインストール・自動起動設定 |
make daemon-start | サービスを起動 |
make daemon-stop | サービスを停止 |
make daemon-restart | サービスを再起動 |
make daemon-status | サービスの状態確認 |
make daemon-logs | ログをリアルタイム表示 |
make ios-sync-icons | appiconset/ → xcassets へアイコンを同期 |
make ios-build | アイコン同期 + シミュレータービルド |
make ios-test | iOS ユニットテストを実行(iPhone 17 Pro シミュレーター) |
make ios-deploy | アイコン同期 + Release ビルド + 実機インストール + 起動 |