アプリ

Waindie(ワインディー)| 自社プロダクト

日本の個人開発者どうしが、紹介リンクでお互いのプロダクトを紹介し合う相互プロモーションプラットフォーム。クリックをポイントで精算する仕組みを軸に、企画から開発・インフラ構築・運営まで社内で一貫して手がけた自社プロダクトです。

クライアント自社プロダクト(Betas株式会社)
種別Webサービス(会員制プラットフォーム)
対応デバイスPC・スマートフォン(レスポンシブWeb)
支援内容企画 / UI・UXデザイン / Webアプリケーション開発 / インフラ構築 / サービス運営
開発期間2025年12月 〜 現在(2026年3月 リリース)
使用技術Next.js 16 (App Router), TypeScript, React 19, Tailwind CSS v4, Drizzle ORM, Cloudflare Workers / D1 / R2 / Queues / Cron Triggers, OpenNext, Better Auth, Stripe, Resend, satori

プロジェクト概要

日本の個人開発者に向けた、相互プロモーションのプラットフォームです。開発者どうしが紹介リンクでお互いのプロダクトを紹介し合い、その紹介をポイントで精算する仕組みを軸にしています。宣伝だけでなく、月ごとの活動ログを公開したり、他の開発者からフィードバックを受け取ったりする場としても設計しました。企画から開発・インフラ構築・日々の運営までを社内で一貫して手がけている自社プロダクトです。

課題

AIの普及により、個人がアプリやサービスを「作る」ハードルは大きく下がりました。一方で「届ける」ハードルはそのまま残っています。ランディングページは作れても流入がない。広告に出せるだけの予算はなく、少額では効果も出ない。個人開発者に残された手段は、SNSでの発信やコミュニティでの交流を地道に積み重ねることでした。

ところが、その「地道」は、すでに発信力がある人ほど効く方法です。フォロワーがいない状態で発信しても反応が返らず、続ける理由を持てないまま止まってしまう。「SNSで発信しましょう」「コミュニティで認知を広げましょう」という一般的なアドバイスは、出発点にいる人ほど機能しにくい。この構造そのものが、解くべき課題だと考えました。

アプローチ

「身内3人」を持ち寄る

発信力を鍛えるのではなく、小さなネットワークを束ねる方向で設計しました。個人開発者ひとりのリーチは小さくても、家族や友人といった数人のつながりは誰でも持っています。それを100人分持ち寄れば、仕組みの上には数百人規模のトラフィックが生まれる。個人では届かない規模を、集まることで作るという考え方です。

紹介し合う関係を、ポイントで成立させる

お互いに紹介し合いましょう、という呼びかけだけでは関係は続きません。プロジェクトごとに紹介リンクを発行し、そこから訪問が発生すると、紹介した側にポイントが入り、紹介された側から引かれる形にしました。宣伝費の代わりにポイントが動くので、お金をかけずに露出を交換できます。相互に紹介し合った相手とは、月末に消費分の一部が戻る仕組みも用意しています。

振り返りを、そのまま発信にする

「今月なにをして、その結果どうだったか」を、カテゴリ(発信・広告・改善・交流など)と手応えの評価をセットにして記録し、月ごとにまとめて公開できるようにしました。開発者にとっては自分のプロジェクトの定点観測になり、読む側にとっては「何が効いて何が効かなかったか」の実例になります。振り返りを書く行為が、そのままプロジェクトの露出につながる設計です。

技術的な工夫

固定費をかけずに、必要なものを全部動かす

個人開発者に向けたサービスである以上、利用者が少ないうちから固定費がかさむ構成は選べません。かといって、安く上げるために落ちやすくなっては本末転倒です。そこでアプリケーション(Workers)、データベース(D1)、画像配信(R2)、メールのキュー(Queues)、定時実行(Cron Triggers)をすべて Cloudflare の上に置き、外部に依存するのは決済とメール配信だけに絞りました。専用のサーバーを常時立てないので、アクセスの少ない時間帯には費用がほとんど発生せず、それでいて配信はエッジに載ります。

手間がかかったのは、選定よりもむしろ「載せきる」ほうでした。Workers は実行時のWASMコンパイルを禁じており、画像生成のライブラリがそのままでは動きません。Next.js を Workers 上で動かす層は、定時実行のイベントを標準では受け取れません。データベースは SQLite なので、更新を1件ずつ投げれば往復が積み上がります。動かない部分を制約に合わせて一つずつ作り替えていく作業に、開発でもっとも時間をかけています。

紹介リンクのカード画像を動的に生成する

紹介リンクをSNSに貼ったとき、カードに「誰が紹介しているのか」が出るかどうかで反応が変わります。そのためプロジェクト名やアイコンに紹介者の情報を重ねた画像を、リクエストごとに生成しています。ただし前述のとおり Workers は実行時のWASMコンパイルを許さず、一般的な画像生成ライブラリは本番環境で動きませんでした。ライブラリの組み合わせを段階的に切り替えて依存するWASMを1つまで減らし、Next.js のビルドから切り離した独立したWorkerに置くことで解決しています。画像生成のためのサーバーを別に立てる必要がなく、リクエストが来たときだけ動きます。

サーバーレスのまま、日次で精算する

訪問のたびにポイントを動かすと、書き込みが増えるうえに不正の検出が後手に回ります。そこで精算は1日1回のバッチにまとめ、Cloudflare の定時実行から呼び出しています。標準では定時実行のイベントを受け取れないため、生成されたWorkerを包む独自のエントリポイントを用意しました。データベースへの更新は1回分をまとめて1つのバッチとして流し、往復を抑えています。処理済みの印を残しているので、途中で失敗して再実行しても二重に加算されません。

ポイントが増えすぎない経済圏をつくる

紹介リンクから訪問が発生すると、紹介した側にポイントが入り、紹介された側から引かれます。ポイントは実質的に通貨として振る舞うため、どこかに水増しできる穴があると仕組みそのものが成り立ちません。難しいのは不正を弾くことよりも、弾きすぎないことでした。自分で自分のリンクを踏む経路は精算から外し、新しいプロジェクトの獲得ポイントを一時的に増やす期間でも、消費する側は通常どおり引く。異常なクリックは閾値を超えた分だけを無効化し、閾値の内側は正当なものとして残す。複数のプロジェクトを持つ人が有利になりすぎないよう、順位の計算はプロジェクト数で割って調整しています。

メール送信に二重の経路を持たせる

確認メールが届かなければ、そもそも登録が完了しません。ここも費用を抑えたまま落とさない作りにしていて、外部のメール配信サービスを主経路にしつつ、送信量が上限に近づくと自社サーバーのSMTPプロキシへ自動で切り替わります。送信はキューを挟んで非同期に行い、結果はすべてログとしてデータベースに残す。遅延したものは翌日のバッチで送り直し、どちらの経路も使えないときはソーシャルログインへ案内する、という多段の逃げ道を用意しました。

成果

2025年12月に開発を始め、2026年3月にサービスを公開しました。以降も継続的にアップデートを重ねています。相互プロモーションの土台を作ったあと、ログイン不要で開発者を応援できるサポーター機能、月次ログ、露出の順位付け、アクセス解析の取り込みと、運営しながら機能を広げてきました。

会員登録と認証、決済、画像の配信、日次・月次のバッチ、メール配信までを含む一式が、専用のサーバーを常時立てない構成のまま動き続けています。規模に対して過剰な設備を抱えず、必要な信頼性だけを確保する——という組み方を、自社サービスで実地に検証している状態です。

企画から実装、インフラの構築、プロジェクトの審査や不正監視といった日々の運営までを社内で行っているため、実際に動かして分かったことをそのまま次の設計に反映できる体制になっています。

担当範囲

自社サービスの企画・開発・運営(トータルプロデュース)

  • コンセプト設計・課題定義
  • UI・UXデザイン
  • Webアプリケーション開発(フロントエンド / バックエンド)
  • インフラ構築・運用(Cloudflare)
  • サービス運営(プロジェクト審査・不正対策・問い合わせ対応)

URL