Skip to content
プロジェクト

all-right-LLC/keydrop has 21 GitHub stars and 5 forks. GitHot measured +2 stars in 24 hours. Last checked 2026-11-14 10:09 UTC. Last push 2026-11-10.

この数値の測り方

できること

  • Four code kinds: redemption, discount, license (online activation with per-device limits) and external-platform codes
  • Generate, import (.xlsx / CSV with column mapping and preview) and sync Stripe promotion codes
  • AES-GCM encryption at rest, exact-match search, export, revoke / restore, expiry and per-code usage limits
  • Unique or shared codes, with shared-claim limits across campaigns and sales

計測したスター増加

24時間
+2
7日間
履歴を収集中
15日間
履歴を収集中
1か月
履歴を収集中

期間ごとの純増数です。期間は重複しており、日別の値ではありません。未計測の値は空欄です。スター数は注目度の指標であり、品質の保証ではありません。

概要

Self-hosted code distribution for indie developers: redemption codes, discount codes and license keys on your own Cloudflare Workers + D1.

セルフホスト

README.ja.md

オリジナル

Keydrop

English · 繁體中文 · 简体中文 · 日本語 · 한국어 · Italiano · Deutsch · العربية

個人開発者のためのセルフホスト型コード配布ツールです。 引き換えコード、割引コード、ライセンスキー、App Store プロモーションコードを、ご自身の Cloudflare アカウント上で管理・配布できます。無料の配布キャンペーン、Stripe 決済、利用権、API、Webhook、MCP サーバーを、ひとつの小さな Next.js アプリにまとめました。

Deploy to Cloudflare

CI License: MIT

Keydrop on Product Hunt

ステータス: 1.0 未満です。主要なフローは Cloudflare 上でエンドツーエンドに動作しますが、1.0 までは互換性のない変更が入る可能性があります。実際の販売に使う前に、ご自身の環境で十分にテストしてください。

Keydrop admin dashboard

Quick handout from your phone Sell codes with Stripe Checkout
API, webhooks and MCP Deploy to your own Cloudflare account

Keydrop を選ぶ理由

アプリを作ったら、手元にはプロモーションコードのスプレッドシート、数百件のライセンスキー、そして Stripe アカウントが残ります。Keydrop はそれらのコードの置き場所になります。

  • あらゆる種類のコードをひとつの在庫で管理 — コードを生成したり、CSV/Excel(App Store のオファーコード、パートナーのキー、Stripe のプロモーションコード)からインポートしたりでき、保存時は暗号化されます。
  • 必要な方法で配布 — 参加条件付きの公開/非公開の受け取りページ、Stripe による有料決済、直接割り当て、メール配布、チャットで相手にコードを渡すためのスマートフォン向け Quick handout ページに対応しています。
  • 誰が何を持っているかを把握 — 受け取り、注文、手渡し、引き換えはすべて記録されます。履歴を失わずに、コードの取り消し、利用権の回収、返金の処理ができます。
  • プロダクトに組み込める — スコープ付き API トークン、REST API、署名付き Webhook、MCP サーバーにより、バックエンドや AI エージェントからコードの発行や確認ができます。
  • 自分で運用できる — MIT ライセンス、管理者は 1 人、ご自身の Cloudflare Workers + D1 にデプロイします。ホスティングサービスもコードごとの手数料もありません。

機能

コードと在庫

  • 4 種類のコード:引き換えコード、割引コード、ライセンス(デバイス数制限付きのオンラインアクティベーション)、外部プラットフォームのコード
  • 生成、インポート(列のマッピングとプレビュー付きの .xlsx / CSV)、Stripe プロモーションコードの同期
  • AES-GCM による保存時の暗号化、完全一致検索、エクスポート、取り消し/復元、有効期限、コードごとの使用回数制限
  • 一意のコードと共有コード。共有コードはキャンペーンや販売をまたいで受け取り上限を設定できます

配布

  • 配布キャンペーン:公開/非公開リンク、匿名/メール認証済み/アカウント限定、1 人あたりと全体の上限、ネストした AND/OR の参加条件(期間、合言葉、招待、購入履歴、独自の HTTP チェック)
  • Stripe Checkout:1 回の購入につき 1 コード、割引、コードを取り消せる返金、3 種類の在庫切れ対応(返金、手動での発送、補充後の自動発送)
  • まだアカウントを持っていない相手への直接割り当てとメール配布
  • Quick handout — コードを取り出して共有し(端末上で描画する 3 種類の共有用画像カードを含む)、誰に渡したかを記録できるモバイルファーストのページ。ホーム画面に追加できます

特典と利用権

  • 組み込みのメンバーシップ(期間限定または永久)と、冪等な消費/返却 API を備えたクレジット台帳
  • 重複した特典は累積・上書き・拒否から選択。コードを取り消した際は未使用の利用権を回収
  • 外部特典はご自身のサービスに届けられ、結果が不明な場合は手動で確認できます

連携

  • 細かい権限をプロダクト単位で設定できるトークンを使う REST API と MCP サーバー(MCP はデフォルトで読み取り専用)
  • 再試行付きの署名付き送信 Webhook
  • 任意で Cloudflare Email Sending を利用し、ワンタイムコードでのサインイン、コードのメール送信、管理者向け通知に対応

管理コンソール

  • アクティビティグラフ、⌘K コマンドパレット、ライト/ダークテーマ、モバイルレイアウトを備えた SaaS 風ダッシュボード。beUI コンポーネントで構築しています
  • インターフェースは English、简体中文、繁體中文、日本語、한국어、Italiano、Deutsch、العربية に対応(右から左への表示もサポート)。言語は訪問者のブラウザ設定に従い、いつでも切り替えられます

技術スタック

Next.js(App Router)on Cloudflare Workers(OpenNext 経由) · Cloudflare D1 · Better Auth · Stripe(任意) · next-intl · beUI + Tailwind CSS

クイックスタート

Cloudflare にデプロイ

  1. 上の Deploy to Cloudflare をクリックします。Cloudflare が apps/web フォルダーをご自身の GitHub アカウントの新しいリポジトリにコピーし、Worker と D1 データベースを作成します。

  2. 求められる設定を入力します。

    名前 入力内容
    APP_URL サイトの HTTPS オリジン。例:https://keydrop.your-subdomain.workers.dev(末尾のスラッシュなし)
    ADMIN_EMAIL 唯一の管理者のメールアドレス
    BETTER_AUTH_SECRET ランダムなシークレット。例:openssl rand -hex 32
    SETUP_SECRET 別のランダムなシークレット。セットアップページで一度だけ使います
    CODE_ENCRYPTION_KEY 16 進数 64 文字。例:openssl rand -hex 32 — 必ずバックアップしてください。失うと既存のコードが読めなくなります

    シークレットにはそれぞれ異なる値を使ってください。ビルドコマンドは空欄のままにし、デプロイコマンドを pnpm run deploy に設定します。

  3. APP_URL/setup を開いて SETUP_SECRET を入力し、管理者パスワードを設定します。その後サインインして、最初のプロダクトを作成します。

無料のコア機能(コード、キャンペーン、受け取り)はこれだけで使えます。Stripe と Email Sending は必要になったら後から追加できます。

ローカルで実行

Node.js 24 以上と pnpm が必要です。

cd apps/web
pnpm install --frozen-lockfile
node scripts/create-local-env.mjs "$HOME/.config/keydrop/local.env" [email protected]
pnpm run db:migrate
KEYDROP_DEV_ENV_FILE="$HOME/.config/keydrop/local.env" pnpm dev

http://localhost:3000/setup を開き、生成されたファイルの SETUP_SECRET を使ってください(このファイルはリポジトリの外に置かれ、ターミナルには表示されません)。

手動でデプロイ

cd apps/web
pnpm exec wrangler login
pnpm exec wrangler d1 create keydrop   # データベース ID を wrangler.jsonc に記入します
# wrangler.jsonc に Worker 名、APP_URL、ADMIN_EMAIL を設定してから:
pnpm exec wrangler secret put BETTER_AUTH_SECRET
pnpm exec wrangler secret put SETUP_SECRET
pnpm exec wrangler secret put CODE_ENCRYPTION_KEY
pnpm run deploy                        # ビルド、D1 マイグレーションの適用、デプロイ

設定

設定 種類 必須 用途
APP_URL, ADMIN_EMAIL var はい 公開オリジンと管理者のメールアドレス
BETTER_AUTH_SECRET, SETUP_SECRET, CODE_ENCRYPTION_KEY secret はい セッションと ID のハッシュ化、初回セットアップ、コードの暗号化
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET secret 販売時 Stripe Checkout と /api/stripe/webhook の Webhook
EMAIL バインディング + EMAIL_FROM binding / var メール利用時 Cloudflare Email Sending:OTP サインイン、コードのメール送信、管理者向け通知
WEBHOOK_SECRETS secret Webhook 利用時 送信 Webhook の署名シークレット
ELIGIBILITY_SECRETS, EXTERNAL_REWARD_SECRETS secret 任意 独自の参加条件チェックと外部特典の受信先で使う署名シークレット
KEYDROP_TELEMETRY var 既定で有効 初期設定完了時に 1 回だけ送る匿名通知(ランダム ID+バージョン)。インストール数の集計にのみ使います。off で無効化。詳細

Cron トリガーが 5 分ごとに実行され、予約の期限切れ処理、入荷待ち注文の発送、キューに入ったメールの送信、Webhook の配信を行います。wrangler.jsonc を編集したら pnpm run cf-typegen を実行してください。

機能の切り替え(公開ページ、「My codes」、管理者向け通知メール)は apps/web/src/config/site.ts にあり、ブランディングとすべての文言は apps/web/messages/<locale>.json にあります。

自分のものにする

一般的なデプロイで変更する箇所は、ごく少数のファイルにまとまっています。変更をそこに留めておくと、あとで上流の更新を取り込みやすくなります。

変更したいもの 場所(apps/web/ 内)
ブランド名、ホームページとページの文言、メール本文 messages/<locale>.json:common.brand、home、publicSite、email(提供するすべての言語で同じキーを編集してください)
ホームページのセクションと並び順、任意の公開ページ、「My codes」と管理者向け通知の切り替え src/config/site.ts
フッターの「Powered by Keydrop」リンクと GitHub リンク(MIT では任意。オフにできます) src/config/site.ts: poweredBy.enabled, publicSite.repositoryUrl
ホームページのレイアウトとビジュアル src/components/site/landing/sections.tsx、src/components/site/landing/hero-visual.tsx、src/app/page.tsx
機能ページと任意のページ(ドキュメント、料金、デモ、変更履歴) src/app/features/page.tsx、src/app/[section]/page.tsx
ロゴ、ファビコン、アプリアイコン src/components/site/brand-logo.tsx、public/brand/、public/favicon.svg、src/app/favicon.ico、public/icons/、public/handout.webmanifest
色とライト/ダークテーマ src/app/globals.css(:root のトークンと --brand-accent)
SNS 共有用画像 ビルドのたびに scripts/generate-share-image.mjs がワードマークと home の文言から生成します
インターフェースの言語 src/i18n/locales.ts と、messages/ 内の言語ごとのファイル
Worker 名、公開 URL、Cron スケジュール、バインディング wrangler.jsonc(編集後に pnpm run cf-typegen を実行してください)

商品、価格、キャンペーン、参加条件、メール配信、API トークンはコードではなくダッシュボードで管理します。

次の箇所は、理由がわかっている場合にのみ変更してください:migrations/(新しいファイルを追加し、既存のファイルは編集しない)、src/lib/server/(認証、暗号化、決済、在庫のルール)、src/components/motion/(beUI コンポーネント。直接編集せず上流から更新してください)。

ドキュメント

詳しいガイドは docs/api にあり、English、繁體中文、简体中文 で提供しています(日本語版はありません)。

翻訳

インターフェースは 8 言語で提供しています。公開ページには /ja/features のような言語別 URL もあり、対応する hreflang タグとサイトマップのエントリーが付きます。メールは受信者ごとの言語で送信されます。各ロケールは apps/web/messages にある JSON ファイルで、en.json とまったく同じキーを持ちます。すべての翻訳が同じキーと同じ ICU プレースホルダーを持つことをテストで確認しています。言語を追加するには、src/i18n/locales.ts にその言語コードを追加し、対応する JSON ファイルを作成してください。ネイティブスピーカーによる修正を歓迎します。

開発

cd apps/web
pnpm run lint
pnpm run typecheck
pnpm test                # 実際の SQLite とマイグレーションを使ったユニットテストと統合テスト
pnpm run build:worker    # 本番用 Worker のビルド

CI では Node.js 24 と 26 で同じチェックを実行し、さらに新規のローカル D1 環境でコードの受け取りをエンドツーエンドで確認します。プルリクエストを送る前に CONTRIBUTING.md を、脆弱性の報告については SECURITY.md をご覧ください。

ライセンス

MIT © all right LLC. 同梱の beUI コンポーネントは上流の MIT ライセンスのままです(apps/web/vendor/beui.LICENSE)。

謝辞

Keydrop は次のプロジェクトに支えられています。開発と保守に携わるすべての皆さんに感謝します。

関連プロジェクトを探す