Self-hosted · Single-tenant · You approve every post
セルフホスト・シングルテナント・投稿は毎回あなたが承認
POST!

Every day, an AI picks a product from your Shopify catalog, writes the caption, you approve it — then it posts to Instagram & Threads.

毎日、AIがあなたのShopifyカタログから商品を選び、キャプションを書き、あなたが承認したら、Instagram と Threads へ自動投稿します。

Nothing ships to Instagram or Threads until you click approve. Your data, your tokens — no SaaS in the loop except the Anthropic API for writing captions.

あなたが承認ボタンを押すまで、InstagramにもThreadsにも一切投稿しません。データもトークンも全部あなたのもの。キャプション生成のAnthropic API以外、途中に外部SaaSは入りません。

POST! approval UI — review the AI-written post and approve it in one click
The local approval screen (localhost:8782) — real UI, shown with demo Sample Store products.
ローカルの承認画面(localhost:8782)— 実物のUIです(画像はデモ用の Sample Store 商品)。
In 60 seconds
60秒で分かる

Pick → Write → Approve.

選ぶ → 書く → 承認するだけ。

The tool does the daily grind. You keep the one decision that matters: hitting approve.

面倒な毎日の作業はツールが回します。あなたに残るのは大事な判断ひとつ=承認を押すことだけ。

1

It picks

選ぶ

Rotates through your Shopify catalog — a different product each day, no repeats for weeks.

Shopifyカタログを順送りし、毎日違う商品を選びます。同じ商品が何週間も続きません。

2

It writes

書く

Claude builds the carousel and writes the caption. Dedup, burst and safety guards run automatically.

Claudeがカルーセルを組み、キャプションを書きます。重複・連投・安全チェックは自動で通ります。

3

You approve

承認するだけ

Open the preview, see exactly how it'll look, click approve. Only then does it post.

プレビューを開いて「こう見える」を確認し、承認をクリック。そこで初めて投稿されます。

How to start
使い方

Four steps to your first post.

最初の投稿まで4ステップ。

Runs on your own machine (or a small server). Docker is the smooth path; plain Node works too.

あなたのPC(または小さなサーバ)で動きます。Dockerが一番スムーズ。素のNodeでも動きます。

1

Download

ダウンロード

Clone the repository to your machine.

リポジトリを自分のPCにクローンします。

# clone the repo
git clone https://github.com/veinsystem/post.git
cd post
2

Set your keys

鍵を設定

A setup wizard writes your .env and config.json. It asks for your Shopify domain + Admin token, brand name, IG handle, Instagram/Threads tokens, your Anthropic key, and Cloudflare R2 settings (for public image URLs).

セットアップウィザードが .envconfig.json を作ります。Shopifyドメイン+Adminトークン、ブランド名、IGハンドル、IG/Threadsトークン、Anthropicキー、Cloudflare R2設定(公開画像URL用)を順に聞きます。

node bin/init.js

Meta (Instagram/Threads) token setup is walked through in docs/setup_meta_tokens.md. This step — getting the keys — is the real work; the rest is quick.

Meta(Instagram/Threads)トークンの取り方は docs/setup_meta_tokens.md にまとまっています。この鍵の準備がいちばんの山場で、あとはすぐ終わります。

3

Start it (3 commands)

3コマンドで起動

With Docker: build, generate today's plan (dry-run — writes nothing live), and start the approval UI.

Dockerの場合: ビルド → 今日のプラン生成(dry-run・本番に何も書きません)→ 承認UIを起動。

docker compose build
docker compose run --rm daily        # today's plan (dry-run, safe)
docker compose up -d preview         # approval UI → localhost:8782

Prefer plain Node? npm ci, then DRY_RUN=1 node run-daily.js --dry-run, then node gen-preview.js.

素のNodeがよければ: npm ciDRY_RUN=1 node run-daily.js --dry-runnode gen-preview.js

4

Approve

承認画面で承認

Open http://localhost:8782. You'll see the AI-written post with its product carousel. Read it, and click approve. Live posting still needs the --live flag — two gates, so you're always in control.

http://localhost:8782 を開くと、AIが書いた投稿案と商品カルーセルが並びます。中身を読んで承認をクリック。実投稿にはさらに --live フラグが必要です。二重ゲートで、常にあなたが主導権を持ちます。

POST! approval screen — AI-written post with product carousel waiting for review POST! approval screen — a post approved and queued, nothing posted yet
Left: waiting for review. Right: approved & queued — still nothing posted.
左: 確認待ち。右: 承認済み・キューに記録(まだ投稿はされていません)。
Is it for you?
誰向けか(正直に)

Honest fit check.

正直なフィット確認。

This is a developer-hosted tool, not a one-click app. Here's who has a smooth time — and where the wall is.

これはワンクリックのアプリではなく、自分で動かすツールです。スムーズに進む人と、関門になる所を正直に書きます。

Smooth for you if…スムーズに進む人

  • You run a Shopify store with a real product catalog.
  • 実際の商品カタログがあるShopifyストアを運営している。
  • You (or someone on your team) can run a terminal command and edit a config file.
  • ターミナルのコマンド実行と設定ファイルの編集ができる(自分かチームの誰か)。
  • You want daily IG/Threads posts without handing your accounts to a SaaS.
  • アカウントをSaaSに預けずに、毎日IG/Threadsへ投稿したい。

The wall (be warned)関門(先に警告)

  • Non-technical? The token/key setup (step 2) is the hard part — it takes patience.
  • 非技術者だと、鍵・トークンの設定(ステップ2)がいちばんの関門です。少し粘りが要ります。
  • Instagram & Threads want public image URLs, so you'll set up Cloudflare R2 (free tier).
  • IGとThreadsは公開画像URLを要求するため、Cloudflare R2(無料枠)の設定が必要です。
  • It's self-hosted: you keep it running (a small server or your own machine).
  • セルフホストなので、動かし続ける環境(小さなサーバか自分のPC)は自分で用意します。
FAQ
よくある質問

Questions.

よくある質問。

My tokens keep expiring. Why?トークンがすぐ失効します。なぜ?
Instagram Graph and Threads long-lived tokens expire after 60 days. Refresh them before they lapse with node modules/cli/token-refresh.js (Threads) — the tool warns you when fewer than 7 days remain. Check status any time with node modules/cli/token-check.js.
Instagram Graph と Threads の長期トークンは 60日 で失効します。失効前に node modules/cli/token-refresh.js(Threads)で更新してください。残り7日を切ると警告が出ます。状態確認はいつでも node modules/cli/token-check.js
What is R2 and why do I need it?R2とは何ですか? なぜ必要?
Instagram and Threads APIs require publicly reachable HTTPS image URLs — they fetch your images by URL, so localhost won't work. Cloudflare R2 is object storage with a free 10 GB tier that provides those URLs. The tool signs uploads itself (no extra dependency). If you already run a public static server, use HOSTING_MODE=local_static instead.
InstagramとThreadsのAPIは 公開HTTPSの画像URL を要求します(URLで画像を取りに来るため localhost は使えません)。Cloudflare R2 は無料10GB枠のあるオブジェクトストレージで、そのURLを提供します。アップロードの署名はツール側で行います(追加依存なし)。すでに公開静的サーバがあるなら HOSTING_MODE=local_static も使えます。
How does the approval flow work?承認の流れは?
The tool generates a plan and a preview page but never posts on its own. Open http://localhost:8782, see exactly how the post will look, and click approve. Only approved posts enter the publish queue, and live posting requires the --live flag. Two gates keep you in control.
ツールはプランとプレビューを作りますが、自分では投稿しません。http://localhost:8782 を開いて「こう見える」を確認しクリックで承認。承認した投稿だけがキューに入り、実投稿には --live フラグが必要です。二重ゲートで常にあなたが主導権を持ちます。
How do I get a different product every day?毎日違う商品が出る仕組みは?
select tracks a rotation cursor and a cooldown (default 14 days in config.json), so it advances through your catalog and won't repeat an item until the cooldown passes.
select がローテーションのカーソルとクールダウン(config.json の既定14日)を管理し、カタログを順送りしながらクールダウンが明けるまで同じ商品を出しません。
Do I have to use both Instagram and Threads?InstagramとThreadsの両方が必須?
No. Configure at least one. The media block in config.json toggles channels; the wizard defaults to Threads on. Provide a token for whichever channel(s) you want.
いいえ。最低1つ設定すればOKです。config.jsonmedia で媒体をON/OFFでき、ウィザードの既定はThreads ON。使いたい媒体のトークンだけ入れてください。
Disclaimer
免責事項

This is an unofficial tool not affiliated with Meta, Instagram, or Threads. Use it in compliance with the Meta Platform Policy and Instagram's Terms of Use. The author is not responsible for any account suspension or API access revocation.

本ツールはMeta / Instagram / Threads の非公式ツールであり、これらと提携関係にありません。 MetaプラットフォームポリシーおよびInstagram利用規約に従い、自己責任でご利用ください。アカウント停止・API利用停止について、作者は一切の責任を負いません。